select_charactersT_select_charactersSelectCharactersSelectCharactersselect_characters (Operator)
Name
select_charactersT_select_charactersSelectCharactersSelectCharactersselect_characters — Selektieren von Zeichen aus einer gegebenen Region.
Signatur
select_characters(Region : RegionCharacters : DotPrint, StrokeWidth, CharWidth, CharHeight, Punctuation, DiacriticMarks, PartitionMethod, PartitionLines, FragmentDistance, ConnectFragments, ClutterSizeMax, StopAfter : )
Herror T_select_characters(const Hobject Region, Hobject* RegionCharacters, const Htuple DotPrint, const Htuple StrokeWidth, const Htuple CharWidth, const Htuple CharHeight, const Htuple Punctuation, const Htuple DiacriticMarks, const Htuple PartitionMethod, const Htuple PartitionLines, const Htuple FragmentDistance, const Htuple ConnectFragments, const Htuple ClutterSizeMax, const Htuple StopAfter)
void SelectCharacters(const HObject& Region, HObject* RegionCharacters, const HTuple& DotPrint, const HTuple& StrokeWidth, const HTuple& CharWidth, const HTuple& CharHeight, const HTuple& Punctuation, const HTuple& DiacriticMarks, const HTuple& PartitionMethod, const HTuple& PartitionLines, const HTuple& FragmentDistance, const HTuple& ConnectFragments, const HTuple& ClutterSizeMax, const HTuple& StopAfter)
HRegion HRegion::SelectCharacters(const HString& DotPrint, const HString& StrokeWidth, const HTuple& CharWidth, const HTuple& CharHeight, const HString& Punctuation, const HString& DiacriticMarks, const HString& PartitionMethod, const HString& PartitionLines, const HString& FragmentDistance, const HString& ConnectFragments, Hlong ClutterSizeMax, const HString& StopAfter) const
HRegion HRegion::SelectCharacters(const char* DotPrint, const char* StrokeWidth, const HTuple& CharWidth, const HTuple& CharHeight, const char* Punctuation, const char* DiacriticMarks, const char* PartitionMethod, const char* PartitionLines, const char* FragmentDistance, const char* ConnectFragments, Hlong ClutterSizeMax, const char* StopAfter) const
HRegion HRegion::SelectCharacters(const wchar_t* DotPrint, const wchar_t* StrokeWidth, const HTuple& CharWidth, const HTuple& CharHeight, const wchar_t* Punctuation, const wchar_t* DiacriticMarks, const wchar_t* PartitionMethod, const wchar_t* PartitionLines, const wchar_t* FragmentDistance, const wchar_t* ConnectFragments, Hlong ClutterSizeMax, const wchar_t* StopAfter) const
(Nur Windows)
static void HOperatorSet.SelectCharacters(HObject region, out HObject regionCharacters, HTuple dotPrint, HTuple strokeWidth, HTuple charWidth, HTuple charHeight, HTuple punctuation, HTuple diacriticMarks, HTuple partitionMethod, HTuple partitionLines, HTuple fragmentDistance, HTuple connectFragments, HTuple clutterSizeMax, HTuple stopAfter)
HRegion HRegion.SelectCharacters(string dotPrint, string strokeWidth, HTuple charWidth, HTuple charHeight, string punctuation, string diacriticMarks, string partitionMethod, string partitionLines, string fragmentDistance, string connectFragments, int clutterSizeMax, string stopAfter)
def select_characters(region: HObject, dot_print: str, stroke_width: str, char_width: Sequence[int], char_height: Sequence[int], punctuation: str, diacritic_marks: str, partition_method: str, partition_lines: str, fragment_distance: str, connect_fragments: str, clutter_size_max: int, stop_after: str) -> HObject
Beschreibung
select_charactersselect_charactersSelectCharactersSelectCharactersSelectCharactersselect_characters selektiert aus der gegebenen RegionRegionRegionRegionregionregion
die Bereiche, die Zeichen darstellen. Hierfür werden Eigenschaften wie
StrokeWidthStrokeWidthStrokeWidthStrokeWidthstrokeWidthstroke_width, DotPrintDotPrintDotPrintDotPrintdotPrintdot_print, die Größe der Zeichen und einige
weitere verwendet.
Die übergebene RegionRegionRegionRegionregionregion sollte vereinigt sein, da ansonsten jede
RegionRegionRegionRegionregionregion einzeln verarbeitet wird. Aus diesem Grund sollte der
Operator connectionconnectionConnectionConnectionConnectionconnection nicht vorher aufgerufen werden.
Sollten mehrere Textbereiche vorhanden sein, so können diese
selbstverständlich ohne vorheriges Zusammenfügen der Regionen behandelt
werden. Die übergebene RegionRegionRegionRegionregionregion wird typischerweise vom Operator
segment_characterssegment_charactersSegmentCharactersSegmentCharactersSegmentCharacterssegment_characters geliefert, sie kann jedoch auch von anderen
Segmentierungsoperatoren bereitgestellt werden.
Der Prozess zur Auswahl der Zeichen kann in vier Schritte unterteilt werden.
Jeder Verarbeitungsschritt wird durch die Parameter StrokeWidthStrokeWidthStrokeWidthStrokeWidthstrokeWidthstroke_width,
CharHeightCharHeightCharHeightCharHeightcharHeightchar_height und CharWidthCharWidthCharWidthCharWidthcharWidthchar_width beeinflusst.
Wenn kleine Objekte wie Punkte verloren gehen, dann sollte die minimale
CharWidthCharWidthCharWidthCharWidthcharWidthchar_width und die minimale CharHeightCharHeightCharHeightCharHeightcharHeightchar_height angepasst werden.
Die Ergebnisse der einzelnen Schritte sind allerdings von manchen
Parametern besonders abhängig. Eine nähere Beschreibung folgt.
Mit dem Parameter StopAfterStopAfterStopAfterStopAfterstopAfterstop_after kann die Verarbeitung nach einem
bestimmten Schritt beendet werden.
Der erste Schritt ist 'step1_select_candidates'"step1_select_candidates""step1_select_candidates""step1_select_candidates""step1_select_candidates""step1_select_candidates". In diesem Schritt
werden CharWidthCharWidthCharWidthCharWidthcharWidthchar_width und CharHeightCharHeightCharHeightCharHeightcharHeightchar_height verwendet, um die
Kandidaten auszuwählen. Zusätzlich beeinflusst ClutterSizeMaxClutterSizeMaxClutterSizeMaxClutterSizeMaxclutterSizeMaxclutter_size_max das
Ergebnis von diesem Schritt.
Im nächsten Schritt, 'step2_partition_characters'"step2_partition_characters""step2_partition_characters""step2_partition_characters""step2_partition_characters""step2_partition_characters", nehmen die
Parameter PartitionMethodPartitionMethodPartitionMethodPartitionMethodpartitionMethodpartition_method und PartitionLinesPartitionLinesPartitionLinesPartitionLinespartitionLinespartition_lines Einfluss
auf das Ergebnis.
Schritt drei, 'step3_connect_fragments'"step3_connect_fragments""step3_connect_fragments""step3_connect_fragments""step3_connect_fragments""step3_connect_fragments", verwendet die Parameter
ConnectFragmentsConnectFragmentsConnectFragmentsConnectFragmentsconnectFragmentsconnect_fragments und DotPrintDotPrintDotPrintDotPrintdotPrintdot_print. Sollen Dot-Prints gelesen
werden und manche Punkte werden nicht zu den Zeichen hinzugefügt, so gibt es
zwei Möglichkeiten, dieses Problem zu beheben. Zum einen kann man den Wert des
Parameter FragmentDistanceFragmentDistanceFragmentDistanceFragmentDistancefragmentDistancefragment_distance erhöhen und/oder die StrokeWidthStrokeWidthStrokeWidthStrokeWidthstrokeWidthstroke_width
herunter setzen.
Im letzten Schritt, 'step4_select_characters'"step4_select_characters""step4_select_characters""step4_select_characters""step4_select_characters""step4_select_characters", beeinflussen die
Parameter DiacriticMarksDiacriticMarksDiacriticMarksDiacriticMarksdiacriticMarksdiacritic_marks und PunctuationPunctuationPunctuationPunctuationpunctuationpunctuation das Ergebnis.
RegionCharactersRegionCharactersRegionCharactersRegionCharactersregionCharactersregion_characters:
Nach dem Ausführen enthält RegionCharactersRegionCharactersRegionCharactersRegionCharactersregionCharactersregion_characters die extrahierten Zeichen
von der übergebenen RegionRegionRegionRegionregionregion.
DotPrintDotPrintDotPrintDotPrintdotPrintdot_print:
Sollte auf 'true'"true""true""true""true""true" gesetzt werden, wenn Dot-Prints gelesen werden
sollen, ansonsten auf 'false'"false""false""false""false""false".
StrokeWidthStrokeWidthStrokeWidthStrokeWidthstrokeWidthstroke_width:
Spezifiziert die Strichstärke des Textes und wird zur Bestimmung von
Filtergrößen für die Zeichendetektion verwendet. Die Filtergrößen werden
auch durch die Parameter DotPrintDotPrintDotPrintDotPrintdotPrintdot_print, die durchschnittliche
Zeichenbreite CharWidthCharWidthCharWidthCharWidthcharWidthchar_width und die durchschnittliche Zeichenhöhe
CharHeightCharHeightCharHeightCharHeightcharHeightchar_height festgelegt.
CharWidthCharWidthCharWidthCharWidthcharWidthchar_width:
Dieser Parameter kann durch ein Tupel, welches bis zu drei Werten besitzen
kann, gesetzt werden. Der erste Wert ist die durchschnittliche Breite,
der zweite ist die minimale und der dritte die maximale Zeichenbreite.
Wenn die minimale Zeichenbreite auf -1 gesetzt wird, berechnet der Operator
den Wert automatisch in Abhängigkeit von der durchschnittlichen
Zeichenbreite. Das gleiche gilt für den Fall, dass der maximale Wert nicht
gesetzt wird. Einige Beispiele:
[10] setzt die durchschnittliche Zeichenbreite auf 10, die
minimale und maximale Zeichenbreite werden vom Operator berechnet.
[10,-1,20] setzt die durchschnittliche Zeichenbreite auf 10, der minimale
Wert wird vom Operator bestimmt und der maximale auf 20 gesetzt.
[10,5,20] setzt die durchschnittliche Zeichenbreite auf 10, der minimale
Wert wird auf 5 und der maximale Wert auf 20 gesetzt.
CharHeightCharHeightCharHeightCharHeightcharHeightchar_height:
Dieser Parameter kann durch ein Tupel, welches bis zu drei Werten besitzen
kann, gesetzt werden. Der erste Wert ist die durchschnittliche Höhe, der
zweite ist die minimale und der dritte die maximale Zeichenhöhe.
Wenn die minimale Zeichenhöhe auf -1 gesetzt wird, berechnet der Operator
den Wert automatisch in Abhängigkeit von der durchschnittlichen Zeichenhöhe.
Das gleiche gilt für den Fall, dass der maximale Wert nicht gesetzt wird.
Einige Beispiele:
[10] setzt die durchschnittliche Zeichenhöhe auf 10, die minimale
und maximale Zeichenhöhe werden vom Operator berechnet.
[10,-1,20] setzt die durchschnittliche Zeichenhöhe auf 10, der minimale
Wert wird vom Operator bestimmt und der maximale auf 20 gesetzt.
[10,5,20] setzt die durchschnittliche Zeichenhöhe auf 10, der minimale
Wert wird auf 5 und der maximale Wert auf 20 gesetzt.
PunctuationPunctuationPunctuationPunctuationpunctuationpunctuation:
Dieser Parameter sollte auf 'true'"true""true""true""true""true" gesetzt werden, wenn der
Operator Satzzeichen (wie .,:'´") detektieren soll, ansonsten werden
diese unterdrückt.
DiacriticMarksDiacriticMarksDiacriticMarksDiacriticMarksdiacriticMarksdiacritic_marks:
Dieser Parameter sollte auf 'true'"true""true""true""true""true" gesetzt werden, wenn die
Anwendung diakritisches Zeichen (wie â,é,ö) enthält oder auf
'false'"false""false""false""false""false" um diese zu unterdrücken.
PartitionMethodPartitionMethodPartitionMethodPartitionMethodpartitionMethodpartition_method:
Benachbarte Zeichen, welche sehr dicht nebeneinander gedruckt wurden,
können teilweise nicht getrennt detektiert werden. Mit diesem Parameter
kann die Methode zum Trennen dieser Zeichen festgelegt werden. Die
möglichen Werte sind 'none'"none""none""none""none""none", wodurch kein Auftrennen
durchgeführt wird. 'fixed_width'"fixed_width""fixed_width""fixed_width""fixed_width""fixed_width" bedeutet, dass die Auftrennung
davon ausgeht, dass alle Zeichen gleich breit sind. Falls die Breite
der extrahierten Region merklich über der durchschnittlichen
Zeichenbreite liegt, wird die Region in Teile getrennt, welche dann die
durchschnittliche Zeichenbreite besitzen. Das Aufteilen beginnt an der
linken Seite der Region.
'variable_width'"variable_width""variable_width""variable_width""variable_width""variable_width" bedeutet, dass die Zeichen an ihrer dünnsten
Verbindung getrennt werden. Diese Methode kann für Fonts mit
unterschiedlich breiten Zeichen ausgewählt werden, oder falls viele
aufeinanderfolgende Zeichen als eines extrahiert werden.
Es könnte hilfreich sein, text_line_slanttext_line_slantTextLineSlantTextLineSlantTextLineSlanttext_line_slant und/oder
text_line_orientationtext_line_orientationTextLineOrientationTextLineOrientationTextLineOrientationtext_line_orientation auszuführen, bevor select_charactersselect_charactersSelectCharactersSelectCharactersSelectCharactersselect_characters
aufgerufen wird.
PartitionLinesPartitionLinesPartitionLinesPartitionLinespartitionLinespartition_lines:
Wenn einige Textzeilen oder einige Zeichen von unterschiedlichen
Textzeilen verbunden sind, sollte dieser Parameter auf 'true'"true""true""true""true""true"
gesetzt werden.
FragmentDistanceFragmentDistanceFragmentDistanceFragmentDistancefragmentDistancefragment_distance:
Dieser Parameter beeinflusst die Verknüpfung von Zeichenfragmenten und
Zeichen. Wenn zu viel verbunden wird, sollte der Parameter auf
'narrow'"narrow""narrow""narrow""narrow""narrow" oder 'medium'"medium""medium""medium""medium""medium" gesetzt werden. Im Fall dass
mehr Fragmente verbunden werden sollen, sollte der Parameter auf
'medium'"medium""medium""medium""medium""medium" oder 'wide'"wide""wide""wide""wide""wide" gesetzt werden.
Das Verbinden wird außerdem vom Maximum von CharWidthCharWidthCharWidthCharWidthcharWidthchar_width und
dem Maximum von CharHeightCharHeightCharHeightCharHeightcharHeightchar_height beeinflusst. Siehe auch
ConnectFragmentsConnectFragmentsConnectFragmentsConnectFragmentsconnectFragmentsconnect_fragments.
ConnectFragmentsConnectFragmentsConnectFragmentsConnectFragmentsconnectFragmentsconnect_fragments
Dieser Parameter sollte auf 'true'"true""true""true""true""true" gesetzt werden, wenn
die extrahierten Zeichen fragmentiert sind, zum Beispiel wenn ein
Zeichen nicht als ein Zeichen detektiert wird, sondern in mehrere
Einzelteile zerfällt. Weitere Infos findet man unter
FragmentDistanceFragmentDistanceFragmentDistanceFragmentDistancefragmentDistancefragment_distance und StopAfterStopAfterStopAfterStopAfterstopAfterstop_after im Schritt
'step3_connect_fragments'"step3_connect_fragments""step3_connect_fragments""step3_connect_fragments""step3_connect_fragments""step3_connect_fragments".
ClutterSizeMaxClutterSizeMaxClutterSizeMaxClutterSizeMaxclutterSizeMaxclutter_size_max:
Sollten die segmentierten Zeichen Störungen enthalten, zum Beispiel
kleine Regionen neben den Zeichen, sollte dieser Wert erhöht werden.
Wenn Teile der Zeichen fehlen, dann sollte dieser Wert verkleinert
werden.
StopAfterStopAfterStopAfterStopAfterstopAfterstop_after:
Dieser Parameter sollte verwendet werden, wenn select_charactersselect_charactersSelectCharactersSelectCharactersSelectCharactersselect_characters
nicht das gewünschte Ergebnis liefert. Durch Modifizieren des Parameters
wird bestimmt, nach welchem Schritt der Operator die Ausführung beendet und
es werden die dazugehörigen Ergebnisse geliefert. Um den Operator nicht
abzubrechen sollte StopAfterStopAfterStopAfterStopAfterstopAfterstop_after auf 'completion'"completion""completion""completion""completion""completion" gesetzt
werden.
Ausführungsinformationen
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf Tupelebene.
Parameter
RegionRegionRegionRegionregionregion (input_object) region(-array) → objectHRegionHObjectHRegionHobject
Region mit Textzeilen, in der die Zeichen segmentiert
werden sollen.
RegionCharactersRegionCharactersRegionCharactersRegionCharactersregionCharactersregion_characters (output_object) region(-array) → objectHRegionHObjectHRegionHobject *
Selektierte Zeichen.
DotPrintDotPrintDotPrintDotPrintdotPrintdot_print (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Sollen Dot-Print-Zeichen detektiert werden?
Defaultwert:
'false'
"false"
"false"
"false"
"false"
"false"
Werteliste: 'false'"false""false""false""false""false", 'true'"true""true""true""true""true"
StrokeWidthStrokeWidthStrokeWidthStrokeWidthstrokeWidthstroke_width (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Strichstärke der Zeichen.
Defaultwert:
'medium'
"medium"
"medium"
"medium"
"medium"
"medium"
Werteliste: 'bold'"bold""bold""bold""bold""bold", 'light'"light""light""light""light""light", 'medium'"medium""medium""medium""medium""medium", 'ultra_light'"ultra_light""ultra_light""ultra_light""ultra_light""ultra_light"
CharWidthCharWidthCharWidthCharWidthcharWidthchar_width (input_control) integer-array → HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Breite eines Zeichens.
Defaultwert: 25
Typischer Wertebereich: 1
≤
CharWidth
CharWidth
CharWidth
CharWidth
charWidth
char_width
Restriktion: CharWidth >= 1
CharHeightCharHeightCharHeightCharHeightcharHeightchar_height (input_control) integer-array → HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Höhe eines Zeichens.
Defaultwert: 25
Typischer Wertebereich: 1
≤
CharHeight
CharHeight
CharHeight
CharHeight
charHeight
char_height
Restriktion: CharHeight >= 1
PunctuationPunctuationPunctuationPunctuationpunctuationpunctuation (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Satzzeichen hinzufügen?
Defaultwert:
'false'
"false"
"false"
"false"
"false"
"false"
Werteliste: 'false'"false""false""false""false""false", 'true'"true""true""true""true""true"
DiacriticMarksDiacriticMarksDiacriticMarksDiacriticMarksdiacriticMarksdiacritic_marks (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Sind diakritische Zeichen vorhanden?
Defaultwert:
'false'
"false"
"false"
"false"
"false"
"false"
Werteliste: 'false'"false""false""false""false""false", 'true'"true""true""true""true""true"
PartitionMethodPartitionMethodPartitionMethodPartitionMethodpartitionMethodpartition_method (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Methode zum Trennen von benachbarten Zeichen.
Defaultwert:
'none'
"none"
"none"
"none"
"none"
"none"
Werteliste: 'fixed_width'"fixed_width""fixed_width""fixed_width""fixed_width""fixed_width", 'none'"none""none""none""none""none", 'variable_width'"variable_width""variable_width""variable_width""variable_width""variable_width"
PartitionLinesPartitionLinesPartitionLinesPartitionLinespartitionLinespartition_lines (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Sollen Zeilen getrennt werden?
Defaultwert:
'false'
"false"
"false"
"false"
"false"
"false"
Werteliste: 'false'"false""false""false""false""false", 'true'"true""true""true""true""true"
FragmentDistanceFragmentDistanceFragmentDistanceFragmentDistancefragmentDistancefragment_distance (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Abstand von Fragmenten.
Defaultwert:
'medium'
"medium"
"medium"
"medium"
"medium"
"medium"
Werteliste: 'medium'"medium""medium""medium""medium""medium", 'narrow'"narrow""narrow""narrow""narrow""narrow", 'wide'"wide""wide""wide""wide""wide"
ConnectFragmentsConnectFragmentsConnectFragmentsConnectFragmentsconnectFragmentsconnect_fragments (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Sollen Fragmente zusammengefügt werden?
Defaultwert:
'false'
"false"
"false"
"false"
"false"
"false"
Werteliste: 'false'"false""false""false""false""false", 'true'"true""true""true""true""true"
ClutterSizeMaxClutterSizeMaxClutterSizeMaxClutterSizeMaxclutterSizeMaxclutter_size_max (input_control) integer → HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Maximaler Größe von Störungen.
Defaultwert: 0
Typischer Wertebereich: 0
≤
ClutterSizeMax
ClutterSizeMax
ClutterSizeMax
ClutterSizeMax
clutterSizeMax
clutter_size_max
Restriktion: 0 < ClutterSizeMax
StopAfterStopAfterStopAfterStopAfterstopAfterstop_after (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Beende die Ausführung nach diesem Schritt.
Defaultwert:
'completion'
"completion"
"completion"
"completion"
"completion"
"completion"
Werteliste: 'completion'"completion""completion""completion""completion""completion", 'step1_select_candidates'"step1_select_candidates""step1_select_candidates""step1_select_candidates""step1_select_candidates""step1_select_candidates", 'step2_partition_characters'"step2_partition_characters""step2_partition_characters""step2_partition_characters""step2_partition_characters""step2_partition_characters", 'step3_connect_fragments'"step3_connect_fragments""step3_connect_fragments""step3_connect_fragments""step3_connect_fragments""step3_connect_fragments", 'step4_select_characters'"step4_select_characters""step4_select_characters""step4_select_characters""step4_select_characters""step4_select_characters"
Beispiel (HDevelop)
for Index := 1 to 5 by 1
read_image (Image, 'dot_print_rotated/dot_print_rotated_'+Index$'02d')
text_line_orientation (Image, Image, 50, rad(-30), rad(30), OrientationAngle)
rotate_image (Image, ImageRotate, deg(-OrientationAngle), 'constant')
segment_characters (ImageRotate, ImageRotate, ImageForeground, \
RegionForeground, 'local_auto_shape', 'false', 'false', 'medium', \
25, 25, 0, 10, UsedThreshold)
select_characters (RegionForeground, RegionCharacters, 'true', 'ultra_light', \
[60,1,100], [60,1,100], 'false', 'false', 'none', 'true', 'wide', 'true', 0, \
'completion')
endfor
Ergebnis
Sind die Eingabeparameter korrekt besetzt, dann liefert
select_charactersselect_charactersSelectCharactersSelectCharactersSelectCharactersselect_characters den Wert TRUE.
Andernfalls wird eine Fehlerbehandlung durchgeführt.
Vorgänger
segment_characterssegment_charactersSegmentCharactersSegmentCharactersSegmentCharacterssegment_characters,
text_line_slanttext_line_slantTextLineSlantTextLineSlantTextLineSlanttext_line_slant
Nachfolger
do_ocr_single_class_mlpdo_ocr_single_class_mlpDoOcrSingleClassMlpDoOcrSingleClassMlpDoOcrSingleClassMlpdo_ocr_single_class_mlp,
do_ocr_multi_class_mlpdo_ocr_multi_class_mlpDoOcrMultiClassMlpDoOcrMultiClassMlpDoOcrMultiClassMlpdo_ocr_multi_class_mlp
Alternativen
connectionconnectionConnectionConnectionConnectionconnection
Modul
Foundation