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_charactersSelectCharactersSelectCharactersselect_characters selektiert aus der gegebenen RegionRegionRegionregionregion die Bereiche, die Zeichen darstellen. Hierfür werden Eigenschaften wie StrokeWidthStrokeWidthStrokeWidthstrokeWidthstroke_width, DotPrintDotPrintDotPrintdotPrintdot_print, die Größe der Zeichen und einige weitere verwendet. Die übergebene RegionRegionRegionregionregion sollte vereinigt sein, da ansonsten jede RegionRegionRegionregionregion einzeln verarbeitet wird. Aus diesem Grund sollte der Operator connectionconnectionConnectionConnectionconnection 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 RegionRegionRegionregionregion wird typischerweise vom Operator segment_characterssegment_charactersSegmentCharactersSegmentCharacterssegment_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 StrokeWidthStrokeWidthStrokeWidthstrokeWidthstroke_width, CharHeightCharHeightCharHeightcharHeightchar_height und CharWidthCharWidthCharWidthcharWidthchar_width beeinflusst. Wenn kleine Objekte wie Punkte verloren gehen, dann sollte die minimale CharWidthCharWidthCharWidthcharWidthchar_width und die minimale CharHeightCharHeightCharHeightcharHeightchar_height angepasst werden. Die Ergebnisse der einzelnen Schritte sind allerdings von manchen Parametern besonders abhängig. Eine nähere Beschreibung folgt. Mit dem Parameter StopAfterStopAfterStopAfterstopAfterstop_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". In diesem Schritt werden CharWidthCharWidthCharWidthcharWidthchar_width und CharHeightCharHeightCharHeightcharHeightchar_height verwendet, um die Kandidaten auszuwählen. Zusätzlich beeinflusst ClutterSizeMaxClutterSizeMaxClutterSizeMaxclutterSizeMaxclutter_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", nehmen die Parameter PartitionMethodPartitionMethodPartitionMethodpartitionMethodpartition_method und PartitionLinesPartitionLinesPartitionLinespartitionLinespartition_lines Einfluss auf das Ergebnis.

Schritt drei, 'step3_connect_fragments'"step3_connect_fragments""step3_connect_fragments""step3_connect_fragments""step3_connect_fragments", verwendet die Parameter ConnectFragmentsConnectFragmentsConnectFragmentsconnectFragmentsconnect_fragments und DotPrintDotPrintDotPrintdotPrintdot_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 FragmentDistanceFragmentDistanceFragmentDistancefragmentDistancefragment_distance erhöhen und/oder die StrokeWidthStrokeWidthStrokeWidthstrokeWidthstroke_width herunter setzen.

Im letzten Schritt, 'step4_select_characters'"step4_select_characters""step4_select_characters""step4_select_characters""step4_select_characters", beeinflussen die Parameter DiacriticMarksDiacriticMarksDiacriticMarksdiacriticMarksdiacritic_marks und PunctuationPunctuationPunctuationpunctuationpunctuation das Ergebnis.

RegionCharactersRegionCharactersRegionCharactersregionCharactersregion_characters: Nach dem Ausführen enthält RegionCharactersRegionCharactersRegionCharactersregionCharactersregion_characters die extrahierten Zeichen von der übergebenen RegionRegionRegionregionregion.

DotPrintDotPrintDotPrintdotPrintdot_print: Sollte auf 'true'"true""true""true""true" gesetzt werden, wenn Dot-Prints gelesen werden sollen, ansonsten auf 'false'"false""false""false""false".

StrokeWidthStrokeWidthStrokeWidthstrokeWidthstroke_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 DotPrintDotPrintDotPrintdotPrintdot_print, die durchschnittliche Zeichenbreite CharWidthCharWidthCharWidthcharWidthchar_width und die durchschnittliche Zeichenhöhe CharHeightCharHeightCharHeightcharHeightchar_height festgelegt.

CharWidthCharWidthCharWidthcharWidthchar_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.

CharHeightCharHeightCharHeightcharHeightchar_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.

