KlassenKlassenKlassenKlassen | | | | Operatoren

find_data_code_2dfind_data_code_2dFindDataCode2dfind_data_code_2dFindDataCode2dFindDataCode2d (Operator)

Name

find_data_code_2dfind_data_code_2dFindDataCode2dfind_data_code_2dFindDataCode2dFindDataCode2d — Suchen und Lesen von 2D-Datacode-Symbolen im Eingabebild sowie Training des 2D-Datacode-Modells.

Signatur

find_data_code_2d(Image : SymbolXLDs : DataCodeHandle, GenParamNames, GenParamValues : ResultHandles, DecodedDataStrings)

Herror find_data_code_2d(const Hobject Image, Hobject* SymbolXLDs, const Hlong DataCodeHandle, const char* GenParamNames, const Hlong GenParamValues, Hlong* ResultHandles, char* DecodedDataStrings)

Herror T_find_data_code_2d(const Hobject Image, Hobject* SymbolXLDs, const Htuple DataCodeHandle, const Htuple GenParamNames, const Htuple GenParamValues, Htuple* ResultHandles, Htuple* DecodedDataStrings)

Herror find_data_code_2d(Hobject Image, Hobject* SymbolXLDs, const HTuple& DataCodeHandle, const HTuple& GenParamNames, const HTuple& GenParamValues, Hlong* ResultHandles, char* DecodedDataStrings)

Herror find_data_code_2d(Hobject Image, Hobject* SymbolXLDs, const HTuple& DataCodeHandle, const HTuple& GenParamNames, const HTuple& GenParamValues, HTuple* ResultHandles, HTuple* DecodedDataStrings)

HXLDContArray HImage::FindDataCode2d(const HDataCode2D& DataCodeHandle, const HTuple& GenParamNames, const HTuple& GenParamValues, HTuple* ResultHandles, HTuple* DecodedDataStrings) const

HXLDContArray HDataCode2D::FindDataCode2d(const HImage& Image, const HTuple& GenParamNames, const HTuple& GenParamValues, HTuple* ResultHandles, HTuple* DecodedDataStrings) const

void FindDataCode2d(const HObject& Image, HObject* SymbolXLDs, const HTuple& DataCodeHandle, const HTuple& GenParamNames, const HTuple& GenParamValues, HTuple* ResultHandles, HTuple* DecodedDataStrings)

HXLDCont HDataCode2D::FindDataCode2d(const HImage& Image, const HTuple& GenParamNames, const HTuple& GenParamValues, HTuple* ResultHandles, HTuple* DecodedDataStrings) const

HXLDCont HDataCode2D::FindDataCode2d(const HImage& Image, const HString& GenParamNames, Hlong GenParamValues, Hlong* ResultHandles, HString* DecodedDataStrings) const

HXLDCont HDataCode2D::FindDataCode2d(const HImage& Image, const char* GenParamNames, Hlong GenParamValues, Hlong* ResultHandles, HString* DecodedDataStrings) const

HXLDCont HImage::FindDataCode2d(const HDataCode2D& DataCodeHandle, const HTuple& GenParamNames, const HTuple& GenParamValues, HTuple* ResultHandles, HTuple* DecodedDataStrings) const

HXLDCont HImage::FindDataCode2d(const HDataCode2D& DataCodeHandle, const HString& GenParamNames, Hlong GenParamValues, Hlong* ResultHandles, HString* DecodedDataStrings) const

HXLDCont HImage::FindDataCode2d(const HDataCode2D& DataCodeHandle, const char* GenParamNames, Hlong GenParamValues, Hlong* ResultHandles, HString* DecodedDataStrings) const

void HOperatorSetX.FindDataCode2d(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*SymbolXLDs, [in] VARIANT DataCodeHandle, [in] VARIANT GenParamNames, [in] VARIANT GenParamValues, [out] VARIANT* ResultHandles, [out] VARIANT* DecodedDataStrings)

IHXLDContX* HDataCode2DX.FindDataCode2d(
[in] IHImageX* Image, [in] VARIANT GenParamNames, [in] VARIANT GenParamValues, [out] VARIANT* ResultHandles, [out] VARIANT* DecodedDataStrings)

