find_data_code_2d
— Suchen und Lesen von 2D-Datacode-Symbolen im Eingabebild sowie
Training des 2D-Datacode-Modells.
find_data_code_2d(Image : SymbolXLDs : DataCodeHandle, GenParamName, GenParamValue : ResultHandles, DecodedDataStrings)
Der Operator find_data_code_2d
sucht im Eingabebild
(Image
) nach 2D-Datacode-Symbolen und liest den darin
kodierten String aus.
Dafür muss zuvor mit Hilfe von create_data_code_2d_model
oder read_data_code_2d_model
ein Modell für eine Klasse von
2D-Datacodes erstellt und der dabei erzeugte Handle in
DataCodeHandle
an find_data_code_2d
übergeben
werden.
Um in einem Bild gezielt nach mehr als einem Symbol zu suchen, kann
in dem generischen Parameter GenParamName
=
'stop_after_result_num' die Anzahl der gesuchten Datacodes
übergeben werden (GenParamValue
).
Als Ergebnis liefert der Operator für jedes erfolgreich detektierte
Symbol eine XLD-Kontur mit dem umschließenden Viereck
(SymbolXLDs
), einen Kandidaten-Handle, der auf eine
Ergebnisstruktur verweist, in der zusätzliche Informationen über
das Symbol und den Such- und Leseprozess abgespeichert wurden
(ResultHandles
), sowie den String, der in dem
Datacode-Symbol kodiert ist (DecodedDataStrings
).
Ist der String länger als 1024 Zeichen, wird er auf 1020 Zeichen
gefolgt von '...' gekürzt.
Der Zugriff auf den kompletten String kann in diesem Fall nur mit
Hilfe des ResultHandles
und dem Operator
get_data_code_2d_results
mit dem Parameter
'decoded_data' erfolgen, wobei die einzelnen Zeichen des
Strings in einem Tupel zurückgegeben werden.
Das Konzept des 2D-Datacode-Lesers ist bei der Einleitung zu Kapitel Identifizierung / Datacode beschrieben.
Die Symbolstruktur von GS1 DataMatrix, GS1 QR Code und GS1 Aztec Code
ist identisch der Struktur von Data Matrix ECC 200, QR Code, bzw. Aztec Code.
Deswegen gelten alle typspezifischen Parameter, Einstellungen und Regel,
die Data Matrix ECC 200, QR Code oder Aztec betreffen, auch für ihre
entsprechende GS1-Variante. Die GS1 Symbologien haben lediglich zusätzliche
Vorgaben 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. Wenn
zum Beispiel DataCodeHandle
als GS1 DataMatrix erstellt wurde, dann
liest find_data_code_2d
ein Symbol nur wenn das Symbol ein gültiges
Data Matrix ECC 200 Symbol ist und nur wenn seine Daten nach den GS1 Regeln
formatiert sind. Von den "GS1 Application Element Strings" wird nur
überprüft, ob die gelesenen Application Identifier im Standard "GS1 General
Specifications" existieren.
Wenn stattdessen ein Data Matrix ECC 200 Symbol nur allgemeine Daten enthält,
wird er vom Operator find_data_code_2d
nicht gelesen. Dasselbe
stimmt auch für GS1 QR Code und GS1 Aztec Code.
Anpassen des Modells
Sollte ein im Bild sichtbarer 2D-Datacode nicht erkannt werden, ist zu überprüfen, ob das Symbol die im Modell beschriebenen Eigenschaften besitzt. Dabei ist insbesondere auf
die richtige Polarität ('polarity' , hell auf dunkel oder dunkel auf hell),
die Symbolgröße ('symbol_size' beim Data Matrix ECC 200 und beim Aztec Code),
'version' beim QR-Code,
'format' beim Aztec Code,
die Modulgröße ('module_size' beim Data Matrix ECC 200, QR Code und Aztec Code, 'module_width' und 'module_aspect' beim PDF417),
eine mögliche Spiegelung des Symbols ('mirrored' ),
sowie den eingestellten Mindestkontrast ('contrast_min' beim Aztec Code, QR Code und PDF417)
zu achten.
Weitere relevante Größen sind beim Data Matrix ECC 200, beim QR Code und beim
Aztec Code der Zwischenraum zwischen
benachbarten Vordergrundmodulen ('module_gap' ) und beim Data Matrix
ECC 200 der maximal erlaubte Winkel des Finder-Patterns
('slant_max' ).
Die aktuellen Einstellungen für diese Werte lassen sich mit dem
Operator get_data_code_2d_param
abfragen.
Gegebenenfalls können die entsprechenden Parameter mit Hilfe des
Operators set_data_code_2d_param
an das
2D-Datacode-Symbol im Bild angepasst werden.
Eine möglichst genaue Anpassung des Modells an die gesuchte
Datacode-Klasse empfiehlt sich darüber hinaus auch aus
Laufzeitgründen.
Im Allgemeinen gilt, dass die Laufzeit von find_data_code_2d
umso höher ist, je allgemeiner das Modell definiert wurde.
Zu beachten ist dabei, dass sich das ungünstige Laufzeitverhalten
auf Grund eines zu allgemeinen Modells vor allem dann negativ
auswirkt, wenn im Bild kein gültiger 2D-Datacode
gefunden werden kann.
Trainieren des Modells
Neben dem manuellen Setzen der Modellparameter mit dem Operator
set_data_code_2d_param
ist es auch möglich, das Modell mit
Hilfe von find_data_code_2d
anhand eines oder mehrerer
Beispielbilder zu trainieren.
Dazu muss als generischer Parameter GenParamName
'train' übergeben werden.
Der entsprechende Wert bei GenParamValue
bestimmt, welche
Parameter aus dem aktuellen Bild gelernt werden sollen.
Im einzelnen können die folgenden Werte gesetzt werden:
Alle 2D-Datacode-Modelle:
Es werden alle trainierbaren Parameter gelernt.
Größe (und Form) des Datacode-Symbols.
Für Data Matrix ECC 200 und PDF417 werden die Modellparameter
symbol_cols_min
, symbol_cols_max
,
symbol_rows_min
und symbol_rows_max
trainiert.
Zusätzlich dazu wird für Data Matrix ECC 200 der Modellparameter
symbol_shape
, welcher die Form des Symbols
(Rechteck oder Quadrat) angibt, trainiert.
Bei QR-Codes und Micro-QR-Codes kann alternativ als Wert auch
'version' übergeben werden. Dabei werden die
Modellparameter symbol_size_min
,
symbol_size_max
, version_min
und
version_max
trainiert.
Für Aztec Codes werden die Modellparameter
symbol_size_min
und symbol_size_max
trainiert.
Größe der Module.
Die Modellparameter, die hierbei trainiert werden, sind
module_size_min
und module_size_max
.
Bei PDF417-Codes umfasst die Modulgröße die Modulbreite sowie das
Seitenverhältnis der Module. Durch das Training werden dadurch
die Modellparameter module_width_min
,
module_width_max
, module_aspect_min
und
module_aspect_max
beeinflusst.
Robustheit der Dekodierung gegenüber Datacodes mit sehr kleiner
Modulgröße.
Hierbei wird der Modellparameter small_modules_robustness
trainiert.
Polarität der Symbole, d.h. sind die Symbole heller oder dunkler
als der Hintergrund.
Hierbei wird der Modellparameter polarity
trainiert.
Sind die Symbole im Bild gespiegelt oder nicht.
Hierbei wird der Modellparameter mirrored
trainiert.
nur Aztec Code, PDF417 und QR-Code:
Minimaler Kontrast, der eingestellt werden muss, um die
Symbole detektieren zu können.
Hierbei wird der Modellparameter contrast_min
trainiert.
nur Aztec Code, Data Matrix ECC 200 und QR-Code:
Vorhandensein von Lücken zwischen benachbarten Vordergrundmodulen.
Hierbei werden die Modellparameter 'module_gap_min'
und
'module_gap_max'
trainiert.
nur Aztec Code und Data Matrix ECC 200:
Die verwendete Toleranz der Suche gegenüber einem
gestörten oder teilweise fehlenden Finder-Pattern.
Hierbei wird der Modellparameter finder_pattern_tolerance
trainiert.
nur Data Matrix ECC 200:
Auswahl der zu verarbeitenden Kandidatenregionen.
Hierbei wird der Modellparameter candidate_selection
trainiert.
Die verwendete Toleranz bezüglich lokaler Kontrastvariationen.
Hierbei wird der Modellparameter contrast_tolerance
trainiert.
Algorithmus zur Berechnung der Modulpositionen
(festes oder variables Gitter).
Hierbei wird der Modellparameter module_grid
trainiert.
Anpassen verschiedener Bildverarbeitungsparameter. Im
Moment wird hier lediglich der maximale Slant beim
ECC 200 eingestellt, in Zukunft können aber weitere
Parameter folgen.
Hierbei wird der Modellparameter slant_max
trainiert.
nur QR-Code:
Spezifikation des QR-Code-Symbols nach Modelltyp 1 oder 2.
Hierbei wird der Modellparameter model_type
trainiert.
nur Aztec Code:
Die Anzahl zusätzlich zu untersuchender Pyramidenebenen bei
der Suche.
Hierbei wird der Modellparameter additional_levels
trainiert.
Es können mehrere zu trainierende Parameter kombiniert und
gemeinsam übergeben werden, indem 'train' in einem Tupel
mehrfach mit den entsprechenden Werten übergeben wird:
z.B. GenParamName
= ['train','train'] und
GenParamValue
= ['polarity','module_size'] .
Weiterhin können - im Zusammenhang mit 'train' =
'all' einzelne Parameter explizit vom Training
ausgeschlossen werden, indem zusätzlich 'train' mit den
entsprechenden Parametern und einem vorangestellten
'~' gesetzt wird:
z.B. GenParamName
= ['train','train'] und
GenParamValue
=
['all','~contrast'] .
Die folgenden Hinweise sollten im Zusammenhang mit dem Training beachtet werden:
Soll über mehrere Bilder trainiert werden, ist der
Operator find_data_code_2d
mehrfach nacheinander mit dem
gesetzten 'train' -Parameter und den verschiedenen
Trainingsbildern aufzurufen.
Es kann auch über mehrere Symbole in einem Bild trainiert
werden.
Dazu ist in GenParamName
zusätzlich zu
'train' der generische Parameter
'stop_after_result_num' zu übergeben.
In GenParamValue
wird neben den zu trainierenden
Parametern die Anzahl der Symbole, die sich im Bild befinden,
übergeben.
Befinden sich im Trainingsbild mehrere Symbole und
soll aber nur über ein bestimmtes Symbol trainiert werden, ist
der Definitionsbereich des Bildes mit reduce_domain
entsprechend einzuschränken.
Sind in einer Anwendung alle Bilder sehr ähnlich, reicht i.d.R. ein Trainingsbild, wenn die Symbolgröße (in Modulen) bei allen Bildern identisch ist, die Vorder- und Hintergrundmodule gleich groß sind (d.h. auch keine Lücken zwischen benachbarten Vordergrundmodulen auftreten), der Hintergrund weitestgehend untexturiert ist und der Kontrast in allen Bildern etwa gleich groß ist. In allen anderen Fällen sollten mehrere Bilder zum Training herangezogen werden.
Kann die Symbolgröße variieren, sollten nach Möglichkeit im Training auch Bilder mit den kleinsten und den größten vorkommenden Symbolen verwendet werden. Sollte dies nicht sichergestellt werden können, müssen die Grenzen für die Symbolgröße nach dem Training von Hand gesetzt bzw. entsprechend modifiziert werden, oder die Symbolgröße wird vom Training ganz ausgenommen.
Die Modellparameter werden beim ersten Training auf die
Modelleigenschaften des im Bild gefundenen Symbols
eingeschränkt. Bei jedem weiteren Training werden sie, falls
notwendig, so erweitert, dass neben den bisher trainierten
Symbolen auch der neue Datacode vom Modell abgedeckt wird.
Durch ein Zurücksetzen des Modells mit
set_data_code_2d_param
auf eine der Standardeinstellung
('default_parameters' =
'standard_recognition' , 'enhanced_recognition'
oder 'maximum_recognition' ) wird neben den
Modellparametern auch der Trainingsstatus des Modells in den
Grundzustand zurückgesetzt.
Mit set_data_code_2d_param
und 'trained' kann der
Trainingsstatus einzelner Parameter auf trainiert gesetzt werden.
Diese gesetzten Parameter werden beim Training nicht mehr
überschrieben. Falls nötig wird nur der Suchraum durch das Training
erweitert.
Kann das zu trainierende Symbol nicht gelesen
werden, erzeugt dies keine gesonderte Fehlermeldung, sondern es
sind lediglich die Ergebnislisten (SymbolXLDs
,
ResultHandles
, DecodedDataStrings
) leer.
Das Modell wird in diesem Fall nicht modifiziert.
Es ist zu beachten, dass möglicherweise gesetzte Zeitschranken im
Trainingsmodus nicht beachtet werden (siehe 'timeout' in
set_data_code_2d_param
).
Übersicht über die Funktionsweise der Symbolsuche
Alle 2D-Datacode-Modelle:
Abhängig von den Einstellungen im 2D-Datacode-Modell
(vgl. set_data_code_2d_param
) absolviert
find_data_code_2d
intern i.d.R. mehrere Durchläufe bei der
Suche nach 2D-Datacode-Symbolen.
Begonnen wird die Suche auf der höchsten Pyramidenstufe, auf der
die einzelnen Module (entsprechend der vorgegebenen maximalen
Modulgröße) noch zu unterscheiden sein müssten.
Außerdem kann in jeder Pyramidenstufe die Vorverarbeitung
entsprechend der eingestellten Modulform variiert werden.
Erlaubt das Modell sowohl helle Symbole vor dunklem Hintergrund als
auch dunkle Symbole vor hellem Hintergrund ('polarity =
any' ), werden in der jeweiligen Pyramidenstufe zuerst die
Durchläufe zum Finden von dunklen Symbolen abgearbeitet,
danach wird nach hellen Symbolen gesucht.
Ein solcher Durchlauf besteht immer aus zwei Phasen: der Suche, bei
der i.d.R. eine Reihe von Symbolkandidaten anhand des
Finder-Patterns detektiert werden, und
der Auswertephase, in der in einer niedrigeren Pyramidenstufe der
Reihe nach alle neu gefundenen Kandidaten auf ihre Lesbarkeit hin
untersucht werden.
In der Suchphase können in einem entsprechend strukturierten Bild
auch eine Reihe von Kandidaten an Stellen generiert werden, die
keine Symbole enthalten.
Die Bearbeitung dieser Kandidaten wird allerdings in der
anschließenden Auswertephase i.d.R. sehr früh abgebrochen.
Der gesamte Operatoraufruf wird schließlich beendet, wenn entweder
die geforderte Anzahl an 2D-Datacode-Symbolen gefunden wurde, alle
Suchdurchläufe abgearbeitet wurden oder eine Zeitüberschreitung
(siehe set_data_code_2d_param
) eingetreten ist. Die Anzahl
der zu lesenden Symbole, kann mit dem generischen Parameter
GenParamName
= 'stop_after_result_num' gesteuert
werden. Der entsprechende Wert ist in GenParamValue
zu
übergeben. Wird nichts übergeben, wird gestoppt, sobald
ein Symbol erfolgreich dekodiert werden konnte.
Data Matrix ECC 200:
Für einfache Bilder, d.h. Bilder, die:
nur Symbole enthalten, die einen hohen Kontrast und eine großzügige Ruhezone aufweisen und
einen homogenen Hintergrund haben,
kann eine weniger komplexe und (in einfachen Fällen) schnellere
Methode zur Symbolsuche verwendet werden. Hierfür muss der generische
Parameter GenParamName
= 'symbol_search' auf
'rudimental' gesetzt werden. Es ist zu beachten, dass in diesem
Fall folgende Parameter keine Auswirkung mehr haben:
'module_gap_min' , 'module_gap_max' ,
'module_gap' , 'finder_pattern_tolerance' ,
'contrast_tolerance' und 'candidate_selection' .
Außerdem können mit dieser Methode keine Parameter trainiert werden.
Standardmäßig ist 'symbol_search' auf 'default'
gesetzt.
Abfrage von Ergebnissen der Symbolsuche
Die Operatoren get_data_code_2d_results
und
get_data_code_2d_objects
erlauben den
Zugriff auf zahlreiche Informationen zur Symbolsuche
im Allgemeinen wie z.B. die Anzahl der Durchläufe und der
untersuchten Kandidaten, und - zusammen mit den
ResultHandles
- über die Symbolkandidaten im einzelnen,
wie die Symbol- und Modulgröße, den Kontrast oder die im
Symbol kodierten Rohdaten.
Diese Operatoren ermöglichen dabei auch den Zugriff auf all jene
Symbolkandidaten, die zwar untersucht aber letztendlich nicht
gelesen werden konnten.
Insbesondere lässt sich so ermitteln, ob die Vorverarbeitung für
ein abgebildetes aber nicht gelesenes 2D-Datacode-Symbol überhaupt
einen Kandidaten generiert hat und - anhand einer
Statusvariablen - warum dessen Bearbeitung schließlich
abgebrochen wurde.
Nähere Information finden sich bei den Operatoren
get_data_code_2d_results
und
get_data_code_2d_objects
.
Timeout und Abbruch
Der Operator find_data_code_2d
kann sowohl mit einem Timeout
sowie auch manuell abgebrochen werden. Mit dem Operator
set_data_code_2d_param
kann man einen Timeout festlegen. Falls
find_data_code_2d
in einen Timeout läuft, werden alle bis dahin
erkannten Codes zurückgegeben. Zusätzlich gibt es die Möglichkeit
find_data_code_2d
manuell abzubrechen, indem man
set_data_code_2d_param
mit 'abort' von einem anderen Thread
aufruft.
In beiden Fällen, kann mit get_data_code_2d_results
und dem
Parameter 'aborted' abgefragt werden, ob der Operator abgebrochen
wurde.
Spezielle Parallelisierung für Data Matrix ECC 200
Der Operator find_data_code_2d
unterstützt eine spezielle
Parallelisierung für Data Matrix ECC 200. Diese zusätzliche interne
Parallelisierung kann unter gewissen Umständen zu einer signifikant
verkürzten Ausführungszeit führen. Im Allgemeinen sind damit schnellere
Rechenzeiten zu erwarten, wenn bspw. mit set_data_code_2d_param
für
einen oder mehrere der Parameter 'polarity' ,
'contrast_tolerance' und 'finder_pattern_tolerance' der Wert
'any' gesetzt wird, oder sich die gesetzten Werte für
'module_gap_min' und 'module_gap_max' unterscheiden,
somit also eine Reihe von Parameterwerten berücksichtigt werden muss.
Dies gilt insbesondere, wenn 'default_parameters' auf
'enhanced_recognition' oder 'maximum_recognition'
gesetzt worden ist.
Bitte beachten Sie, dass der Speicherverbrauch mit der Anzahl der parallel
laufenden Threads ansteigt. Um den Speicherverbrauch zu reduzieren, kann
mit set_system
entweder die Anzahl der Threads mit dem Parameter
'thread_num' gesetzt werden, oder der Cache für temporären Speicher
mit dem Parameter 'temporary_mem_cache' ausgeschaltet werden.
Die Data Matrix ECC 200 spezifische Parallelisierung kann auch auf
einfache Weise ausgeschaltet werden, indem der generische Parameter
GenParamName
= 'specific_parallelization' auf
'disable' gesetzt wird. Beachten Sie, dass dadurch nur die
zusätzliche interne Parallelisierung für Data Matrix ECC 200 ausgeschaltet
wird. Bestimmte Teilaufgaben können immer noch parallel abgearbeitet werden.
Weitere Informationen zur Deaktivierung der gesamten Parallelisierung finden
Sie in der Operatorreferenz von set_system
mit den Parametern
'thread_num' und 'parallelize_operators' . Generell
sollte es jedoch nicht notwendig sein, die spezifische Parallelisierung
auszuschalten. Standardmäßig ist 'specific_parallelization' auf
'enable' gesetzt.
Chinesische Zeichen
Enthält ein QR Code chinesische Zeichen, die nach dem chinesischen
nationalen Standard GBT 18284-2000 codiert sind, gibt
find_data_code_2d
diese Zeichen UTF-8 codiert in
DecodedDataStrings
zurück, sofern der Systemparameter
'filename_encoding' auf 'utf8' gesetzt ist.
Der Inhalt von 'decoded_data' , welcher mit
get_data_code_2d_results
abgefragt werden kann, wird nicht nach
UTF-8 konvertiert.
Dieser Operator modifiziert den Zustand des folgenden Eingabeparameters:
Während der Ausführung dieses Operators muss der Zugriff auf den Wert dieses Parameters synchronisiert werden, wenn er über mehrere Threads hinweg verwendet wird.
Image
(input_object) singlechannelimage →
object (byte)
Eingabebild. Falls das Bild eine reduzierte Domäne besitzen sollte, so wird der Bereich eingeschränkt in dem nach Datacodes gesucht wird. In der Regel führt dies zu einer Verbesserung der Laufzeit. Allerdings sollte man beachten, dass ein Datacode nicht mehr gefunden werden könnte, wenn er nicht vollständig in der Domäne des Bildes liegt. In seltenen Fällen kann es vorkommen, dass Datacodes außerhalb der Domäne gefunden werden. Sind diese Ergebnisse unerwünscht, müssen sie nachträglich aussortiert werden.
SymbolXLDs
(output_object) xld_cont(-array) →
object
XLD-Konturen, die die erfolgreich dekodierten
Datacode-Symbole umschließen. Die Konturen beginnen in
der linken oberen Ecke und folgt im Uhrzeigersinn der
Standardausrichtung (siehe 'orientation' bei
get_data_code_2d_results
)
DataCodeHandle
(input_control, Zustand wird modifiziert) datacode_2d →
(handle)
Handle des zu verwendenden 2D-Datacode-Modells.
GenParamName
(input_control) attribute.name(-array) →
(string)
Namen von (optionalen) Parametern für die Steuerung des Verhaltens des Operators.
Defaultwert: []
Werteliste: 'specific_parallelization' , 'stop_after_result_num' , 'symbol_search' , 'train'
GenParamValue
(input_control) attribute.value(-array) →
(integer / real / string)
Die zu den optionalen generischen Parametern gehörenden Werte.
Defaultwert: []
Wertevorschläge: 'all' , 'model_type' , 'symbol_size' , 'version' , 'module_size' , 'small_modules_robustness' , 'module_shape' , 'polarity' , 'mirrored' , 'contrast' , 'candidate_selection' , 'module_grid' , 'finder_pattern_tolerance' , 'contrast_tolerance' , 'additional_levels' , 'image_proc' , 'rudimental' , 'default' , 1, 2, 3, 'enable' , 'disable'
ResultHandles
(output_control) integer(-array) →
(integer)
Handles der erfolgreich dekodierten 2D-Datacode-Symbole.
DecodedDataStrings
(output_control) string(-array) →
(string)
Die dekodierten Datenstrings aller im Bild detektierten 2D-Datacode-Symbole.
* Examples showing the use of find_data_code_2d. * First, the operator is used to train the model, afterwards it is used to * read the symbol in another image. * Create a model for reading Data matrix ECC 200 codes create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle) * Read a training image read_image (Image, 'datacode/ecc200/ecc200_cpu_007') * Train the model with the symbol in the image find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, 'train', 'all', \ ResultHandles, DecodedDataStrings) * * End of training / begin of normal application * * 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) * Display all symbols, the strings encoded in them, and the module size dev_set_color ('green') for i := 0 to |ResultHandles| - 1 by 1 select_obj (SymbolXLDs, SymbolXLD, i+1) dev_display (SymbolXLD) get_contour_xld (SymbolXLD, Row, Col) set_tposition (WindowHandle, max(Row), min(Col)) write_string (WindowHandle, DecodedDataStrings[i]) get_data_code_2d_results (DataCodeHandle, ResultHandles[i], \ ['module_height','module_width'], ModuleSize) new_line (WindowHandle) write_string (WindowHandle, 'module size = ' + ModuleSize[0] + 'x' + \ ModuleSize[1]) endfor * Clear the model clear_data_code_2d_model (DataCodeHandle)
find_data_code_2d
liefert den Wert 2 (H_MSG_TRUE), falls die
übergebenen Parameter korrekt sind.
Ansonsten wird eine Fehlerbehandlung durchgeführt.
create_data_code_2d_model
,
read_data_code_2d_model
,
set_data_code_2d_param
get_data_code_2d_results
,
get_data_code_2d_objects
,
write_data_code_2d_model
create_data_code_2d_model
,
set_data_code_2d_param
,
get_data_code_2d_results
,
get_data_code_2d_objects
GS1 General Specifications; Version 12; Issue 1, Jan-2012; GS1.
Data Code