Code Reading
Diese Gruppe enthält Funktionen zur Detektion und zum Lesen von 1D- und 2D-Codes.
Funktionen
1D Codes
- F_VN_ReadBarcode(Exp)
- CodaBar
- Code39
- Code93
- Code128
- EAN8
- EAN13
- ITF
- UPCA
- UPCE
- Code39Extended
- F_VN_ReadPharmaCode(Exp)
2D Codes
Code-Anforderungen
Grundsätzlich wird eine Modulgröße von mindestens drei Pixeln vorausgesetzt; für stabilere Ergebnisse werden mehr als drei Pixel empfohlen. Das Bild sollte scharf sein und einen hohen Kontrast haben. Zudem wird eine Codeausrichtung von ca. 0° oder 90° empfohlen, sodass der Code parallel zu einer Bildachse liegt.
Interpretation des HRESULT
Für die Code Reading Funktionen werden die HRESULT–Rückgabewerte wie folgt benutzt:
Code | Name | Beschreibung |
---|---|---|
16#000 | S_OK | Funktion wurde erfolgreich ausgeführt und alle erwarteten Codes wurden gefunden (mindestens ein Code bei den Standard-Funktionen und nCodeNumber bei den Experten- Funktionen). |
16#001 | S_FALSE | Funktion wurde erfolgreich ausgeführt, aber nicht alle erwarteten Codes wurden gefunden (mindestens ein Code bei den Standard-Funktionen und nCodeNumber bei den Experten-Funktionen). |
16#256 | S_WATCHDOGTIMEOUT | Funktion wurde vom Watchdog abgebrochen. Einige Code Reading Funktionen können Teilergebnisse zurückgeben (siehe dazu einzelne Funktionsbeschreibungen). |
16#7xx | Sämtliche Error-Codes | Funktion wurde nicht erfolgreich ausgeführt. Siehe dazu: ADS Return Codes |
Daher genügt die übliche Überprüfung mit SUCCEEDED()
nicht, um auf einen gefundenen Code und damit auf vorhandene Daten in ipDecodedData
zu schließen. Dazu kann folgende Abfrage benutzt werden:
IF hr = S_OK THEN
// Export Code into String
hr := F_VN_ExportSubContainer_String(ipDecodedCode, 0, sCodeAsString, 255, hr);
// Use sCodeAsString
ELSIF SUCCEEDED(hr) THEN
// Process partial results
ELSE
// Error handling
END_IF
Suchstrategien bei 2D-Codes
Für die 2D-Codes werden die Suchalgorithmen auf verschiedene Varianten des Eingangsbildes angewandt, um möglichst viele Codes zu erkennen. Zum Generieren verschiedener Varianten wird Invertieren sowie Spiegeln des Bildes genutzt. Welche Varianten ausprobiert werden, wird als Suchstrategie bezeichnet. Damit Sie mehr Kontrolle über die Laufzeit der Funktionen haben, kann diese Suchstrategie konfiguriert werden. Dafür steht das Enum ETcVn2dCodeSearchStrategy zur Verfügung. Damit kann für jede mögliche Bildtransformation (Invertierung und Spiegelung) jeweils festgelegt werden, ob sie angewandt werden soll und ob das originale Bild oder das transformierte Bild als erstes auf Codes überprüft werden soll.
Der Funktionsparameter eSearchStrategy
definiert für entsprechende Code Reading Expertenfunktionen genau diese Suchstrategie. Die folgenden Tabellen zeigen die verschiedenen Kombinationen:
eSearchStrategy | Originalbild | Invertiertes Bild |
---|---|---|
TCVN_CSS_ONLY_NOT_INVERTED | 1. | - |
TCVN_CSS_FIRST_NOT_INVERTED | 1. | 2. |
TCVN_CSS_ONLY_INVERTED | - | 1. |
TCVN_CSS_FIRST_INVERTED | 2. | 1. |
eSearchStrategy | Originalbild | Gespiegeltes Bild |
---|---|---|
TCVN_CSS_ONLY_NOT_FLIPPED | 1. | - |
TCVN_CSS_FIRST_NOT_FLIPPED | 1. | 2. |
TCVN_CSS_ONLY_FLIPPED | - | 1. |
TCVN_CSS_FIRST_FLIPPED | 2. | 1. |
Für jede Transformationsart kann eine Suchstrategie festgelegt werden. Die Suchstrategien der verschiedenen Suchstrategien können wie folgt verknüpft werden:
eSearchStrategy := TCVN_CSS_ONLY_FLIPPED + TCVN_CSS_FIRST_INVERTED;
Zudem kann mit der Option TCVN_CSS_DEFAULT
eine Standard-Einstellung ausgewählt werden, die je nach Code-Art variiert.
Verknüpfung von Suchstrategien nicht möglich Eine Verknüpfung mehrerer Suchstrategien derselben Transformationsart ist nicht zulässig. Es kann jeweils nur eine Strategie für Invertierung und Spiegelung miteinander verknüpft werden. |