IHXLDContX* HImageX.FindDataCode2d(
[in] IHDataCode2DX* DataCodeHandle, [in] VARIANT GenParamNames, [in] VARIANT GenParamValues, [out] VARIANT* ResultHandles, [out] VARIANT* DecodedDataStrings)

static void HOperatorSet.FindDataCode2d(HObject image, out HObject symbolXLDs, HTuple dataCodeHandle, HTuple genParamNames, HTuple genParamValues, out HTuple resultHandles, out HTuple decodedDataStrings)

HXLDCont HDataCode2D.FindDataCode2d(HImage image, HTuple genParamNames, HTuple genParamValues, out HTuple resultHandles, out HTuple decodedDataStrings)

HXLDCont HDataCode2D.FindDataCode2d(HImage image, string genParamNames, int genParamValues, out int resultHandles, out string decodedDataStrings)

HXLDCont HImage.FindDataCode2d(HDataCode2D dataCodeHandle, HTuple genParamNames, HTuple genParamValues, out HTuple resultHandles, out HTuple decodedDataStrings)

HXLDCont HImage.FindDataCode2d(HDataCode2D dataCodeHandle, string genParamNames, int genParamValues, out int resultHandles, out string decodedDataStrings)

Beschreibung

Der Operator find_data_code_2dfind_data_code_2dFindDataCode2dfind_data_code_2dFindDataCode2dFindDataCode2d sucht im Eingabebild (ImageImageImageImageImageimage) nach 2D-Datacode-Symbolen und liest den darin kodierten String aus. Dafür muss zuvor mit Hilfe von create_data_code_2d_modelcreate_data_code_2d_modelCreateDataCode2dModelcreate_data_code_2d_modelCreateDataCode2dModelCreateDataCode2dModel oder read_data_code_2d_modelread_data_code_2d_modelReadDataCode2dModelread_data_code_2d_modelReadDataCode2dModelReadDataCode2dModel ein Modell für eine Klasse von 2D-Datacodes erstellt und der dabei erzeugte Handle in DataCodeHandleDataCodeHandleDataCodeHandleDataCodeHandleDataCodeHandledataCodeHandle an find_data_code_2dfind_data_code_2dFindDataCode2dfind_data_code_2dFindDataCode2dFindDataCode2d übergeben werden. Um in einem Bild gezielt nach mehr als einem Symbol zu suchen, kann in dem generischen Parameter GenParamNamesGenParamNamesGenParamNamesGenParamNamesGenParamNamesgenParamNames = 'stop_after_result_num'"stop_after_result_num""stop_after_result_num""stop_after_result_num""stop_after_result_num""stop_after_result_num" die Anzahl der gesuchten Datacodes übergeben werden (GenParamValuesGenParamValuesGenParamValuesGenParamValuesGenParamValuesgenParamValues).

Als Ergebnis liefert der Operator für jedes erfolgreich detektierte Symbol eine XLD-Kontur mit dem umschließenden Viereck (SymbolXLDsSymbolXLDsSymbolXLDsSymbolXLDsSymbolXLDssymbolXLDs), einen Kandidaten-Handle, der auf eine Ergebnisstruktur verweist, in der zusätzliche Informationen über das Symbol und den Such- und Leseprozess abgespeichert wurden (ResultHandlesResultHandlesResultHandlesResultHandlesResultHandlesresultHandles), sowie den String, der in dem Datacode-Symbol kodiert ist (DecodedDataStringsDecodedDataStringsDecodedDataStringsDecodedDataStringsDecodedDataStringsdecodedDataStrings). 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 ResultHandlesResultHandlesResultHandlesResultHandlesResultHandlesresultHandles und dem Operator get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResults mit dem Parameter 'decoded_data'"decoded_data""decoded_data""decoded_data""decoded_data""decoded_data" erfolgen, wobei die einzelnen Zeichen des Strings in einem Tupel zurückgegeben werden.

Die Symbolstruktur von GS1 DataMatrix, GS1 QR Code und GS1 Aztec Code ist identisch der Struktur von ECC 200, QR Code, bzw. Aztec Code. Deswegen gelten alle typspezifischen Parameter, Einstellungen und Regel, die 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 Specifikationen definiert sind. Wenn zum Beispiel DataCodeHandleDataCodeHandleDataCodeHandleDataCodeHandleDataCodeHandledataCodeHandle als GS1 DataMatrix erstellt wurde, dann liest find_data_code_2dfind_data_code_2dFindDataCode2dfind_data_code_2dFindDataCode2dFindDataCode2d ein Symbol nur wenn das Symbol ein gültiges 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 ECC 200 Symbol nur allgemeine Daten enthält, wird er vom Operator find_data_code_2dfind_data_code_2dFindDataCode2dfind_data_code_2dFindDataCode2dFindDataCode2d 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