PunctuationPunctuationPunctuationpunctuationpunctuation: Dieser Parameter sollte auf 'true'"true""true""true""true" gesetzt werden, wenn der Operator Satzzeichen (wie .,:'´") detektieren soll, ansonsten werden diese unterdrückt.

DiacriticMarksDiacriticMarksDiacriticMarksdiacriticMarksdiacritic_marks: Dieser Parameter sollte auf 'true'"true""true""true""true" gesetzt werden, wenn die Anwendung diakritisches Zeichen (wie â,é,ö) enthält oder auf 'false'"false""false""false""false" um diese zu unterdrücken.

PartitionMethodPartitionMethodPartitionMethodpartitionMethodpartition_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", wodurch kein Auftrennen durchgeführt wird. '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" 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_slantTextLineSlantTextLineSlanttext_line_slant und/oder text_line_orientationtext_line_orientationTextLineOrientationTextLineOrientationtext_line_orientation auszuführen, bevor select_charactersselect_charactersSelectCharactersSelectCharactersselect_characters aufgerufen wird.

PartitionLinesPartitionLinesPartitionLinespartitionLinespartition_lines: Wenn einige Textzeilen oder einige Zeichen von unterschiedlichen Textzeilen verbunden sind, sollte dieser Parameter auf 'true'"true""true""true""true" gesetzt werden.

FragmentDistanceFragmentDistanceFragmentDistancefragmentDistancefragment_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" oder 'medium'"medium""medium""medium""medium" gesetzt werden. Im Fall dass mehr Fragmente verbunden werden sollen, sollte der Parameter auf 'medium'"medium""medium""medium""medium" oder 'wide'"wide""wide""wide""wide" gesetzt werden. Das Verbinden wird außerdem vom Maximum von CharWidthCharWidthCharWidthcharWidthchar_width und dem Maximum von CharHeightCharHeightCharHeightcharHeightchar_height beeinflusst. Siehe auch ConnectFragmentsConnectFragmentsConnectFragmentsconnectFragmentsconnect_fragments.

ConnectFragmentsConnectFragmentsConnectFragmentsconnectFragmentsconnect_fragments Dieser Parameter sollte auf '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 FragmentDistanceFragmentDistanceFragmentDistancefragmentDistancefragment_distance und StopAfterStopAfterStopAfterstopAfterstop_after im Schritt 'step3_connect_fragments'"step3_connect_fragments""step3_connect_fragments""step3_connect_fragments""step3_connect_fragments".

ClutterSizeMaxClutterSizeMaxClutterSizeMaxclutterSizeMaxclutter_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.

StopAfterStopAfterStopAfterstopAfterstop_after: Dieser Parameter sollte verwendet werden, wenn select_charactersselect_charactersSelectCharactersSelectCharactersselect_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 StopAfterStopAfterStopAfterstopAfterstop_after auf 'completion'"completion""completion""completion""completion" gesetzt werden.

Ausführungsinformationen

Parameter

RegionRegionRegionregionregion (input_object)  region(-array) objectHRegionHObjectHObjectHobject

Region mit Textzeilen, in der die Zeichen segmentiert werden sollen.

RegionCharactersRegionCharactersRegionCharactersregionCharactersregion_characters (output_object)  region(-array) objectHRegionHObjectHObjectHobject *

Selektierte Zeichen.

DotPrintDotPrintDotPrintdotPrintdot_print (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Sollen Dot-Print-Zeichen detektiert werden?

Default: 'false' "false" "false" "false" "false"

Werteliste: 'false'"false""false""false""false", 'true'"true""true""true""true"

StrokeWidthStrokeWidthStrokeWidthstrokeWidthstroke_width (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Strichstärke der Zeichen.

Default: 'medium' "medium" "medium" "medium" "medium"

Werteliste: 'bold'"bold""bold""bold""bold", 'light'"light""light""light""light", 'medium'"medium""medium""medium""medium", 'ultra_light'"ultra_light""ultra_light""ultra_light""ultra_light"

CharWidthCharWidthCharWidthcharWidthchar_width (input_control)  integer-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Breite eines Zeichens.

Default: 25

Wertebereich: 1 ≤ CharWidth CharWidth CharWidth charWidth char_width

CharHeightCharHeightCharHeightcharHeightchar_height (input_control)  integer-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Höhe eines Zeichens.

Default: 25

Wertebereich: 1 ≤ CharHeight CharHeight CharHeight charHeight char_height

PunctuationPunctuationPunctuationpunctuationpunctuation (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Satzzeichen hinzufügen?

Default: 'false' "false" "false" "false" "false"

Werteliste: 'false'"false""false""false""false", 'true'"true""true""true""true"

DiacriticMarksDiacriticMarksDiacriticMarksdiacriticMarksdiacritic_marks (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Sind diakritische Zeichen vorhanden?

Default: 'false' "false" "false" "false" "false"

Werteliste: 'false'"false""false""false""false", 'true'"true""true""true""true"

PartitionMethodPartitionMethodPartitionMethodpartitionMethodpartition_method (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Methode zum Trennen von benachbarten Zeichen.

Default: 'none' "none" "none" "none" "none"

Werteliste: 'fixed_width'"fixed_width""fixed_width""fixed_width""fixed_width", 'none'"none""none""none""none", 'variable_width'"variable_width""variable_width""variable_width""variable_width"

PartitionLinesPartitionLinesPartitionLinespartitionLinespartition_lines (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Sollen Zeilen getrennt werden?

Default: 'false' "false" "false" "false" "false"

Werteliste: 'false'"false""false""false""false", 'true'"true""true""true""true"

FragmentDistanceFragmentDistanceFragmentDistancefragmentDistancefragment_distance (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Abstand von Fragmenten.

Default: 'medium' "medium" "medium" "medium" "medium"

Werteliste: 'medium'"medium""medium""medium""medium", 'narrow'"narrow""narrow""narrow""narrow", 'wide'"wide""wide""wide""wide"

ConnectFragmentsConnectFragmentsConnectFragmentsconnectFragmentsconnect_fragments (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Sollen Fragmente zusammengefügt werden?

Default: 'false' "false" "false" "false" "false"

Werteliste: 'false'"false""false""false""false", 'true'"true""true""true""true"

ClutterSizeMaxClutterSizeMaxClutterSizeMaxclutterSizeMaxclutter_size_max (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Maximaler Größe von Störungen.

Default: 0

Wertebereich: 0 ≤ ClutterSizeMax ClutterSizeMax ClutterSizeMax clutterSizeMax clutter_size_max

StopAfterStopAfterStopAfterstopAfterstop_after (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Beende die Ausführung nach diesem Schritt.

Default: 'completion' "completion" "completion" "completion" "completion"

Werteliste: 'completion'"completion""completion""completion""completion", '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", '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"

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_charactersSelectCharactersSelectCharactersselect_characters den Wert 2 ( H_MSG_TRUE) . Andernfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

segment_characterssegment_charactersSegmentCharactersSegmentCharacterssegment_characters, text_line_slanttext_line_slantTextLineSlantTextLineSlanttext_line_slant

Nachfolger

do_ocr_single_class_mlpdo_ocr_single_class_mlpDoOcrSingleClassMlpDoOcrSingleClassMlpdo_ocr_single_class_mlp, do_ocr_multi_class_mlpdo_ocr_multi_class_mlpDoOcrMultiClassMlpDoOcrMultiClassMlpdo_ocr_multi_class_mlp

Alternativen

connectionconnectionConnectionConnectionconnection

Modul

Foundation