create_data_code_2d_model
— Anlegen eines generischen Modells für eine Klasse von 2D-Datacodes.
create_data_code_2d_model( : : SymbolType, GenParamName, GenParamValue : DataCodeHandle)
Mit Hilfe von create_data_code_2d_model
wird ein generisches
Modell für eine Klasse von 2D-Datacodes angelegt.
Als Ergebnis liefert der Operator in DataCodeHandle
ein
Handle zurück, das für alle weiteren Datacode-Operationen
verwendet wird, beispielsweise um das Modell zu modifizieren, um im
Bild nach Symbolen zu suchen und diese zu lesen, oder um später auf
die Ergebnisse der Symbolsuche zuzugreifen.
Das Konzept des 2D-Datacode-Lesers ist bei der Einleitung zu Kapitel Identifizierung / Datacode beschrieben.
Unterstützte Symboltypen
Der Parameter SymbolType
legt den Typ der zu lesenden
2D-Datacode-Symbole fest.
Derzeit werden vier 2D-Datacode-Typen unterstützt:
'Data Matrix ECC 200' , 'QR Code' , 'PDF417'
und 'Aztec Code' . Zusätzlich werden drei weitere GS1 Type
unterstützt: 'GS1 DataMatrix' , 'GS1 QR Code' und
'GS1 Aztec Code' . Die Datamatrix-Codes ECC 000-140 werden nicht
unterstützt, der QR-Code hingegen kann sowohl in der älteren Model-1-Version
als auch in der neuen Model-2-Version gelesen werden. Der PDF417 kann
sowohl in seiner herkömmlichen als auch in seiner kompakten Form
('Compact/Truncated PDF417') gelesen werden. Der Aztec Code kann im
'compact', 'full_range' und 'rune' (siehe ISO/IEC 24778:2008 (E) Annex E )
Format gelesen werden.
Die Symbolstruktur der drei GS1 Symbologien ist identisch mit
der Struktur ihrer nicht-GS1-Varianten - Data Matrix ECC 200, QR Code, bzw.
Aztec Code. Deswegen gelten alle typspezifischen Parameter, Einstellungen und
Vorgaben, die Data Matrix ECC 200, QR Code oder Aztec Code betreffen, auch
für ihre entsprechende GS1-Variante. Die GS1 Symbologien haben lediglich
zusätzliche Vorgabe bezüglich des Formats der im jeweiligen Symbol
kodierten Daten. Die Daten müssen in sogenannten "GS1 Application
Element Strings" organisiert werden, welche in den allgemeinen GS1
Spezifikationen definiert sind.
Alle Datacode-Leser unterstützen das Extended Channel Interpretation (ECI) Protokoll. Wenn das Symbol einen ECI-Code enthält, werden dem Standard entsprechend alle Backslashs ('\' , ASCII-Code 92), die im normalen Datenstrom vorkommen, in den Ausgabedaten verdoppelt ('\\' ), damit diese von der ECI-Sequenz '\nnnnnn' unterschieden werden können.
Ob ein Symbol einen ECI-Code enthält und damit, ob Backslashs verdoppelt
wurden oder nicht, kann der Symbology Identifier Kennung entnommen werden.
Diese kann mit dem Operator get_data_code_2d_results
, mit dem
Parameter 'symbology_ident' für jedes erfolgreich gelesene Symbol
abgefragt werden. Wie in der so zurückgelieferten Zahl kodiert ist, ob das
Symbol ECI-Codes enthält oder nicht, kann den jeweiligen Symbol-Standards
oder der Operatorbeschreibung get_data_code_2d_results
entnommen
werden.
Der Datacode-Leser stellt den Ausgabedaten in keinem Fall, also auch dann nicht, wenn das Symbol ECI-Codes enthält, automatisch die Symbology Identifier Kennung voran. Wenn ein solcher Datenstrom für die weitere Verarbeitung notwendig sein sollte, muss die Sequenz bestehend aus Identifierflag und Symbolkennung (']d' für Datamatrix-Codes, ']Q' für QR-Codes, ']L' für PDF417 Codes bzw. ']z' für Aztec Codes) sowie der als 'symbology_ident' zurückgelieferten Optionsnummer in der Anwendung vor dem Datenstrom manuell ausgegeben werden. Dementsprechend liefert der Parameter 'symbology_ident' für die GS1 Symbologien die folgenden Werte zurück: 2 für GS1 DataMatrix, 3 für GS1 QR Code und 1 für GS1 Aztec, welche den Identifiern ']d2', ']Q3', bzw. ']z1' entsprechen.
Standardeinstellung des Datacode-Modells
In der Grundeinstellung sind die Modellparameter so gewählt, dass
eine relativ große Gruppe von Symbolen in vertretbarer Zeit erkannt
wird, wobei in dieser Einstellung aus Laufzeitgründen nur Symbole
gelesen werden können, die gewissen Einschränkungen unterliegen
(vgl. dazu die folgende Tabelle).
Wurde das Modell wie weiter unten beschrieben modifiziert, kann es
durch Setzen des generischen Parameters
'default_parameters' auf 'standard_recognition'
(Operator set_data_code_2d_param
) jederzeit wieder in diese
Grundeinstellung zurückgesetzt werden.
Modellparameter | 'standard_recognition' | 'enhanced_recognition' | 'maximum_recognition' |
Polarität | dunkle Symbole vor hellem Hintergrund | dunkle Symbole vor hellem Hintergrund und umgekehrt | dunkle Symbole vor hellem Hintergrund und umgekehrt |
Minimaler Kontrast (Aztec Code, Micro QR Code, QR Code, PDF417) | 30 | 10 | 10 |
Modulgröße (Aztec Code, Data Matrix ECC 200, Micro QR Code, QR Code) | 6 ... 20 Pixel | >= 4 Pixel (bei guter Schärfe >= 2) | >= 4 Pixel (bei guter Schärfe >= 1) |
Modulgröße (PDF417) - Breite | 3 ... 15 Pixel | >= 3 Pixel (bei guter Schärfe >= 2) | >= 3 Pixel (bei guter Schärfe >= 1) |
Modulgröße (PDF417) - Seitenverhältnis | 1 ... 4 | 1 ... 10 | 1 ... 10 |
'small_modules_robustness' | niedrig ('low') | niedrig ('low') | hoch ('high') |
Modulform (Aztec Code, Data Matrix ECC 200, Micro QR Code, QR Code) | keine (Data Matrix ECC 200) oder nur kleine Lücken (Aztec Code, Micro QR Code, QR Code) zwischen benachbarten Modulen (< 10% der Modulgröße) | auch größere Lücken möglich, bis zu 10% (Data Matrix ECC 200) bzw. bis zu 50% der Modulgröße (Aztec Code, Micro QR Code, QR Code) | auch größere Lücken möglich, bis zu 50% der Modulgröße |
maximaler Slant (Data Matrix ECC 200) | 10° (0.1745) | 30° (0.5235) | 30° (0.5235) |
Modulgitter (Data Matrix ECC 200) | fest ('fixed') | fest oder variabel ('any') | fest oder variabel ('any') |
'finder_pattern_tolerance' (Data Matrix ECC 200) | niedrig ('low') | niedrig ('low') | variabel ('any') |
'contrast_tolerance' (Data Matrix ECC 200) | niedrig ('low') | niedrig ('low') | variabel ('any') |
'candidate_selection' (Data Matrix ECC 200) | standard ('default') | umfangreich ('extensive') | umfangreich ('extensive') |
'finder_pattern_tolerance' (Aztec Code) | niedrig ('low') | hoch ('high') | hoch ('high') |
Anzahl der Position-Detection-Patterns, die klar erkennbar sein müssen (QR Code) | 3 | 2 | 2 |
Ändern der Modelleinstellung
Ist bekannt, dass einzelne Parameter der zu lesenden Symbole diesen
Vorgaben (möglicherweise) nicht entsprechen (erscheinen im Bild
beispielsweise die Symbole hell vor dunklem Hintergrund oder ist mit
einem sehr geringen Kontrast zu rechnen), oder ergeben erste
Tests, dass einzelne Symbole in der Grundeinstellung nicht lesbar
sind, können entweder die entsprechenden Werte - wenn sie
bekannt sind - einzeln angepasst werden, wobei alle anderen
Einstellungen unverändert bleiben, oder aber das gesamte Modell
wird durch Setzen des generischen Parameters
'default_parameters' auf den Wert
'enhanced_recognition' in einem Schritt stark erweitert, so
dass eine deutlich größere Gruppe von 2D-Datacode-Symbolen erkannt
werden kann.
Da die Suche mit einem derart allgemeinen Modell allerdings deutlich
aufwendiger ist, kann sich die Rechenzeit des Operators
find_data_code_2d
bei der Symbolsuche z.T. erheblich
erhöhen.
Dies ist insbesondere dann zu erwarten, wenn in einem Bild kein
lesbarer Datacode gefunden werden kann, wenn das Symbol heller als
der Hintergrund ist oder wenn die Module sehr klein sind.
Durch Setzen des generischen Parameters
'default_parameters' auf den Wert
'maximum_recognition' wird das Modell im Vergleich zu
'enhanced_recognition' nochmals erweitert, so dass
Datacodes mit sehr kleiner Modulgröße robuster gelesen werden
können (siehe 'small_modules_robustness' ).
Für den Fall des Data Matrix ECC 200 unterscheidet sich der Modus
'maximum_recognition' vom Modus
'enhanced_recognition' insofern, dass auch Symbole mit
einem gestörten oder teilweise fehlenden Finder-Pattern gefunden werden
können (siehe 'finder_pattern_tolerance' ).
Die Verwendung dieses Modus kann zu einer erhöhten
Rechenzeit und einem erhöhten Speicherbedarf des Operators
find_data_code_2d
bei der Symbolsuche und der Dekodierung
führen.
Aus diesen Gründen sollte das Modell immer durch Setzen der
bekannten Symbolparameter soweit wie möglich eingeschränkt werden.
Dies kann hier direkt beim Erzeugen des Modells oder aber später
mit dem Operator set_data_code_2d_param
erfolgen, wofür bei
beiden Operatoren die generischen Parameter GenParamName
und GenParamValue
zur Verfügung stehen. So sollte z.B. im
Falle des Data Matrix ECC 200 bei der Verwendung des Modus
'maximum_recognition' die Symbolgröße soweit wie
möglich eingeschränkt werden. Eine detaillierte Beschreibung
der Parameter findet sich beim Operator
set_data_code_2d_param
.
Schließlich steht als eine weitere Möglichkeit, das Modell an
eine bestimmte Symbolform anzupassen, auch ein Trainingsmodus zur
Verfügung.
Der Operator find_data_code_2d
erlaubt es, mit der
Parametereinstellung 'train' die Symbolparameter aus
einem oder mehreren Beispielbildern zu trainieren.
In jedem Fall können die aktuell eingestellten Modellparameter mit
get_data_code_2d_param
ausgelesen werden.
Die Namen der Parameter, die für das konkrete Modell gesetzt
bzw. abgefragt werden können, liefert
query_data_code_2d_params
.
Dieser Operator liefert ein Handle zurück. Es ist zu beachten, dass der Zustand einer Instanz dieses Handletyps durch bestimmte Operatoren geändert werden kann, obwohl das Handle als Eingabeparameter in diesen Operatoren verwendet wird.
SymbolType
(input_control) string →
(string)
Typ des 2D-Datacodes.
Defaultwert: 'Data Matrix ECC 200'
Werteliste: 'Aztec Code' , 'Data Matrix ECC 200' , 'GS1 Aztec Code' , 'GS1 DataMatrix' , 'GS1 QR Code' , 'Micro QR Code' , 'PDF417' , 'QR Code'
GenParamName
(input_control) attribute.name(-array) →
(string)
Namen der generischen Parameter, die für das 2D-Datacode-Modell eingestellt werden sollen.
Defaultwert: []
Werteliste: 'additional_levels' , 'candidate_selection' , 'contrast_min' , 'contrast_tolerance' , 'default_parameters' , 'finder_pattern_tolerance' , 'mirrored' , 'model_type' , 'module_aspect' , 'module_aspect_max' , 'module_aspect_min' , 'module_gap' , 'module_gap_max' , 'module_gap_min' , 'module_grid' , 'module_size' , 'module_size_max' , 'module_size_min' , 'module_width' , 'module_width_max' , 'module_width_min' , 'persistence' , 'polarity' , 'position_pattern_min' , 'slant_max' , 'small_modules_robustness' , 'strict_model' , 'strict_quiet_zone' , 'symbol_cols' , 'symbol_cols_max' , 'symbol_cols_min' , 'symbol_rows' , 'symbol_rows_max' , 'symbol_rows_min' , 'symbol_shape' , 'symbol_size' , 'symbol_size_max' , 'symbol_size_min' , 'timeout' , 'version' , 'version_max' , 'version_min'
GenParamValue
(input_control) attribute.value(-array) →
(string / integer / real)
Werte der generischen Parameter, die für das 2D-Datacode-Modell eingestellt werden sollen.
Defaultwert: []
Wertevorschläge: 'standard_recognition' , 'enhanced_recognition' , 'maximum_recognition' , 'yes' , 'no' , 'any' , 'dark_on_light' , 'light_on_dark' , 'square' , 'rectangle' , 'small' , 'big' , 'fixed' , 'variable' , 'low' , 'high' , 'default' , 'extensive' , 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 30, 50, 70, 90, 12, 14, 16, 18, 20, 22, 24, 26, 32, 36, 40, 44, 48, 52, 64, 72, 80, 88, 96, 104, 120, 132, 144
DataCodeHandle
(output_control) datacode_2d →
(handle)
Handle für den Zugriff auf das 2D-Datacode-Modell
* Two simple examples that show the use of create_data_code_2d_model * to detect a Data matrix ECC 200 code and a QR Code. * (1) Create a model for reading simple QR Codes * (only dark symbols on a light background will be read) create_data_code_2d_model ('QR Code', [], [], DataCodeHandle) * Read an image read_image (Image, 'datacode/qrcode/qr_workpiece_01') * Read the symbol in the image find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], \ ResultHandles, DecodedDataStrings) * Clear the model clear_data_code_2d_model (DataCodeHandle) * (2) Create a model for reading a wide range of Data matrix ECC 200 codes * (this model will also read light symbols on dark background) create_data_code_2d_model ('Data Matrix ECC 200', 'default_parameters', \ 'enhanced_recognition', DataCodeHandle) * Read an image read_image (Image, 'datacode/ecc200/ecc200_cpu_010') * Read the symbol in the image find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], \ ResultHandles, DecodedDataStrings) * Clear the model clear_data_code_2d_model (DataCodeHandle)
create_data_code_2d_model
liefert den Wert 2 (H_MSG_TRUE), falls die
übergebenen Parameter korrekt sind und das Modell erzeugt werden
kann.
Ansonsten wird eine Fehlerbehandlung durchgeführt.
set_data_code_2d_param
,
find_data_code_2d
International Standard ISO/IEC 16022: „Information technology -
Automatic identification and data capture techniques -
Data Matrix bar code symbology specification“;
Reference number ISO/IEC 16022:2006 (E);
ISO/IEC 2006.
International Standard ISO/IEC 15438: „Information technology -
Automatic identification and data capture techniques -
PDF417 bar code symbology specification“;
Reference number ISO/IEC 15438:2006 (E);
ISO/IEC 2006.
International Standard ISO/IEC 18004: „Information technology -
Automatic identification and data capture techniques -
QR Code 2005 bar code symbology specification“;
Reference number ISO/IEC 18004:2006 (E);
ISO/IEC 2006.
International Standard ISO/IEC 24778: „Information technology -
Automatic identification and data capture techniques -
Aztec Code bar code symbology specification“;
Reference number ISO/IEC 24778:2008 (E);
ISO/IEC 2008.
GS1 General Specifications; Version 12; Issue 1, Jan-2012; GS1.
Data Code