zu achten. Weitere relevante Größen sind beim ECC 200, beim QR Code und beim Aztec Code der Zwischenraum zwischen benachbarten Vordergrundmodulen ('module_gap'"module_gap""module_gap""module_gap""module_gap""module_gap") und beim ECC 200 der maximal erlaubte Winkel des Finderpatterns ('slant_max'"slant_max""slant_max""slant_max""slant_max""slant_max"). Die aktuellen Einstellungen für diese Werte lassen sich mit dem Operator get_data_code_2d_paramget_data_code_2d_paramGetDataCode2dParamget_data_code_2d_paramGetDataCode2dParamGetDataCode2dParam abfragen. Gegebenenfalls können die entsprechenden Parameter mit Hilfe des Operators set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParam an das 2D-Datacode-Symbol im Bild angepasst werden.

Eine möglichst genaue Anpassung des Modells an die gesuchte Datacode-Klasse empfielt sich darüber hinaus auch aus Laufzeitgründen. Im Allgemeinen gilt, dass die Laufzeit von find_data_code_2dfind_data_code_2dFindDataCode2dfind_data_code_2dFindDataCode2dFindDataCode2d 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_paramset_data_code_2d_paramSetDataCode2dParamset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParam ist es auch möglich, das Modell mit Hilfe von find_data_code_2dfind_data_code_2dFindDataCode2dfind_data_code_2dFindDataCode2dFindDataCode2d anhand eines oder mehrerer Beispielbilder zu trainieren. Dazu muss als generischer Parameter GenParamNamesGenParamNamesGenParamNamesGenParamNamesGenParamNamesgenParamNames 'train'"train""train""train""train""train" übergeben werden. Der entsprechende Wert bei GenParamValuesGenParamValuesGenParamValuesGenParamValuesGenParamValuesgenParamValues bestimmt, welche Parameter aus dem aktuellen Bild gelernt werden sollen. Im einzelnen können die folgenden Werte gesetzt werden:

Es können mehrere zu trainierende Parameter kombiniert und gemeinsam übergeben werden, indem 'train'"train""train""train""train""train" in einem Tupel mehrfach mit den entsprechenden Werten übergeben wird: z.B. GenParamNamesGenParamNamesGenParamNamesGenParamNamesGenParamNamesgenParamNames = ['train','train']["train","train"]["train","train"]["train","train"]["train","train"]["train","train"] und GenParamValuesGenParamValuesGenParamValuesGenParamValuesGenParamValuesgenParamValues = ['polarity','module_size']["polarity","module_size"]["polarity","module_size"]["polarity","module_size"]["polarity","module_size"]["polarity","module_size"]. Weiterhin können - im Zusammenhang mit 'train'"train""train""train""train""train" = 'all'"all""all""all""all""all" einzelne Parameter explizit vom Training ausgeschlossen werden, indem zusätzlich 'train'"train""train""train""train""train" mit den entsprechenden Parametern und einem vorangestellten '~'"~""~""~""~""~" gesetzt wird: z.B. GenParamNamesGenParamNamesGenParamNamesGenParamNamesGenParamNamesgenParamNames = ['train','train']["train","train"]["train","train"]["train","train"]["train","train"]["train","train"] und GenParamValuesGenParamValuesGenParamValuesGenParamValuesGenParamValuesgenParamValues = ['all','~contrast']["all","~contrast"]["all","~contrast"]["all","~contrast"]["all","~contrast"]["all","~contrast"].

Die folgenden Hinweise sollten im Zusammenhang mit dem Training beachtet werden:

Es ist zu beachten, dass möglicherweise gesetzte Zeitschranken im Trainingsmodus nicht beachtet werden (siehe 'timeout'"timeout""timeout""timeout""timeout""timeout" in set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParam).

Übersicht über die Funktionsweise der Symbolsuche

