get_data_code_2d_results
— Abfrage von alphanumerischen Ergebnissen, die bei der Suche nach
2D-Datacode-Symbolen angefallen sind.
get_data_code_2d_results( : : DataCodeHandle, CandidateHandle, ResultNames : ResultValues)
Der Operator get_data_code_2d_results
erlaubt den Zugriff auf
verschiedene alphanumerische Ergebnisse, die während der Suche nach
2D-Datacodes oder beim Lesen der gefundenen Symbole anfallen und so die
Ergebnisobjekte - das sind alle untersuchten Kandidaten, unabhängig
davon, ob sie gelesen werden konnten oder nicht - genauer
beschreiben. Die Ergebnisse beziehen sich dementsprechend meist nicht auf die
höchste Auflösung des Symbols, sondern hängen von der Pyramidenstufe ab, in
der der Leseprozess abgebrochen wird. Für den Zugriff auf die Ergebnisse muss
neben dem Namen des gewünschten Ergebnisses (ResultNames
) auch das
zugrundeliegende 2D-Datacode-Modell (DataCodeHandle
) sowie bei den
Ergebnissen, die sich auf einen konkreten Symbolkandidaten beziehen, ein
entsprechendes Handle (CandidateHandle
) angegeben werden.
Das Konzept des 2D-Datacode-Lesers ist bei der Einleitung zu Kapitel Identifizierung / Datacode beschrieben.
Für den Fall, dass 'discard_undecoded_candidates' in
set_data_code_2d_param
auf 'yes' gesetzt wurde,
können Ergebnisse nur zu erfolgreich dekodierten Kandidaten
abgefragt werden.
Die meisten der Ergebnisse enthalten genau einen Wert.
Diese Ergebnisse können für einen konkreten Kandidaten-Handle in
einem Aufruf gemeinsam abgefragt werden.
Die Werte des Ergebnistupels ResultValues
korrespondieren
in diesem Fall mit den entsprechenden Parametern in der
Eingangsliste ResultNames
.
Alternativ dazu kann, wenn diese Ergebnisse einzeln abgefragt werden
sollen, statt eines konkreten Kandidaten-Handles auch ein String,
der eine Gruppe von Kandidaten beschreibt, angegeben werden, wodurch
der entsprechende Wert für alle Kandidaten dieser Gruppe gemeinsam
zurückgegeben wird.
Des Weiteren gibt es Ergebnisse, die nicht nur einen einzelnen Wert enthalten, sondern ein Wertetupel (z.B. 'bin_module_data' ). Diese Ergebnisse müssen stets exklusiv für genau einen Kandidaten abgefragt werden, und die Anfrage kann auch nicht mit anderen Ergebnissen in einem Aufruf kombiniert werden.
Schließlich stehen noch eine Reihe an Information bereit, die sich nicht auf einen konkreten Kandidaten sondern auf die Suche im Allgemeinen beziehen. Für sie wird statt eines Kandidaten-Handles der String 'general' übergeben.
Es ist zu beachten, dass die Symbolstruktur von GS1 DataMatrix, GS1 QR Code
und GS1 Aztec Code mit der Struktur von ECC 200, QR Code, bzw. Aztec Code
identisch ist. Deswegen können alle Ergebnisse welche typspezifisch für
ECC 200, QR Code oder Aztec sind, auch für ihre entsprechende GS1-Variante
abgefragt werden. Im Folgenden wird das ausführliche Auflisten
typspezifischer Ergebnisse einzelner GS1-Typen ausgelassen, um die
Lesbarkeit der Dokumentation zu erleichtern.
Stattdessen können die relevante Ergebnisnamen eines GS1-Datacodetyps
entweder von den Ergebnisnamen von dessen nicht-GS1-Variante hergeleitet
werden oder explizit durch query_data_code_2d_params
mit dem
Parameter 'get_result_params' abgefragt werden.
Gruppen von Kandidaten
Die folgenden Gruppen von Kandidaten sind vordefiniert und können
anstelle eines einzelnen Handles an CandidateHandle
übergeben
werden:
Dieser CandidateHandle
-Wert wird für Parameter verwendet,
die sich auf keinen konkreten Kandidaten sondern auf den
letzten find_data_code_2d
-Aufruf im Allgemeinen
beziehen.
Alle Ergebniskandidaten (einschließlich der erfolgreich
dekodierten Symbole), die während des letzten Aufrufs von
find_data_code_2d
untersucht wurden.
Alle Symbole, die während des letzten Aufrufs von
find_data_code_2d
erfolgreich dekodiert wurden.
All jene Kandidaten des letzten
find_data_code_2d
-Aufrufs, die als Symbol erkannt
aber nicht dekodiert werden konnten.
Bei diesen Kandidaten hat die Fehlerkorrektur zu viele Fehler
entdeckt.
Oder aber das Symbol enthält inkonsistente Daten, sodass
beim Dekodieren der bereits fehlerkorrigierten Daten ein
Fehler auftrat.
All jene Kandidaten des letzten
find_data_code_2d
-Aufrufs, bei denen die
Identifizierung als gültiges 2D-Datacode-Symbol gescheitert
ist und die Suche vorzeitig abgebrochen wurde.
Unterstützte Ergebnisse
Zur Zeit wird über ResultNames
der Zugriff auf folgende
Ergebnisse unterstützt, die in ResultValues
zurückgeliefert werden:
Allgemeine, kandidatenunabhängige Ergebnisse (Alle 2D-Datacode-Modelle) - 'general' :
Alle 2D-Datacode-Modelle:
Unterste Pyramidenstufe, in der nach Symbolen gesucht wird. Hierbei entspricht das Originalbild der Pyramidenstufe 0.
Oberste Pyramidenstufe, in der nach Symbolen gesucht wird. Hierbei entspricht das Originalbild der Pyramidenstufe 0.
Gesamtzahl der absolvierten Such-Durchläufe, siehe auch
find_data_code_2d
(Übersicht über die Funktionsweise der
Symbolsuche).
Anzahl der erfolgreich dekodierten Symbole insgesamt.
Anzahl der bearbeiteten Kandidaten insgesamt.
Anzahl der Kandidaten, die als Symbol identifiziert, jedoch nicht gelesen werden konnten.
Anzahl der Kandidaten, bei denen die Bearbeitung vorzeitig abgebrochen wurde, da sie nicht als ein gültiger 2D-Datacode identifiziert werden konnten.
Gibt die Namen der Elemente des Qualitätsgradtupels,
das von get_data_code_2d_results
mit Parameter
'quality_isoiec15415' ausgegeben wird, zurück.
Die Namen der Qualitätselemente unterscheiden sich je nach
Datacodemodell.
Gibt zurück, ob find_data_code_2d
im vorangegangenen Durchlauf
vorzeitig abgebrochen wurde. Dies kann durch Setzen eines Timeouts
('timeout' in set_data_code_2d_param
oder durch einen
manuellen Abbruch (siehe 'abort' in
set_data_code_2d_param
) verursacht worden.
Value | Description |
---|---|
0 | find_data_code_2d wurde vollständig abgeschlossen |
1 | find_data_code_2d wurde durch ein Timeout abgebrochen |
2 | find_data_code_2d wurde durch
set_data_code_2d_param mit 'abort' abgebrochen |
Data Matrix ECC 200, Aztec, QR Code und Micro QR Code:
Gibt die Namen der Elemente des Qualitätsgradtupels,
das von get_data_code_2d_results
mit Parameter
'quality_isoiec_tr_29158' oder
'quality_aimdpm_1_2006' ausgegeben wird, zurück.
Datamatrix ECC 200:
Gibt die Namen der Elemente des Qualitätstupels,
das von get_data_code_2d_results
mit Parameter
'quality_semi_t10_values' ausgegeben wird, zurück.
Ergebnisse, die sich auf einen konkreten Kandidaten beziehen - Einzelwert Ergebnisse:
Ergebnisse, die genau einen Wert beinhalten und somit sowohl für einzelne Kandidaten als auch für Gruppen von Kandidaten abgefragt werden können. Bei diesen Ergebnissen ist zu beachten, dass für Kandidaten, deren Bearbeitung vorzeitig abgebrochen wurde (vgl. Bearbeitungsstatus 'status' ), nicht alle Ergebnisse sinnvolle Werte liefern:
Alle 2D-Datacode-Modelle:
Kandidaten-Handle. Dieser Aufruf dient in erster Linie dazu, sich die Handles aller Kandidaten einer der oben beschriebenen Gruppen geben zu lassen.
Nummer des Durchlaufs, in dem der Kandidat gefunden und
bearbeitet wurde, siehe auch find_data_code_2d
(Übersicht über
die Funktionsweise der Symbolsuche).
Der Bearbeitungsstatus zeigt für den Kandidaten an, ob die Dekodierung erfolgreich war oder warum die Bearbeitung abgebrochen wurde.
Pyramidenstufe, in der der Kandidat mit Hilfe des Finder-Patterns gefunden wurde.
Pyramidenstufe, in der die weitere Bearbeitung des Kandidaten erfolgte.
Polarität des Symbols. Das ist die Annahme darüber, ob das Symbol im Bild heller oder dunkler als der Hintergrund erscheint.
Angabe, ob ein erfolgreich dekodiertes Symbol gespiegelt ist oder nicht. Für ECC 200, PDF417, QR und MicroQR Codes wird 'no' oder 'yes' züruckgegeben. Für Aztec Codes wird 'false' oder 'true' züruckgegeben. Bei Kandidaten, die nicht gelesen werden konnten, wird hier die vom Modell vorgegebene Annahme über eine mögliche Spiegelung zurückgegeben.
Drehungwinkel eines erfolgreich dekodierten Symbols. Die Null-Grad-Ausrichtung ist in der Abbildung unten dargestellt. Der Winkel ist positiv bei Drehung nach links und hat die Einheit Grad. Er kann im Wertebereich von [-180.0 .. 180.0] Grad liegen.
(1) | (2) | (3) | (4) |
Bei ECC 200, QR-Code und Aztec Code: Ermittelte Symbolgröße in Modulen: Anzahl der Zeilen bzw. der Spalten einschließlich des Finder-Patterns; Bei PDF417: Ermittelte Anzahl der Zeilen und Datenspalten (je 17 Module) im Symbol. Weder die Start/Stop-Patterns noch die Row-Indicators werden dabei mitgezählt.
Größe der Module in Pixel in Richtung der Symbolzeilen bzw. Symbolspalten.
Robustheit der Dekodierung gegenüber Datacodes mit sehr kleiner Modulgröße. Für 'low' wurde der Datacode mit einem Verfahren dekodiert, das nur eine geringe Robustheit gegenüber sehr kleinen Modulgrößen aufweist. Für 'high' wurde der Datacode mit einem Verfahren dekodiert, das diesbezüglich eine hohe Robustheit aufweist.
Schätzung des Kontrastes innerhalb des Symbols. Dieser Wert basiert auf den Gradienten der Kanten zwischen Finder-Pattern und Hintergrund.
Im Symbol kodierter String - die Abfrage ist nur für
erfolgreich dekodierte Kandidaten sinnvoll und liefert das
gleiche Ergebnis wie find_data_code_2d
.
Dekodierungsfehler - bei erfolgreich dekodierten Symbolen steht hier die Anzahl der von der Fehlerkorrektur gefundenen und korrigierten Fehler, d.h. der Codewörter, bei deren Lesen zunächst Probleme auftraten. Für den PDF417 beinhaltet dieser Wert auch Auslöschungen (Erasures), d.h. Fehler deren Postition bekannt ist. Für Symbole, bei denen die Fehlerkorrektur scheiterte, steht hier ein negativer Fehlercode.
Datamatrix ECC 200, Aztec Code, QR-Code und Micro QR Code:
Die dem Durchlauf, in dem der Kandidat gefunden wurde, zugrundeliegende Annahme über die Größe der Lücke zwischen benachbarten Modulen.
Datamatrix ECC 200, Aztec Code, QR-Code und PDF417:
Der Symbology Identifier wird verwendet um anzuzeigen, dass der Datacode das FNC1- und/oder ECI-Zeichen enthält.
Das Zeichen FNC1 (Function 1 Character) wird verwendet, wenn die Daten in dem Symbol entsprechend spezieller vordefinierter Industrie- oder Anwendungsnormen formatiert sind.
Das ECI-Protokoll (Extended Channel Interpretation) wird im Zusammenhang mit einem 6-stelligen Code verwendet, wenn die nachfolgenden Zeichen entsprechend spezieller Codetabellen, beispielsweise mit einem bestimmten internationalen Zeichensatz, zu interpretieren sind. Im Ausgabestrom werden sie als '\nnnnnn' kodiert. Enthält das Symbol ein oder mehrere ECI-Codes, werden alle Backslashs ('\' , ASCII-Code 92), die im normalen Datenstrom auftreten, verdoppelt
Als Identifier wird hier nur der eigentliche Wert m ( (ECC 200 und QR-Code), (Aztec Code) bzw. (PDF417)) entsprechend der Spezifikationen für Datamatrix-, QR-Codes, Aztec Codes und PDF417 zurückgeliefert. Zu erkennen sind Symbole mit ECI-Codes (und damit verdoppelten Backslashs) an den folgenden Werten: ECC 200: 4, 5 und 6, QR-Code: 2, 4 und 6, Aztec Code: 3, 4, 5, 9, 10 und 11, PDF417: 1. Auf den Identifier-Präfix ']d' für Datamatrix bzw. ']Q' für QR-Code bzw. ']z' für Aztec Code bzw. ']L' für PDF417 wird an dieser Stelle verzichtet. Gegebenenfalls muss der Symbology Identifier bestehend aus dem Präfix und Wert m dem eigentlichen Ausgabedatenstrom in der Anwendung manuell vorangestellt werden.
GS1 Symbologien haben die folgenden Identifier: ']d2' für GS1 DataMatrix, ']Q3' für GS1 QR Code und ']z1' für GS1 Aztec Code. Dementsprechend liefert 'symbology_ident' die Werte 2, 3, bzw. 1 zurück.
Datamatrix ECC 200:
Slant innerhalb des Datamatrix-Symbols im Bogenmaß. Das ist die Differenz zwischen dem Winkel des Finder-Patterns und dem rechten Winkel.
Algorithmus, mit dem das Symbol gefunden wurde. Für 'low' wurde das Symbol mit dem Algorithmus gefunden, der nur eine geringe Toleranz gegenüber einem gestörten oder teilweise fehlenden Finder-Pattern aufweist. Für 'high' wurde das Symbol mit dem Algorithmus gefunden, der diesbezüglich eine hohe Toleranz aufweist. Zu Beachten ist, dass es bei der Verwendung beider Algorithmen vorkommen kann, dass auch Symbole mit ungestörtem Finder-Pattern vom Algorithmus mit hoher Toleranz gefunden werden.
Dieser Parameter gibt Auskunft darüber, welcher Algorithmus zur Korrektur lokaler Kontrastvariationen verwendet wurde. Für 'high' wurde das Symbol mit einem Algorithmus gefunden, der auch starke lokale Kontrastvariationen korrigieren kann. Für 'low' wurde das Symbol mit dem schnelleren Algorithmus gefunden, der allerdings etwas weniger robust im Fall lokaler Kontrastvariationen ist.
Konnte das Symbol gelesen werden, gibt dieser Parameter Auskunft darüber, ob bei der Bestimmung der Modulpositionen ein variables Gitter verwendet wurde ('variable' ) oder nicht ('fixed' ). Anderenfalls wird entweder die beim letzten Dekodierversuch verwendete Methode oder, falls der Kandidat bereits vor dem Dekodieren verworfen wurde, die Vorgabe aus dem Modell zurückgeliefert.
Enthält das Symbol ein Reader Programming Zeichen (welches signalisiert, dass dieses Symbol eine Nachricht enthält um das Lesesystem zu programmieren) gib dieser Parameter 'yes' zurück. Andernfalls gibt dieser Parameter 'no' zurück. Das Reader Programming Zeichen ist nicht Bestandteil der dekodierten Nachricht.
QR-Code:
Die mit der Symbolgröße korrespondierende Versionsnummer (Version 1 = 21 x 21, Version 2 = 25 x 25, ..., Version 40 = 177 x 177).
Ermittelte Symbolgröße in Modulen.
Typ des QR-Code-Modells. Unterstützt werden das ältere QR-Code-Modell 1 und das neue Modell 2.
Für Kandidaten, die als QR-Code identifiziert werden konnten, wird als erstes versucht, die im Symbol kodierten Formatinformationen zu lesen. Diese enthalten unter anderem den Grad der Fehlerkorrektur, der bei der Kodierung verwendet wurde ('error_correction_level' 'L' (Low), 'M' (Medium), 'Q' (Quartile), 'H' (High)]).
Außerdem enthalten die Formatinformationen den Code des Maskierungsmusters, das über die eigentlichen Symboldaten gelegt wurde (0 'mask_pattern_ref' 3).
Micro-QR-Codes:
Die mit der Symbolgröße korrespondierende Versionsnummer (version M1 = 11 x 11, version M2 = 13 x 13, version M3 = 15 x 15, version M4 = 17 x 17 ).
Ermittelte Symbolgröße in Modulen.
Für Kandidaten, die als Micro-QR-Code identifiziert werden konnten, wird als erstes versucht, die im Symbol kodierten Formatinformationen zu lesen. Diese enthalten unter anderem den Grad der Fehlerkorrektur, der bei der Kodierung verwendet wurde ('error_correction_level' ['N' (None), 'L' (Low), 'M' (Medium), 'Q' (Quartile)]).
Außerdem enthalten die Formatinformationen den Code des Maskierungsmusters, das über die eigentlichen Symboldaten gelegt wurde (0 'mask_pattern_ref' 3).
PDF417:
Seitenverhältnis der Module; dies entspricht dem Verhältnis von 'module_height' zu 'module_width' .
Für Kandidaten, die als PDF417 identifiziert werden konnten, wird als erstes versucht, die im Symbol kodierten Formatinformationen in den Row-Indicators zu lesen. Diese enthalten auch den Grad der Fehlerkorrektur, der bei der Kodierung verwendet wurde ('error_correction_level' [0, 8]).
Symbole, die Bestandteil einer Gruppe von zusammengehörigen Symbolen sind, werden als „Macro PDF417“ Symbole bezeichnet. Diese Symbole enthalten neben den herkömmlichen Daten einen Control Block, in dem weitere Informationen gespeichert sind. Für Macro-Symbole liefert 'macro_exist' den Wert 1, für herkömmliche Symbole den Wert 0 zurück.
Liefert den Index des Symbols in der Gruppe. Diese Information ist für Macro-Symbole obligatorisch.
Liefert den Gruppenidentifikator in Form eines Strings. Diese Information ist für Macro-Symbole obligatorisch.
Liefert die Anzahl zusammengehöriger Symbole. Diese Information ist für Macro-Symbole optional.
Liefert den Zeitstempel der Quelldatei als Anzahl der seit 1970:01:01:00:00:00 GMT vergangener Sekunden in Form eines Strings. Diese Information ist für Macro-Symbole optional.
Liefert die CRC-Checksumme für die gesamte Quelldatei unter Verwendung des CCITT-16 Polynoms. Diese Information ist für Macro-Symbole optional.
Liefert 1, falls das Symbol das letzte innerhalb der Gruppe zusammengehöriger Symbole ist, ansonsten 0. Diese Information ist für Macro-Symbole optional.
Ein Tupel mit der gleichen Bewertung der Druckqualität wie 'quality_isoiec15415' . Beim PDF417 werden einzelne Grade nach dem internationalen Standard ISO/IEC 15416:2016 berechnet. Diese werden gemäß dem Standard mit einer Genauigkeit von einer Dezimalstelle zurück gegeben.
Aztec Codes:
Format des dekodierten Symbols: 'compact' , 'full_range' oder 'rune' .
Größe des Symbols in Modulen.
In der Mode Message kodierte Anzahl der Layer.
In der Mode Message kodierte Anzahl Codewörter.
Ergebnisse, die sich auf einen konkreten Kandidaten beziehen - Tupelwert Ergebnisse:
Ergebnisse, die sich aus mehreren Werten zusammensetzen und daher immer nur einzeln und für genau einen Kandidaten abgefragt werden können. Bei diesen Ergebnissen ist zu beachten, dass für Kandidaten, deren Bearbeitung vorzeitig abgebrochen wurde (vgl. Bearbeitungsstatus 'status' ), nicht alle Ergebnisse sinnvolle Werte liefern:
Alle 2D-Datacode-Modelle:
Binäre Symboldaten, die den einzelnen Modulen zeilenweise
entsprechen - ein Wert von 0 bedeutet, dass das
entsprechende Modul als Hintergrund interpretiert wurde, bei
einem Wert von 100 handelt es sich um ein Vordergrundmodul.
Werte zwischen 0 und 100 können sowohl als Vorder- als auch
als Hintergrund interpretiert werden. Die Modellpersistenz muss für
dieses Ergebnis auf den Wert 1 gesetzt sein
(siehe set_data_code_2d_param
).
Unkorrigierte Rohdaten, die über ein 2D-Datacode-Typ spezifisches Mapping aus den binären Moduldaten bestimmt werden. Diese Rohdaten sind möglicherweise noch fehlerbehaftet und enthalten auch die Daten, die für die Fehlerkorrektur verwendet werden.
Nach Anwendung der Fehlerkorrektur enthalten die Daten nur noch die korrigierten Nutzdaten ohne die Fehlerkorrekturwörter. Die Daten sind aber immer noch entsprechend des verwendeten 2D-Datacode-Typs kodiert.
Tupel mit den dekodierten Daten im ASCII-Code (siehe auch Tupel / String-Operationen) oder - beim QR-Code und Micro QR-Code - als JIS8 oder Shift JIS Zeichen oder - beim QR-Code - als GB2312 Zeichen. Diese Daten entsprechen der im Symbol kodierten Zeichenkette.
Tupel mit der Bewertung der Druckqualität gemäß dem internationalen Standard ISO/IEC 15415:2011. Das erste Element des Tupels enthält immer die Gesamtqualität des Symbols; Die Länge des Tupels und die Bedeutung der restlichen Elemente hängen vom speziellen Typ des Datacodes ab. Gemäß dem Standard werden die einzelnen Grade mit einem Wert von 0 bis 4 bewertet, wobei 0 für den niedrigsten und 4 für den höchsten Grad steht. Es ist zu beachten, dass, obwohl sich diese Implementierung streng an den Standard hält, die Bewertung der Grade von der Datacode-Dekodierungsprozedur abhängt. Dadurch können die Bewertungsergebnisse leicht von den Ergebnissen anderer Datacode-Leser (von anderen Anbietern) abweichen.
Zur Verwendung dieser Werte ist ein gutes Verständnis der zugrundeliegenden Algorithmen notwendig. Wir empfehlen daher, zusätzlich zu dieser Dokumentation den Standard ISO/IEC 15415:2011 zu lesen.
Für eine exakte Qualitätsbewertung empfehlen wir Bilder zu verwenden, die frei von Störungen wie Defokussierung, Rauschen, Überbelichtung oder inhomogene Beleuchtung sind. Außerdem ist eine effektive Auflösung von mindestens zehn Pixeln in Höhe und Breite pro Modul empfohlen (siehe ISO/IEC 15415:2011, Kapitel 7.3.3). Die Qualitätswerte werden nur für Symbole berechnet, deren Symbolregion samt Quietzone komplett im Bild liegen, ansonsten wird -1 als Wert für die Qualitätsnoten zurückgegeben.
Für die 2D-Datacodes ECC 200, QR Code, Micro QR Codes und Aztec Code gilt folgende Spezifikation zur Bewertung der Druckqualität, zusammengefasst in einem Tupel mit zwölf Elementen: (overall quality, contrast, modulation, fixed pattern damage, decode, axial nonuniformity, grid nonuniformity, unused error correction, reflectance margin, print growth, contrast uniformity, aperture). Für QR Code und Micro QR Codes wird zusätzlich noch die format information und versions information zurückgegeben.
Die Definitionen einzelner Grade sind wie folgt: Der Grad overall quality ist der Mindestwert aller anderen Grade. Der Grad contrast ist die Differenz zwischen maximalem und minimalem Reflexionswert des Grauwertprofils. Stärkerer Kontrast ergibt einen besseren Grad. Die modulation bewertet die Amplitude zwischen den Datacodemodulen. Höhere Amplituden bedingen, dass dunkle von hellen Modulen zuverlässiger voneinander unterschieden werden können, und dass dieser Grad höher bewertet wird. Es ist noch zu beachten, dass die Bewertung von modulation von der Fehlerkorrekturkapazität (error correction capacity) des Symbols abhängt. Das bedeutet, dass modulation bei Symbolen mit höherer Fehlerkorrekturkapazität langsamer abnimmt. Die contrast uniformity ist der geringste Zahlenwert für die Modulation im gesamten Code. Dieser Wert ist kein Grad, und kann daher reelle Werte annehmen. Er beeinflusst die Berechnung der overall quality nicht. Die reflectance margin bewertet, wie auch die modulation, die Amplitude zwischen den Datacodemodulen. Im Gegensatz zur modulation berücksichtigt die reflectance margin, ob ein Modul richtig klassifiziert werden konnte. Wie die contrast uniformity wird auch die print growth nach ISO/IEC 15415:2011 nicht zu den Graden dazugezählt und geht daher auch nicht in die Berechnung der overall quality ein. Stattdessen wird sie als zusätzliche Information ausgegeben, um einen Aufschluss darüber zu geben, ob die grafischen Strukturen aus denen der 2D-Datacode besteht nicht von ihrer nominellen Größe abweichen. Das bedeutet, dass durch die print growth getestet wird, in welchem Maße die dunklen und hellen Module ihre Modulgrenzen ausfüllen. Die Berechnung der print growth folgt dabei nicht den, im Standard ISO/IEC 15415:2011, spezifizierten Schema, sondern den ISO/IEC Standards des jeweiligen Datacodetyps. Das bedeutet, dass die Berechnung der print growth für Aztec Codes nach den Spezifikationen im ISO/IEC 24778:2008 durchgeführt wird. Für ECC 200 gilt ANSI/AIM International Specification Data Matrix und für QR Codes sowie Micro QR Codes ISO/IEC 18004:2006. Für alle oben beschriebenen 2D-Datacodes wird die print growth in horizontale und vertikale Richtung berechnet. Der ausgegebene Grad entspricht dabei dem kleineren der beiden Grade.
Das Rahmenmuster bei ECC 200, QR Codes und Aztec Codes ist extrem wichtig für das Detektieren eines Symbols. Verschlechterung oder Störung des Rahmenmusters und der benachbarten Ruhezonen wird durch den Grad fixed pattern damage bewertet, welches auf deren Modulationswerten basierend. Der Grad decode besagt, ob der Code dekodiert werden konnte.
Der Wert für decode ist 4, wenn der untersuchte Datacode entsprechend des Referenzdekodieralgorithmus des Standards gelesen werden konnte. Andernfalls ist er 0. Es ist zu beachten, dass HALCONs Dekodieralgorithmus von dem des Referenzdekodieralgorithmus abweicht. So kann es oft sein, dass HALCON ein Symbol lesen kann, obwohl der Wert für Decode entsprechend dem Standard 0 ist.
Normalerweise haben
Datacodesymbole quadratische Module, d.h. Höhe und Breite
eines Moduls sind gleich. Ihr Verhältnis kann durch eine
schräge Kameraansicht oder fehlerhaftes Erzeugen des Symbols
auch ungleich werden. Diese Abweichung wird durch den Grad
axial nonuniformity bewertet. Wenn das Symbol neben
einer affinen auch einer perspektivischer Deformation
unterliegt, wird das entsprechend im Grad grid
nonuniformity bewertet. Da Datacodes über eine gewisse
Redundanz verfügen, können Fehler in Modulen oder Codewörtern
korrigiert werden. Die ungenutzte Fehlerkorrekturkapazität
des untersuchten Symbols wird im Grad unused error
correction berechnet. In gewisser Hinsicht bezeichnet dieser
Grad die Robustheit des Dekodierungsprozesses. Es ist zu
beachten, dass manche Codes mit Grad unused error
correction von 0 trotzdem von find_data_code_2d
dekodiert werden können. Das liegt daran, dass
find_data_code_2d
einen robusteren
Dekodierungsalgorithmus implementiert als den
Referenzdekodierungsalgorithmus, den der Standard vorschlägt.
Für QR Codes und Micro QR Codes werden zusätzlich noch die Module der format information und version information ähnlich wie bei fixed pattern damage bewertet. Falls der Code keine version information enthält, wird 'N/A' zurückgegeben.
Für den 2D-Stapelcode PDF417 gilt folgende Spezifikation zur Bewertung der Druckqualität zusammengefasst in einem Tupel mit acht Elementen: (overall quality, start/stop pattern, codeword yield, unused error correction, modulation, decodability, defects, aperture). Die Definitionen einzelner Grade sind wie folgt: Der Grad overall quality ist der Mindestwert aller anderen Grade. Der PDF417 Datacode ist ein Stapelcode, der von laserbasierten Lesegeräten gelesen werden kann. Dementsprechend basiert das Verfahren für Druckqualitätsbewertung auf dem Verfahren für lineare Barcodes: Eine Reihe von Scanlinien wird über das Symbol gleichmäßig verteilt. Dann wird die Reflektionsqualität einzelner Scanlinien bewertet und zum Schluss in die obigen Grade aufsummiert. Mehr Informationen über die Reflektionsgrade sind im Standard ISO/IEC 15416:2016 zu finden. Der Grad start/stop pattern bezieht sich auf die Start- und Stopmuster; der Grad bewertet ihre Reflektionseigenschaften und ob die Sequenzen von Strichen und Lücken korrekt sind. Der Grad codeword yield berechnet den relativen Anteil der richtig dekodierten Codewörter, die unter den Scans liegen. Die ungenutzte Fehlerkorrekturkapazität des behandelten Symbols wird im Grad unused error correction berechnet. Ähnlich wie bei den Matrixdatacodes bezeichnet der Grad modulation die Amplitude zwischen den Symbolmodulen. Der Grad decodability misst die Abweichung der Modulbreiten von ihren im Symbologiestandard vorgegebenen Werten. Zum Schluss bezeichnet der Grad defects Unregelmäßigkeiten im Scanprofil innerhalb einzelner Symbolmodule, deren Vorhandensein mit niedrigerem Grad berechnet wird.
Die aperture gibt die Größe der synthetischen Apertur relativ zur Modulgröße des Symbols an. Diese Apertur wird verwendet, um das Referenz-Grauwert-Bild für die Qualitätsbewertung zu erzeugen. Sie ist definiert in ISO/IEC 15415:2011, Kapitel 7.3.3.
Für die Berechnung der Qualitätsmerkmale ist Voraussetzung,
dass der Parameter 'persistence'
(siehe set_data_code_2d_param
) auf einen Wert größer
gleich 0 gesetzt ist.
Tupel aus Rohmesswerten für alle Grade, die 'direkt messbar' sind. Das sind jene Grade, deren Definition im Standard ISO/IEC 15415:2011 einer 'direkten Ableitung' der Geometrie- oder Reflektionseigenschaften des abgebildeten Symbols entsprechen, oder Grade, welche das Ergebnis eines 'direkten Zählens' sind.
Die Elemente des Tupels werden in derselben Reihenfolge zurückgegeben wie die Elemente einer entsprechenden 'quality_isoiec15415' -Abfrage. Für alle Grade, welche von dieser Liste ausgeschlossen sind, liefert die 'quality_isoiec15415_values' -Abfrage den Wert 'N/A' zurück. Für die 2D-Datacodes ECC 200, QR Code und Aztec Code sind die Grade overall quality, modulation, fixed pattern damage, decode und reflectance margin ausgeschlossen. Für den 2D-Stapelcode PDF417 sind die Grade overall quality, start/stop pattern, modulation, decodability, defects ausgeschlossen.
Obwohl die Grade modulation (für ECC 200 und QR Code) und modulation, decodability, defects (für PDF417) grundsätzlich die Reflektionseigenschaften des Symbols bewerten, werden sie in den nach dem Standard vorgeschriebenen Berechnungen durch ein komplexes Schema berechnet, welches die Dekodierungsroutine und den Fehlerkorrekturmechanismus der Symbologie einbezieht. Zur Folge haben diese Grade keine direkten darunterliegenden Rohmesswerte, die berichtet werden können.
Alle Werte bis auf die print growth sind zwischen 0.0 und 1.0 normalisiert. Somit entspricht z.B. ein Wert von 0.75 für den Grad contrast einem Grauwert von 191.25 (für BYTE Bilder). Für die print growth können Werte zwischen ca. -0.9 und ca. 0.9 erreicht werden. Ein negativer Wert entspricht dabei einer print shrinkage, während bei positiven Werten eine print growth vorliegt. Der ausgegebene Wert beschreibt den prozentualen Anteil um welchen ein dunkles Module zu wenig (print shrinkage) bzw. zu viel (print growth) von seiner nominellen Modulgröße einnimmt. Ein Wert von -0.50 bedeutet beispielsweise, dass ein dunkles Modul 50% kleiner als die nominelle Modulgröße ist. Falls die print growth nicht berechnet werden konnte, wird der Wert auf 'N/A' gesetzt.
Für die Berechnung der Qualitätsmerkmale ist Voraussetzung,
dass der Parameter 'persistence'
(siehe set_data_code_2d_param
) auf einen Wert größer
gleich 0 gesetzt ist.
Data Matrix ECC 200:
Tupel mit Zwischenergebnissen der Qualitätsbewertung von ECC 200 Codes nach den internationalen Standards ISO/IEC 15415:2011 und ISO/IEC 16022:2006. Zur Verwendung dieser Werte ist ein gutes Verständnis der zugrundeliegenden Algorithmen notwendig. Wir empfehlen daher dringend, zusätzlich zu dieser Dokumentation die Standards ISO/IEC 15415:2011 und ISO/IEC 16022:2006 zu lesen. Die Namen der verfügbaren Zwischenergebnisse können mit 'quality_isoiec15415_intermediate_labels' abgefragt werden.
Die Bedeutung der einzelnen Grade ('quality_isoiec15415_intermediate' ) und Werte ('quality_isoiec15415_intermediate_values' ) werden im folgenden beschrieben. Sie entsprechen jeweils dem minimalen Grad und Wert des inspizierten Codes.
'Rmin' und 'Rmax': Minimum und Maximum der Grauwerte in der Bewertungsregion des Symbols (siehe Kapitel 7.6, ISO/IEC 15415:2011). Zu diesem Wert gibt es keinen entsprechenden Grad.
'L1' und 'L2': Grade der vertikalen und horizontalen Teile des äußeren L des Rahmenmusters (siehe Kapitel M.1.2, ISO/IEC 16022:2006). Die entsprechende Anzahl an fehlerhaften Modulen wird als Wert zurückgegeben.
'QZL1' und 'QZL2': Grade der vertikalen und horizontalen Teile der L1 und L2 benachbarten Ruhezonen (siehe Kapitel M.1.2, ISO/IEC 16022:2006). Die entsprechende Anzahl an fehlerhaften Modulen wird als Wert zurückgegeben.
'Transition Ratio': Grad für den „transition ratio test“ (Übergangsraten-Test) der in Kapitel M.1.3 b), ISO/IEC 16022:2006, beschrieben ist. Die Übergangsrate TR wird als Werte zurückgegeben. Sie gibt das Verhältnis zwischen der Anzahl von Übergängen auf dem „clock track“ (alternierendes Muster) und der Anzahl von Übergängen in der „solid area“ (Ruhezone oder Teil eines L) an.
'Clock track regularity': Grad für die Regelmäßigkeit des alternierenden Musters („clock track regularity test“). Dieser Test ist in Kapitel M.1.3 e), ISO/IEC 16022:2006 beschrieben. Wenn irgendeine Folge von fünf benachbarten Punkten mehr als zwei Modul-Fehler enthält, ist dieser Grad 0, sonst ist er 4. Für diesen Grad gibt es keinen entsprechenden Wert.
'Clock track damage': Grad für die Beschädigung des alternierenden Musters („clock track damage“) (siehe Kapitel M.1.3 f), ISO/IEC 16022:2006). Die entsprechende Anzahl an fehlerhaften Modulen wird als Wert zurückgegeben.
'Solid fix pattern': Grad für die Beschädigung des zum alternierenden Muster gehörenden Teil der Ruhezone oder eines L („solid fixed pattern“) (siehe Kapitel M.1.3 f), ISO/IEC 16022:2006). Die entsprechende Anzahl an fehlerhaften Modulen wird als Wert zurückgegeben.
'Clock track and adjacent solid pattern': Grad für das gesamte alternierende Muster inklusive der dazugehörenden Ruhezonen, sowie der inneren L Muster (siehe Kapitel M.1.3 k), ISO/IEC 16022:2006). Für diesen Grad gibt es keinen entsprechenden Wert.
'Average grade': Durchschnittlicher Grad für das gesamte Rahmenmuster. Dieser Grad basiert auf den Ergebnissen der Bewertungen für L1, L2, QZL1, QZL2, und dem Ergebnis für 'Clock track and adjacent solid pattern' (siehe Kapitel M.1.4, ISO/IEC 16022:2006). Für diesen Grad gibt es keinen entsprechenden Wert.
Der Grad für fixed pattern damage für das Symbol ist das Minimum der Grade für 'L1', 'L2', 'QZL1', 'QZL2', 'Clock track and adjacent solid pattern' und 'Average grade'.
Tupel mit der Bewertung der Druckqualität gemäß dem internationalen Standard SEMI T10-0701.
Für eine exakte Qualitätsbewertung empfehlen wir Bilder zu verwenden, die frei von Störungen wie Defokussierung, Rauschen, Überbelichtung oder inhomogene Beleuchtung sind. Außerdem ist eine effektive Auflösung von mindestens zehn Pixeln in Höhe und Breite pro Modul empfohlen. Die Qualitätswerte werden nur für Symbole berechnet, die komplett im Bild liegen, ansonsten wird -1 als Wert für die Qualitätsnoten zurückgegeben.
Das zurückgegebene Wertetupel umfasst die folgenden 21 Werte: [P1 Row, P1 Column, P2 Row, P2 Column, P3 Row, P3 Column, P4 Row, P4 Column, Rows, Columns, Symbol Contrast, Symbol Contrast SNR, Horizontal Mark Growth, Vertical Mark Growth, Data Matrix Cell Width, Data Matrix Cell Height, Horizontal Mark Misplacement, Vertical Mark Misplacement, Cell Defects, Finder Pattern Defects, Unused Error Correction]. Die Unused Error Correction wird für jeden Reed-Solomon Block einzeln zurück gegeben. Die tatsächliche Tupellänge hängt somit von der Anzahl der Reed-Solomon Blöcke ab.
Die Definitionen einzelner Werte sind wie folgt: Die ersten acht Einträge enthalten die Koordinaten der vier Eckpunkte des Codes. Diese sind dem Standard entsprechend gegen den Uhrzeigersinn (bei nicht gespiegeltem Code), beginnend beim vertikalen Finder-Pattern, angeordnet. Rows und Columns geben die Zeilen- und Spaltenanzahl des Codes an.
Der Wert Symbol Contrast gibt den prozentualen Kontrast zwischen den als hell bzw. dunkel klassifizierten Pixeln an. Symbol Contrast SNR ist das entsprechende Signal-Rausch-Verhältnis. Sollte der Signal-Rausch-Verhältnis einen unendlichen Wert haben, wird 'N/A' zurückgegeben.
Die Werte für Horizontal Mark Growth und Vertical Mark Growth stellen die prozentuale Breite bzw. Höhe der markierten Module im Verhältnis zur Summe der Breite bzw. Höhe eines markierten Moduls und eines Zwischenraums dar. Ein Wert von 50% ist optimal. Falls Teile des alternierenden Patterns verdeckt sind, wird 'N/A' zurückgegeben.
Die Werte für Data Matrix Cell Width und Data Matrix Cell Height werden aus den vier Eckpunkten und der Anzahl von Spalten bzw. Zeilen des Codes berechnet und geben die durchschnittlichen Modulebreiten bzw. -höhen an.
Die Werte für Horizontal Mark Misplacement und Vertical Mark Misplacement geben die Abweichungen der Markierungen des alternierenden Patterns von idealen Mittelpunkten in horizontaler und vertikaler Richtung an. Die Werte werden prozentual im Verhältnis zu Data Matrix Cell Width und Data Matrix Cell Height angegeben. Falls Teile des alternierenden Patterns verdeckt sind, wird 'N/A' zurückgegeben.
Der Wert für Cell Defects gibt den Prozentsatz der Modulpixel an, die falsch klassifiziert wurden.
Der Wert für Finder Pattern Defects gibt den Prozentsatz der Findern pattern Pixel an, die nicht als Markierungen klassifiziert werden würden.
Der Wert für Unused Error Correction gibt die ungenutzte Fehlerkorrekturkapazität der einzelnen Reed-Solomon Blöcke an.
Für die Berechnung der Qualitätsmerkmale ist Voraussetzung,
dass der Parameter 'persistence'
(siehe set_data_code_2d_param
) auf einen Wert größer
gleich 0 gesetzt ist.
Gibt die Namen der Elemente des Qualitätstupels,
das von get_data_code_2d_results
mit Parameter
'quality_semi_t10_values' ausgegeben wird, zurück.
Besitzt der ECC 200 Code mehr als ein Reed-Solomon Block, wird
der Namenstupel um diese Werte erweitert.
Tupel mit der Relectance-Margin-Bewertung der einzelnen Module gemäß dem Standard ISO/IEC 15415:2011 Chapter 7.8.4.3. Dies beinhaltet die Module des Finder-Patterns und der 4 zum Symbol anliegenden Ruhezonen (2 horizontal und 2 vertikal).
Ist die Symbolgröße , dann ist die Tupellänge , wegen der 4 Ruhezonen. Das Tupel ist zeilenweise sortiert, wobei die erste Zeile die obere Ruhezone und die letzte die untere Ruhezone ist (oder QZL2 wie in ISO/IEC 16022:2006 Annex M.1.2, Figure M.1 beschrieben).
Die berechneten Modulgrade sind im Intervall von 0 bis 4. Für unbenutzte Daten-Module wird kein Grad berechnet. In diesem Fall ist der entsprenchende Tupelwert -1.
Tupel mit der Zeilenposition der Symbol-Module, für die die Modulgrade mit dem Parameter 'quality_isoiec15415_reflectance_margin_module_grades' berechtet werden.
Das zurückgegebene Tupel hat die gleiche Anzahl und Reihenfolge von Elementen wie das zurückgegebene Tupel für den Parameter 'quality_isoiec15415_reflectance_margin_module_grades' .
Tupel mit der Spaltenposition der Symbol-Module, für die die Modulgrade mit dem Parameter 'quality_isoiec15415_reflectance_margin_module_grades' berechtet werden.
Das zurückgegebene Tupel hat die gleiche Anzahl und Reihenfolge von Elementen wie das zurückgegebene Tupel für den Parameter 'quality_isoiec15415_reflectance_margin_module_grades' .
Ähnlich wie 'quality_isoiec15415_reflectance_margin_module_grades' . Die Werte werden allerdings nach dem Standard ISO/IEC TR 29158 (AIM DPM-1-2006) berechnet.
Siehe den Eintrag zu 'quality_isoiec_tr_29158_reflectance_margin_module_grades' .
Ähnlich wie 'quality_isoiec15415_rows' allerdings bezogen auf 'quality_isoiec_tr_29158_reflectance_margin_module_grades' und 'quality_aimdpm_1_2006_reflectance_margin_module_grades' .
Ähnlich wie 'quality_isoiec15415_cols' allerdings bezogen auf 'quality_isoiec_tr_29158_reflectance_margin_module_grades' und 'quality_aimdpm_1_2006_reflectance_margin_module_grades' .
Data Matrix ECC 200, Aztec, QR Code und Micro QR Code:
Tupel mit der Bewertung der Druckqualität gemäß dem internationalen Standard ISO/IEC TR 29158. Dieser Standard wurde zuvor von Automatic Identification Manufacturers als AIM DPM-1-2006 formuliert. ISO(IEC TR 29158 ist eine Erweiterung des Standards ISO/IEC 15415:2011, indem er bestimmte Vorgaben für die Grauwerteigenschaften des Datacodebildes setzt und dadurch die Vergleichbarkeit der Qualitätsbewertungen unterschiedlicher Datacodeverifikatoren (von unterschiedlichen Anbietern) erhöht.
Zur Verwendung dieser Werte ist ein gutes Verständnis der zugrundeliegenden Algorithmen notwendig. Wir empfehlen daher, zusätzlich zu dieser Dokumentation die Standards ISO/IEC TR 29158 (AIM DPM-1-2006) und ISO/IEC 15415:2011 zu lesen.
Es ist sehr wichtig zu wissen, dass eine ISO/IEC TR 29158 (AIM DPM-1-2006) konforme Druckqualitätsbewertung nur mithilfe eines interaktiven Bildeinzugs durchgeführt wird! Bilder von Datacode Symbolen dürfen nicht berücksichtigt werden, wenn keine Informationen über die Konfiguration der Kamera-Beleuchtung zur Verfügung stehen (siehe den Standard ISO/IEC TR 29158 (AIM DPM-1-2006) für einige vorgeschriebene Kamerabeleuchtungskonfigurationen und allgemeine Konfigurationprinzipien, die für den Standard von Bedeutung sind). Wir weisen darauf hin, dass, obwohl sich diese Implementierung streng an den Standard hält, die Bewertung der Grade von der Datacode Dekodierungsprozedur abhängt. Deswegen ist eine mithilfe dieses Operators erworbene Qualitätsbewertung nur für HALCON's Datacode-Leser maßgeblich.
Beim Ausführen von get_data_code_2d_results
mit Parameter
'quality_isoiec_tr_29158' oder
'quality_aimdpm_1_2006' wird angenommen, dass das
behandelte Bild die beiden unten beschriebenen Kriterien erfüllt.
Die zurückgegebene Druckqualitätsbewertung umfasst die folgenden
13 Grade: [overall quality, cell contrast, cell modulation,
fixed pattern damage, decode, axial nonuniformity, grid
nonuniformity, unused error correction, mean light,
reflectance margin, print growth, contrast uniformity, aperture].
Die ersten acht sowie die letzten vier Grade haben dieselbe
Bedeutung wie im ISO/IEC 15415:2011 Standard.
Es gibt nur zwei Ausnahmen: contrast und
modulation wurden zu cell contrast bzw.
cell modulation umbenannt, um auf die Unterschiede
zwischen den entsprechenden Formeln beider Standards hinzuweisen.
Der Wert mean light ist im ISO/IEC TR 29158 (AIM DPM-1-2006)
nicht als
Grad definiert. Er ist eine Bewertung der Qualität des
behandelten Bildes und wird als Mittelgrauwert der Zentren
der hellen Datacodesymbolmodulen definiert. mean light
kann einen Wert im Bereich 0.0 bis 1.0 haben, was 0% bis bzw.
100% des maximalen Grauwerts (255 bei Byte Bildern) entspricht.
Für QR Code und Micro QR Codes wird zusätzlich noch
die format information und versions information
zurückgegeben.
Der Standard ist im wesentlichen die Definition einer Prozedur für die Einstellung der Kameraparameter (der so genannte camera system response - SR): Belichtungszeit, Gain, und/oder andere Einstellungen, die spezifisch für den Kamerabeleuchtungaufbau des Benutzers sind. Das Ziel ist es, ein Bild des 2D-Datacodesymbols einzuziehen, das optimale Grauwerteigenschaften hat. In Bildverarbeitungskontext, welcher im Mittelpunkt des Standards steht, ist das die Voraussetzung für die erhöhte Vergleichbarkeit der Bewertungsergebnisse unterschiedlicher Verifikatoren. Laut Standard hat ein Bild optimale Grauwerteigenschaften, wenn sein mean light zwischen 70% und 86% liegt (bzw. 0.70 und 0.86). Um diese Bedingung für Bilder eines Datacodesymbols mit niedrigem materiellen Kontrast zu erfüllen, kann es häufig zu sehr hohen SR-Werten führen. Deswegen definiert der Standard eine zusätzliche (Kalibrierungs-)Prozedur, deren Aufgabe es ist, den normalen (so-genannten kalibrierten) system response (SRcal) für Vergleichszwecke zu berechnen. Das wird gemacht, indem die Bilder eines Objektes mit bekannten Reflexionseigenschaften (z.B. NIST traceable calibrated conformance test card) bewertet werden. Letztendlich sind die zwei Bildeinzugskriterien wie folgt formuliert: Zum einen, muss das Bewertungsbild einen mean light Wert im Bereich von 70% bis 86% (0.70 und bzw. 0.86) haben; zum anderen, muss das Bild mit Kameraeinstellungen (SR) eingezogen worden sein, welche die Bedingung SR/SRcal16 erfüllen. Falls kein Bild eines Datacodes, das diese Kriterien erfüllt, eingezogen werden kann, wird der Datacode mit Grad 0 bewertet.
Da weder die Einstellung der Kameraparameter (SR) noch die Überprüfung des SR-Kriteriums innerhalb eines HALCON Operators durchgeführt werden kann, ist eine ISO/IEC TR 29158 (AIM DPM-1-2006) konforme Druckqualitätsbewertung nur in einem geeigneten Programmaufbau möglich. Der Benutzer sei auf zwei mitgelieferte Beispielprogramme verwiesen (calibration_aimdpm_1_2006.hdev und print_quality_aimdpm_1_2006.hdev im Verzeichnis HALCONEXAMPLES/hdevelop/Identification/Data-Code). Dort sind beide Bildeinzugskriterien näher erklärt und demonstriert. Jeder, der den ISO/IEC TR 29158 (AIM DPM-1-2006) Standard für den eigenen Kamerabeleuchtungaufbau anpassen will, kann diese Programme als Startpunkt verwenden.
Die aperture gibt die Größe der synthetischen Apertur relativ zur Modulgröße des Symbols an. Diese Apertur wird verwendet um das Referenz-Grauwert-Bild für die Qualitätsbewertung zu erzeugen. Sie wird nach dem in ISO/IEC TR 29158 (AIM DPM-1-2006), Kapitel 7.3 beschriebenen Verfahren festgelegt.
Für die Berechnung der Qualitätsmerkmale ist Voraussetzung,
dass der Parameter 'persistence'
(siehe set_data_code_2d_param
) auf einen Wert größer
gleich 0 gesetzt ist.
Ähnlich wie 'quality_isoiec15415_values' gibt diese Abfrage einen Tupel aus Rohmesswerten für alle Grade, die 'direkt messbar' sind zurück. Die Werte werden allerdings nach dem Standard ISO/IEC TR 29158 (AIM DPM-1-2006) berechnet. Die Liste der zurückgegebenen sowie der ausgeschlossenen Werte ist dieselbe wie für die 'quality_isoiec15415_values' -Abfrage. Der ISO/IEC TR 29158 (AIM DPM-1-2006)-spezifische Hilfsgrad mean light wird von beiden Abfragen ('quality_isoiec_tr_29158' und 'quality_isoiec_tr_29158_values' sowie 'quality_aimdpm_1_2006' und 'quality_aimdpm_1_2006_values' ) in demselben Format zurückgegeben.
Für die Berechnung der Qualitätsmerkmale ist Voraussetzung,
dass der Parameter 'persistence'
(siehe set_data_code_2d_param
) auf einen Wert größer
gleich 0 gesetzt ist.
Data Matrix ECC 200:
Tupel mit Zwischenergebnissen der Qualitätsbewertung von ECC 200 Codes nach den internationalen Standards ISO/IEC TR 29158 (AIM DPM-1-2006), ISO/IEC 15415:2011 und ISO/IEC 16022:2006. Zur Verwendung dieser Werte ist ein gutes Verständnis der zugrundeliegenden Algorithmen notwendig. Wir empfehlen daher dringend zusätzlich zu dieser Dokumentation die Standards ISO/IEC TR 29158 (AIM DPM-1-2006), ISO/IEC 15415:2011 und ISO/IEC 16022:2006 zu lesen.
Die Bedeutung der einzelnen Grade und Werte werden im folgenden beschrieben. Sie entsprechen jeweils dem minimalen Grad ('quality_isoiec_tr_29158_intermediate' oder 'quality_aimdpm_1_2006_intermediate' ) und Wert ('quality_isoiec_tr_29158_intermediate_values' oder 'quality_aimdpm_1_2006_intermediate_values' ) des inspizierten Codes. Die Namen der verfügbaren Zwischenergebnisse können mit 'quality_isoiec_tr_29158_intermediate_labels' oder 'quality_aimdpm_1_2006_intermediate_labels' abgefragt werden.
'T2': Schwellwert aus dem Histogram der Grauwerte des Referenz-Grauwert-Bildes (siehe Anhang A, ISO/IEC TR 29158 (AIM DPM-1-2006)).
'MD': Der zu T2 gehörende Wert von MeanDark (siehe Anhang A, ISO/IEC TR 29158 (AIM DPM-1-2006)).
'MLtarget': Der zu T2 gehörende Wert von MeanLight (siehe Anhang A, ISO/IEC TR 29158 (AIM DPM-1-2006)).
'L1' und 'L2': Grade der vertikalen und horizontalen Teile des äußeren L des Rahmenmusters (siehe Kapitel M.1.2, ISO/IEC 16022:2006). Die entsprechende Anzahl an fehlerhaften Modulen wird als Wert zurückgegeben.
'QZL1' und 'QZL2': Grade der vertikalen und horizontalen Teile der L1 und L2 benachbarten Ruhezonen (siehe Kapitel M.1.2, ISO/IEC 16022:2006). Die entsprechende Anzahl an fehlerhaften Modulen wird als Wert zurückgegeben.
'Transition Ratio': Grad für den „transition ratio test“ (Übergangsraten-Test) der in Kapitel M.1.3 b), ISO/IEC 16022:2006, beschrieben ist. Die Übergangsrate TR wird als Werte zurückgegeben. Sie gibt das Verhältnis zwischen der Anzahl von Übergängen auf dem „clock track“ (alternierendes Muster) und der Anzahl von Übergängen in der „solid area“ (Ruhezone oder Teil eines L) an.
'Clock track regularity': Grad für die Regelmäßigkeit des alternierenden Musters („clock track regularity test“). Dieser Test ist in Kapitel M.1.3 e), ISO/IEC 16022:2006 beschrieben. Wenn irgendeine Folge von fünf benachbarten Punkten mehr als zwei Modul-Fehler enthält, ist dieser Grad 0, sonst ist er 4. Für diesen Grad gibt es keinen entsprechenden Wert.
'Clock track damage': Grad für die Beschädigung des alternierenden Musters („clock track damage“) (siehe Kapitel M.1.3 f), ISO/IEC 16022:2006). Die entsprechende Anzahl an fehlerhaften Modulen wird als Wert zurückgegeben.
'Solid fix pattern': Grad für die Beschädigung des zum alternierenden Muster gehörenden Teil der Ruhezone oder eines L („solid fixed pattern“) (siehe Kapitel M.1.3 f), ISO/IEC 16022:2006). Die entsprechende Anzahl an fehlerhaften Modulen wird als Wert zurückgegeben.
'Clock track and adjacent solid pattern': Grad für das gesamte alternierende Muster inklusive der dazugehörenden Ruhezonen, sowie der inneren L Muster (siehe Kapitel M.1.3 k), ISO/IEC 16022:2006). Für diesen Grad gibt es keinen entsprechenden Wert.
'Average grade': Durchschnittlicher Grad für das gesamte Rahmenmuster. Dieser Grad basiert auf den Ergebnissen der Bewertungen für L1, L2, QZL1, QZL2, und dem Ergebnis für 'Clock track and adjacent solid pattern' (siehe Kapitel M.1.4, ISO/IEC 16022:2006). Für diesen Grad gibt es keinen entsprechenden Wert.
'Distributed damage grade': Durchschnittlicher Grad für das gesamte Rahmenmuster. Dieser Grad basiert auf den Ergebnissen der Bewertungen für L1, L2, QZL1, QZL2, und dem Ergebnis für 'Clock track and adjacent solid pattern' (siehe Kapitel M.1.4, ISO/IEC 16022:2006, sowie Kapitel 9.4, ISO/IEC TR 29158 (AIM DPM-1-2006)). Für diesen Grad gibt es keinen entsprechenden Wert.
Der Grad für fixed pattern damage für das Symbol ist das Minimum der Grade für 'L1', 'L2', 'QZL1', 'QZL2', 'Clock track and adjacent solid pattern' und 'Distributed damage grade'.
Data Matrix ECC 200, QR Code und Aztec Code:
Ist das Symbol Bestandteil einer Gruppe von zusammengehörigen Symbolen („Structured Append“), enthält das Ergebnistupel (1.) den Index des Symbols in der Gruppe, (2.) die Anzahl zusammengehöriger Symbole sowie (3.) eine Zahl als Gruppenidentifikator. Für Aztec Codes wird der Gruppenidentifikator als String zurückgegeben. Ist das Symbol kein Bestandteil einer Gruppe von zusammengehörigen Symbolen („Structured Append“) wird für Aztec Codes ein leeres Tupel zurückgegeben.
Statusinformation
Anhand der Statusinformation, die für jeden Kandidaten abgefragt werden kann, lässt sich leicht nachvollziehen, an welcher Stelle ein Kandidat verworfen wurde. Die folgende Übersicht enthält die wichtigsten Statusmeldungen in der Reihenfolge, in der sie bei der Bearbeitung auftreten können:
Datamatrix ECC 200:
Symbol ist zu nahe am Bildrand. Damit das Symbol gelesen werden kann, muss es vollständig im Bild liegen.
Es ist nicht möglich, die genaue Position des Finder-Patterns in der Verarbeitungsebene zu bestimmen, da kein signifikanter Hell-Dunkel-Übergang gefunden werden kann.
Für eine der beiden Seiten des Finder-Patterns kann dessen Breite nicht ermittelt werden, da keine signifikanten Hell-Dunkel-Übergänge gefunden werden können.
Die für die beiden Seiten des Finder-Patterns ermittelten Breiten unterscheiden sich zu sehr.
Bei der Symbolsuche wurden (in einer Richtung) zwar die beiden gegenüberliegenden Seiten des Symbols gefunden, es kann aber nicht bestimmt werden, welches die alternierende Seite des Finder-Patterns ist.
Bei der Symbolsuche wurde (in einer Richtung) nur die durchgehende Seite des Finder-Patterns gefunden. Bei der weiteren Verarbeitung war es jedoch nicht möglich, die gegenüberliegende (alternierende) Seite zu finden.
Die aus den beiden alternierenden Seiten bestimmte Anzahl von Symbolzeilen und -spalten ergibt keinen gültigen ECC 200-Code.
Die ermittelte Symbolgröße ist zwar gültig, liegt jedoch nicht in dem vom Modell vorgegebene Bereich.
Anhand der Symbolgröße wurde ein rechteckiger ECC 200-Code ermittelt. Auf Grund der im Modell angegebenen Restriktion hinsichtlich der Spiegelung des Symbols sind jedoch Zeilen und Spalten vertauscht, so dass das Symbol keinen gültigen ECC 200-Code enthält. Bei quadratischen Symbolen kann dieser Test natürlich nicht erfolgen, so dass sich hier eine falsche Angabe zur Spiegelung erst beim Lesen auswirkt und i.d.R. zum folgenden Fehler führt:
Die Fehlerkorrektur scheitert an zu vielen falsch interpretierten Modulen. Das deutet i.d.R. auf eine zu schlechte Bild- und/oder Druckqualität hin, kann aber auch an einer falschen Vorgabe hinsichtlich der Spiegelung des Symbols liegen.
Diese Fehlermeldung zeigt an, dass die kodierten Daten eine Nachricht zum Programmieren der Leseeinheit enthalten. Dies wird nicht unterstützt.
Die im Symbol kodierten Daten können nicht dekodiert werden, da sie nicht konsistent sind.
Die Daten im Symbol entsprechen nicht den allgemeinen GS1 Spezifikationen. Diese Fehlermeldung wird zurückgegeben, wenn versucht wird, ein gültiges Nicht-GS1-Symbol mit einem als GS1-Datacode erstellten Modell zu lesen.
Die Ruhezone dieses Kandidaten fehlt oder weist starke Defekte auf.
Der Kandidat konnte dekodiert werden, aber wurde als möglicher Falschpositiv verworfen, da das Finder-Pattern und die Ruhezone nicht gefunden wurden. Diese zusätzliche Überprüfung wird für Symbole der Größe 10x10, 12x12 und 8x18 durchgeführt, da diese Codes über wenig Fehlerkorrektur verfügen und Falschpositive häufig in anderen Bildstrukturen gefunden werden.
Datamatrix ECC 200 (falls eine hohe Finder-Pattern-Toleranz gewählt wurde, können zusätzlich folgende Meldungen auftreten):
Es konnte keine regelmäßige Gitterstruktur innerhalb der Kandidatenregion gefunden werden. Daher wird davon ausgegangen, dass es sich bei dem Kandidaten nicht um ein ECC 200 Symbol handelt.
Der aktuelle Kandidat überlappt mit einem zuvor erfolgreich dekodierten Symbol. Daher wird die Suche nach der Symbolgrenze im Bild abgebrochen.
Es wurde keine konsistente Symbolgrenze innerhalb der vorgegebenen Grenzen gefunden, die zu einem erfolgreich dekodierten Symbol geführt hätte.
Der Kandidat konnte zwar dekodiert werden, da die Symbolgröße allerdings sehr klein und die Anzahl der Dekodierungsfehler relativ hoch war, handelt es sich höchstwahrscheinlich nicht um einen ECC 200. Daher wurde der Kandidat verworfen. Diese Heuristik gilt für Symbole der Größe 10 x 10 mit mindestens 1 Dekodierungsfehler und für Symbole der Größe 12 x 12 oder 8 x 18 mit mindestens 2 Dekodierungsfehlern.
QR-Code:
Symbol ist zu nahe am Bildrand. Damit das Symbol gelesen werden kann, muss es vollständig im Bild liegen.
Es ist nicht möglich, anhand der Position-Detection-Patterns die genaue Position des Finder-Patterns in der Verarbeitungsebene zu bestimmen, da kein signifikanter Hell-Dunkel-Übergang gefunden werden kann.
Es konnte mit Hilfe des Finder-Patterns keine einheitliche Symbolgröße ermittelt werden. Beim Modelltyp 2 führt das nur bei kleinen Symbolen (< Version 7 bzw. 45 x 45 Modulen) zu einem Fehler, da bei größeren Symbolen die Versionsinformation im Symbol kodiert und von dort gelesen wird.
Die anhand des Finder-Patterns ermittelte Größe ist zu klein bzw. (nur Modelltyp 1) zu groß.
Beim Versuch, ein Modell-2-Symbol zu lesen, wurde mit Hilfe der Finder-Patterns ermittelt, dass die Symbolversion mindestens 7 ist ( 45 x 45 Module). Es ist jedoch nicht möglich, die Versionsdaten aus den entsprechenden Feldern im Symbol zu dekodieren.
Die ermittelte Symbolgröße ist zwar gültig, liegt jedoch nicht in dem vom Modell vorgegebenen Bereich.
Die im Symbol kodierten Formatinformationen (Maskierungsmuster und Grad der Fehlerkorrektur) konnten nicht gelesen werden.
Die Fehlerkorrektur scheitert an zu vielen falsch interpretierten Modulen. Das deutet i.d.R. auf eine zu schlechte Bild- und/oder Druckqualität hin, kann aber auch an einer falschen Vorgabe hinsichtlich der Spiegelung des Symbols liegen.
Die im Symbol kodierten Daten können nicht dekodiert werden, da sie nicht konsistent sind.
Die Daten im Symbol entsprechen nicht den allgemeinen GS1 Spezifikationen. Diese Fehlermeldung wird zurückgegeben, wenn versucht wird, ein gültiges Nicht-GS1-Symbol mit einem als GS1-Datacode erstellten Modell zu lesen.
Aztec Code:
Symbol ist zu nahe am Bildrand oder teilweise außerhalb des Bildes.
Die Mode Message dieses Kandidaten konnte nicht dekodiert werden, da die Fehlerkorrektur an zu vielen falsch interpretierten Modulen gescheitert ist.
Die Expansion des Kandidaten ist fehlgeschlagen. Die Ursache sind meist zu starke perspektivische Verzeichnungen.
Die ermittelte Symbolgröße ist zwar gültig, liegt jedoch
nicht in dem vom Modell vorgegebenen Bereich. Das Modell muss
angepasst werden (set_data_code_2d_param
), damit dieser
Kandidat auch dekodiert werden kann.
Dieser Kandidat ist gültig, erfüllt aber nicht die im Modell
bezüglich Spiegelung ('format' ) vorgegebenen Einschränkungen.
Das Modell muss angepasst werden (set_data_code_2d_param
),
damit dieser Kandidat auch dekodiert werden kann.
Dieser Kandidat ist gültig, erfüllt aber nicht die im Modell
bezüglich des Formats ('mirrored' ) vorgegebenen
Einschränkungen. Das Modell muss angepasst werden
(set_data_code_2d_param
), damit dieser Kandidat auch dekodiert
werden kann.
Die Fehlerkorrektur scheitert an zu vielen falsch interpretierten Modulen. Das deutet i.d.R. auf eine zu schlechte Bild- und/oder Druckqualität hin, kann aber auch an einer falschen Vorgabe hinsichtlich der Spiegelung des Symbols liegen.
Die Daten im Symbol entsprechen nicht den allgemeinen GS1 Spezifikationen. Diese Fehlermeldung wird zurückgegeben, wenn versucht wird, ein gültiges Nicht-GS1-Symbol mit einem als GS1-Datacode erstellten Modell zu lesen.
PDF417:
Symbol ist zu nahe am Bildrand. Damit das Symbol gelesen werden kann, muss es vollständig im Bild liegen.
Die ermittelte Symbolgröße ist zwar gültig, liegt jedoch nicht in dem vom Modell vorgegebene Bereich.
Die Fehlerkorrektur scheitert an zu vielen falsch interpretierten Modulen. Das deutet i.d.R. auf eine zu schlechte Bild- und/oder Druckqualität hin, kann aber auch an einer falschen Vorgabe hinsichtlich der Spiegelung des Symbols liegen.
Diese Fehlermeldung zeigt an, dass die kodierten Daten eine Nachricht zum Programmieren der Leseeinheit enthalten. Dies wird nicht unterstützt.
Die im Symbol kodierten Daten können nicht dekodiert werden, da sie nicht konsistent sind.
Bei der Bearbeitung eines Kandidaten kann es vorkommen, dass mehrere
Versuche unternommen werden, um ein Symbol zu lesen, wobei intern
über die verschiedenen Annahmen, die das Modell zulässt, iteriert
wird.
Dabei bestimmt i.d.R. der letzte Versuch den Abbruchstatus.
Erlaubt ein QR-Code-Modell beispielsweise sowohl Modelltyp 1 als
auch Typ 2, wird zuerst versucht, das Symbol als Modell 2 zu
interpretieren.
Scheitert dies, wird von einem Modell-1-Symbol ausgegangen.
Ist auch dieser Versuch nicht erfolgreich, enthält die
Statusvariable den Fehlercode, mit dem die Interpretation als
Modell-1-Symbol abgebrochen wurde.
Um den ersten Fehlercode zu erhalten, muss vor dem Aufruf von
find_data_code_2d
das Modell entsprechend eingeschränkt
werden.
DataCodeHandle
(input_control) datacode_2d →
(handle)
Handle des zu verwendenden 2D-Datacode-Modells.
CandidateHandle
(input_control) integer →
(string / integer)
Handle des 2D-Datacode-Kandidaten. Entweder ein Integer
(üblicherweise das ResultHandle von
find_data_code_2d
) oder ein String,
der eine Gruppe von Kandidaten beschreibt.
Defaultwert: 'all_candidates'
Wertevorschläge: 0, 1, 2, 'general' , 'all_candidates' , 'all_results' , 'all_undecoded' , 'all_aborted'
ResultNames
(input_control) attribute.name(-array) →
(string)
Namen der Ergebnisse, die für einen oder eine Gruppe von 2D-Datacode-Kandidaten abgefragt werden sollen.
Defaultwert: 'status'
Werteliste: 'aborted' , 'aborted_num' , 'bin_module_data' , 'candidate_num' , 'codeword_num' , 'contrast' , 'contrast_tolerance' , 'corr_coded_data' , 'decoded_data' , 'decoded_string' , 'decoding_error' , 'error_correction_level' , 'finder_pattern_tolerance' , 'format' , 'handle' , 'layer_num' , 'macro_checksum' , 'macro_exist' , 'macro_file_id' , 'macro_last_symbol' , 'macro_segment_count' , 'macro_segment_index' , 'macro_time_stamp' , 'mask_pattern_ref' , 'max_search_level' , 'min_search_level' , 'mirrored' , 'model_type' , 'module_aspect' , 'module_gap' , 'module_grid' , 'module_height' , 'module_width' , 'orientation' , 'pass' , 'pass_num' , 'polarity' , 'process_level' , 'quality_aimdpm_1_2006' , 'quality_aimdpm_1_2006_cols' , 'quality_aimdpm_1_2006_intermediate' , 'quality_aimdpm_1_2006_intermediate_labels' , 'quality_aimdpm_1_2006_intermediate_values' , 'quality_aimdpm_1_2006_labels' , 'quality_aimdpm_1_2006_reflectance_margin_module_grades' , 'quality_aimdpm_1_2006_rows' , 'quality_aimdpm_1_2006_values' , 'quality_isoiec15415' , 'quality_isoiec15415_cols' , 'quality_isoiec15415_float_grades' , 'quality_isoiec15415_intermediate' , 'quality_isoiec15415_intermediate_labels' , 'quality_isoiec15415_intermediate_values' , 'quality_isoiec15415_labels' , 'quality_isoiec15415_reflectance_margin_module_grades' , 'quality_isoiec15415_rows' , 'quality_isoiec15415_values' , 'quality_isoiec_tr_29158' , 'quality_isoiec_tr_29158_cols' , 'quality_isoiec_tr_29158_intermediate' , 'quality_isoiec_tr_29158_intermediate_labels' , 'quality_isoiec_tr_29158_intermediate_values' , 'quality_isoiec_tr_29158_labels' , 'quality_isoiec_tr_29158_reflectance_margin_module_grades' , 'quality_isoiec_tr_29158_rows' , 'quality_isoiec_tr_29158_values' , 'quality_semi_t10_labels' , 'quality_semi_t10_values' , 'raw_coded_data' , 'reader_programming' , 'result_num' , 'search_level' , 'slant' , 'small_modules_robustness' , 'status' , 'structured_append' , 'symbol_cols' , 'symbol_rows' , 'symbol_size' , 'symbology_ident' , 'undecoded_num' , 'version'
ResultValues
(output_control) attribute.value(-array) →
(string / integer / real)
Liste mit den Ergebnissen.
* Example demonstrating how to access the results of the data code search. * Create a model for reading Data matrix ECC 200 codes create_data_code_2d_model ('Data Matrix ECC 200', [], [], 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) * Get the number of passes get_data_code_2d_results (DataCodeHandle, 'general', 'pass_num', Passes) * Get a tuple with the status of all candidates get_data_code_2d_results (DataCodeHandle, 'all_candidates', 'status', \ AllStatus) * Get the handles of all candidates that were detected as a symbol but * could not be read get_data_code_2d_results (DataCodeHandle, 'all_undecoded', 'handle', \ HandlesUndecoded) * For every undecoded symbol, get the contour, the symbol size, and * the binary module data dev_set_color ('red') for i := 0 to |HandlesUndecoded| - 1 by 1 * Get the contour of the symbol get_data_code_2d_objects (SymbolXLD, DataCodeHandle, \ HandlesUndecoded[i], 'candidate_xld') * Get the symbol size get_data_code_2d_results (DataCodeHandle, HandlesUndecoded[i], \ ['symbol_rows','symbol_cols'], SymbolSize) * Get the binary module data (has to be queried exclusively) get_data_code_2d_results (DataCodeHandle, HandlesUndecoded[i], \ 'bin_module_data', BinModuleData) * Stop for inspecting the data stop () endfor * Clear the model clear_data_code_2d_model (DataCodeHandle)
get_data_code_2d_results
liefert den Wert 2 (H_MSG_TRUE), falls die
übergebenen Parameter korrekt und die angeforderten Ergebnisse für
die letzte Symbolsuche verfügbar sind.
Ansonsten wird eine Fehlerbehandlung durchgeführt.
find_data_code_2d
,
query_data_code_2d_params
query_data_code_2d_params
,
get_data_code_2d_objects
,
get_data_code_2d_param
,
set_data_code_2d_param
AIM Global Document: AIM DPM-1-2006: „Direct Part Mark (DPM) Quality Guideline“;
Document Type: AIM Bar Code Guideline;
Document Version: 1.0, 2006-12-12.
International Standard ISO/IEC 15415: „Information technology -
Automatic identification and data capture techniques -
Bar code symbol print quality test specification - Two-dimensional symbols“;
Reference number ISO/IEC 15415:2011 (E);
ISO/IEC 2011.
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.
Technical Report ISO/IEC TR 29158: „Information technology -
Automatic identification and data capture techniques -
Direct Part Mark (DPM) Quality Guideline“;
Reference number ISO/IEC TR 29158:2011 (E);
ISO/IEC 2011.
GS1 General Specifications; Version 12; Issue 1, Jan-2012; GS1.
Data Code