Abhängig von den Einstellungen im 2D-Datacode-Modell (vgl. set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParam) absolviert find_data_code_2dfind_data_code_2dFindDataCode2dfind_data_code_2dFindDataCode2dFindDataCode2d 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'"polarity = any""polarity = any""polarity = any""polarity = any""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 Finderpatterns 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_paramset_data_code_2d_paramSetDataCode2dParamset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParam) eingetreten ist. Die Anzahl der zu lesenden Symbole, kann mit dem generischen Parameter GenParamNamesGenParamNamesGenParamNamesGenParamNamesGenParamNamesgenParamNames = 'stop_after_result_num'"stop_after_result_num""stop_after_result_num""stop_after_result_num""stop_after_result_num""stop_after_result_num" gesteuert werden. Der entsprechende Wert ist in GenParamValuesGenParamValuesGenParamValuesGenParamValuesGenParamValuesgenParamValues zu übergeben. Wird nichts übergeben, wird gestoppt, sobald ein Symbol erfolgreich dekodiert werden konnte.

Abfrage von Ergebnissen der Symbolsuche

Die Operatoren get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResults und get_data_code_2d_objectsget_data_code_2d_objectsGetDataCode2dObjectsget_data_code_2d_objectsGetDataCode2dObjectsGetDataCode2dObjects 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 ResultHandlesResultHandlesResultHandlesResultHandlesResultHandlesresultHandles - ü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_resultsget_data_code_2d_resultsGetDataCode2dResultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResults und get_data_code_2d_objectsget_data_code_2d_objectsGetDataCode2dObjectsget_data_code_2d_objectsGetDataCode2dObjectsGetDataCode2dObjects.

Timeout

Mit dem Operator set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParam kann man einen Timeout für find_data_code_2dfind_data_code_2dFindDataCode2dfind_data_code_2dFindDataCode2dFindDataCode2d festlegen. Falls find_data_code_2dfind_data_code_2dFindDataCode2dfind_data_code_2dFindDataCode2dFindDataCode2d in einen Timeout läuft, werden alle bis dahin erkannten Codes zurückgegeben. Ob ein Timeout vorlag oder nicht, kann mit get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResults und dem Parameter 'timeout_occurred'"timeout_occurred""timeout_occurred""timeout_occurred""timeout_occurred""timeout_occurred" abgefragt werden.

Chinesische Zeichen

Enthält ein QR Code chinesische Zeichen, die nach dem chinesischen nationalen Standard GBT 18284-2000 codiert sind, gibt find_data_code_2dfind_data_code_2dFindDataCode2dfind_data_code_2dFindDataCode2dFindDataCode2d diese Zeichen UTF-8 codiert in DecodedDataStringsDecodedDataStringsDecodedDataStringsDecodedDataStringsDecodedDataStringsdecodedDataStrings zurück, sofern der Systemparameter 'filename_encoding'"filename_encoding""filename_encoding""filename_encoding""filename_encoding""filename_encoding" auf 'utf8'"utf8""utf8""utf8""utf8""utf8" gesetzt ist. Der Inhalt von 'decoded_data'"decoded_data""decoded_data""decoded_data""decoded_data""decoded_data", welcher mit get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResults abgefragt werden kann, wird nicht nach UTF-8 konvertiert.

Parallelisierung

Parameter

ImageImageImageImageImageimage (input_object)  singlechannelimage objectHImageHImageHImageHImageXHobject (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.

SymbolXLDsSymbolXLDsSymbolXLDsSymbolXLDsSymbolXLDssymbolXLDs (output_object)  xld_cont(-array) objectHXLDContHXLDContHXLDContHXLDContXHobject *

XLD-Konturen, die die erfolgreich dekodierten Datacode-Symbole umschließen.

DataCodeHandleDataCodeHandleDataCodeHandleDataCodeHandleDataCodeHandledataCodeHandle (input_control)  datacode_2d HDataCode2D, HTupleHTupleHDataCode2D, HTupleHDataCode2DX, VARIANTHtuple (integer) (IntPtr) (Hlong) (Hlong) (Hlong) (Hlong)

Handle des zu verwendenden 2D-Datacode-Modells.

GenParamNamesGenParamNamesGenParamNamesGenParamNamesGenParamNamesgenParamNames (input_control)  attribute.name(-array) HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Namen von (optionalen) Parametern für die Steuerung des Verhaltens des Operators.

Defaultwert: []

Werteliste: 'stop_after_result_num'"stop_after_result_num""stop_after_result_num""stop_after_result_num""stop_after_result_num""stop_after_result_num", 'train'"train""train""train""train""train"

GenParamValuesGenParamValuesGenParamValuesGenParamValuesGenParamValuesgenParamValues (input_control)  attribute.value(-array) HTupleHTupleHTupleVARIANTHtuple (integer / real / string) (int / long / double / string) (Hlong / double / HString) (Hlong / double / char*) (Hlong / double / BSTR) (Hlong / double / char*)

Die zu den optionalen generischen Parametern gehörenden Werte.

Defaultwert: []

Wertevorschläge: 'all'"all""all""all""all""all", 'model_type'"model_type""model_type""model_type""model_type""model_type", 'symbol_size'"symbol_size""symbol_size""symbol_size""symbol_size""symbol_size", 'version'"version""version""version""version""version", 'module_size'"module_size""module_size""module_size""module_size""module_size", 'small_modules_robustness'"small_modules_robustness""small_modules_robustness""small_modules_robustness""small_modules_robustness""small_modules_robustness", 'module_shape'"module_shape""module_shape""module_shape""module_shape""module_shape", 'polarity'"polarity""polarity""polarity""polarity""polarity", 'mirrored'"mirrored""mirrored""mirrored""mirrored""mirrored", 'contrast'"contrast""contrast""contrast""contrast""contrast", 'module_grid'"module_grid""module_grid""module_grid""module_grid""module_grid", 'finder_pattern_tolerance'"finder_pattern_tolerance""finder_pattern_tolerance""finder_pattern_tolerance""finder_pattern_tolerance""finder_pattern_tolerance", 'contrast_tolerance'"contrast_tolerance""contrast_tolerance""contrast_tolerance""contrast_tolerance""contrast_tolerance", 'image_proc'"image_proc""image_proc""image_proc""image_proc""image_proc", 1, 2, 3

ResultHandlesResultHandlesResultHandlesResultHandlesResultHandlesresultHandles (output_control)  integer(-array) HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Handles der erfolgreich dekodierten 2D-Datacode-Symbole.

DecodedDataStringsDecodedDataStringsDecodedDataStringsDecodedDataStringsDecodedDataStringsdecodedDataStrings (output_control)  string(-array) HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Die dekodierten Datenstrings aller im Bild detektierten 2D-Datacode-Symbole.

Beispiel (HDevelop)

* 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_008')
* 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)

Ergebnis

find_data_code_2dfind_data_code_2dFindDataCode2dfind_data_code_2dFindDataCode2dFindDataCode2d liefert den Wert 2 (H_MSG_TRUE), falls die übergebenen Parameter korrekt sind. Ansonsten wird eine Fehlerbehandlung durchgeführt.

Vorgänger

create_data_code_2d_modelcreate_data_code_2d_modelCreateDataCode2dModelcreate_data_code_2d_modelCreateDataCode2dModelCreateDataCode2dModel, read_data_code_2d_modelread_data_code_2d_modelReadDataCode2dModelread_data_code_2d_modelReadDataCode2dModelReadDataCode2dModel, set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParam

Nachfolger

get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResults, get_data_code_2d_objectsget_data_code_2d_objectsGetDataCode2dObjectsget_data_code_2d_objectsGetDataCode2dObjectsGetDataCode2dObjects, write_data_code_2d_modelwrite_data_code_2d_modelWriteDataCode2dModelwrite_data_code_2d_modelWriteDataCode2dModelWriteDataCode2dModel

Siehe auch

create_data_code_2d_modelcreate_data_code_2d_modelCreateDataCode2dModelcreate_data_code_2d_modelCreateDataCode2dModelCreateDataCode2dModel, set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParam, get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResults, get_data_code_2d_objectsget_data_code_2d_objectsGetDataCode2dObjectsget_data_code_2d_objectsGetDataCode2dObjectsGetDataCode2dObjects

Literatur

GS1 General Specifications; Version 12; Issue 1, Jan-2012; GS1.

Modul

Data Code


KlassenKlassenKlassenKlassen | | | | Operatoren