ImageParser Syntax
Der ImageParser ist ein Modul von CodX PostOffice um die Verarbeitung von Bildern zu steuern.
Ein XML-Konfigurationsfile gibt an, wie das Bild verarbeitet werden soll.
Die XML-Datei besteht aus Regeln (ParserRule) mit Bildelementen (Element) und Auswertungs-Kriterien (Criteria).
Beispiel ImageParser Konfigurationsfile
<ImageParser Name="Parser
1" Timeout="1000"
Reference="SN-AZD, FE"
Remark="Das ist eine Bemerkung">
<ParserRule Name="Rolle
1" Rotate="0, 30, 60, 90" Origin="top_left" Trim="Bottom, Right"
FirstPage="1" LastPage="3">
<Element Name="Element
1" x="100 px" y="200 px" h="50 mm" w="40 mm" Type="Text" Rotate="0, 90, 180, 270" ValidValue="[a-z]+" Prerequisite="Mandatory" SBB-CF="Alternativcode"></Element>
<Element Name="Element
2" x="200 px" y="400 px" h="50 mm" w="40 mm" Type="Barcode" BarcodeType="All" Rotate="0" PreProcess="BRectS" InvalidValue="(?<Invalid>[^[0-9a-zA-Z()-/\s\öäüéàèÖÄÜ])"></Element>
<Element Name="Element
3" x="300 px" y="500 px" h="50 mm" w="40 mm" Type="UPOC" Rotate="0" ValidValue="[0-9]+"></Element>
<Element Name="PostAdr1" Type="PostalAddress"
ValidValue="[AdrLevel_City]"></Element>
<Criteria Name="Criteria
1" Operation="AND" ElementName="Element 1" RegEx="[a-z]+"></Criteria>
<Criteria Name="Criteria
2" Operation="AND" ElementName="Element 2" RegEx="[0-9]+"></Criteria>
<Criteria Name="Criteria
3" Operation="OR" ElementName="Element 3" RegEx="04[0-9]+"></Criteria>
<Criteria Name="Criteria
3" Operation="AND" ElementName="PostAdr1" RegEx="[AdrLevel_City]"></Criteria>
</ParserRule>
<ParserRule Name="Rolle
2" Rotate="0, -30, -60, -90" Origin="top_left" Trim="Top">
<Element Name="Element
1" x="100 px" y="200 px" h="50 mm" w="40 mm" Type="Text" Rotate="0, 90, 180, 270" ValidValue="[a-z]+"></Element>
<Element Name="Element
2" x="200 px" y="400 px" h="50 mm" w="40 mm" Type="Barcode" Rotate="0" ValidValue="[a-z]+"></Element>
<Element Name="Element
3" x="300 px" y="500 px" h="50 mm" w="40 mm" Type="UPOC" Rotate="0" ValidValue="[0-9]+"></Element>
<Criteria Name="Criteria
1" Operation="AND" ElementName="Element 1" RegEx="[a-z]+"></Criteria>
<Criteria Name="Criteria
2" Operation="AND" ElementName="Element 2" RegEx="[0-9]+"></Criteria>
<Criteria Name="Criteria
3" Operation="OR" ElementName="Element 3" RegEx="04[0-9]+"></Criteria>
</ParserRule>
</ImageParser>Tags
Das XML-Konfigurationsfile ist wie folgt aufgebaut:
ImageParser
Enthält 1 oder mehrere Tags von 'ParserRule'.
Attribut |
Beschreibung |
Name |
Name des ImageParsers |
Timeout |
Maximale Verarbeitungszeit in Millisekunden. Wenn das Timeout erreicht ist, wird die Verarbeitung abgebrochen und kein Resultat zurückgegeben.Dieses Attribut ist optional, der Standardwert beträgt 1000 ms und der maximal erlaubte Timeout 99999 ms. Wenn der Timeout 0 oder kleiner 0 ist, wird der Timeout auf Standardwert gesetzt, wenn er grösser als der erlaubte Maximalwert ist wird er auf den Maximalwert zurückgesetzt. |
Reference |
Referenz zum Modul/Funktion, welches diesen ImageParser einsetzt. Wird ein ImageParser in mehreren Modulen eingesetzt, so werden die Modulnamen mit Komma getrennt aufgeführt.
Folgende Werte sind möglich:
-
R-SCAN
CxLetterScan im Modus 'R-Scan'
CxLetterScan im Modus 'Wartung'
Modul R-Scan
-
SCANNER
CxLetterScan im Modus 'Scanner'
-
CAPTURE
CxLetterScan im Modus 'Capture'
-
SORT
CxLetterScan im Modus 'Sort'
-
DIGITAL
Digitalisierung
|
Remark |
Bemerkung zum ImageParser.
Dieses Attribut ist optional
|
ParserRule
Enthält 1 oder mehrere Tags von 'Element' und 'Criteria'
Attribut |
Beschreibung |
Name |
Name der ParserRule |
Rotate |
Liste der Winkel, mit welchen der Wert gelesen werden soll. Die Winkel werden mit Komma getrennt.
Die Winkel steigen im Uhrzeigersinn von 0 bis 360° auf.
ACHTUNG: Jeder zusätzliche Winkel vervielfacht die Verarbeitungszeit zusätzlich! |
Origin |
Ursprung des Bildes. Alle Koordinaten beziehen sich auf diesen Ursprung.
Mögliche Werte:
- top_left
- top_right
- bottom_left (default)
- bottom_right
Dieses Attribut ist optional. |
Trim |
Optional. Ist dieses Attribut definiert so wird der entsprechende Teil des Bildes abgeschnitten, welcher deutlich dunkler als der Rest des Bildes ist.
Mögliche Werte sind eine Kombination folgender Werte, getrennt duch Komma:
- Top
- Bottom
- Left
- Right |
FirstPage |
Dieses Attribut wird nur verwendet, wenn mehrere
Dokumente zur gleichen Zeit verarbeitet werden, z.B. in der
Digitalisierung.
Ab dieser Seite wird diese ParserRule angewandt. Ist die
zu verarbeitende Seite kleiner, wird die ParserRule
ignoriert. |
LastPage |
Dieses Attribut wird nur verwendet, wenn mehrere
Dokumente zur gleichen Zeit verarbeitet werden, z.B. in der
Digitalisierung.
Bis zu dieser Seite wird diese ParserRule angewant. Ist
die zu verarbeitende Seite grösser, wird die ParserRule
ignoriert. |
Element
Beschreibt das zu parsende Element.
Attribut |
Beschreibung |
Name |
Name des Elements, muss zwingend vorhanden sein!
Die CxLetterScan erfordert zwingend je nach Modus (Use-Case) bestimmte Elemente. Siehe Online-Help des entsprechenden Modus. |
Type |
Typ des Elements; optional, Standardwert: Text.
Folgende Typen sind möglich:
- Text: Der Ausschnitt des Elements wird mit OCR analysiert und der erkannte Text ausgegeben.
- Barcode: Der Ausschnitt des Elements wird auf einen Barcode untersucht
- UPOC: Der Ausschnitt des Elements wird auf einen Barcode untersucht und geprüft, ob es sich um einen gültigen UPOC handelt (Typ, Mandant, ID, Checksumme).
- PostalAddress: Der Ausschnitt des Elements wird mit OCR und dem Adress-Tokenizer analysiert und die erkannte Adresse
ausgegeben. Siehe auch Postalische Adressen. |
x |
X-Koordinate der oberen, linken Ecke des Elements.
Die Koordinate bezieht sich auf den Ursprung des Bildes.
Optional kann eine Einheit angegeben werden, Default = px (Pixel).
Folgende Einheiten sind möglich:
- px: Pixel (default)
- %: Prozent, bezogen auf das ganze Bild
- mm: Millimenter (nur, wenn Auflösung bekannt) |
y |
Y-Koordinate der oberen, linken Ecke des Elements.
Die Koordinate bezieht sich auf den Ursprung des Bildes.
Optional kann eine Einheit angegeben werden, Default = px (Pixel).
Folgende Einheiten sind möglich:
- px: Pixel (default)
- %: Prozent, bezogen auf das ganze Bild
- mm: Millimenter (nur, wenn Auflösung bekannt). |
h |
Höhe des Elements.
Optional kann eine Einheit angegeben werden, Default = px (Pixel).
Folgende Einheiten sind möglich:
- px: Pixel (default)
- %: Prozent, bezogen auf das ganze Bild
- mm: Millimenter (nur, wenn Auflösung bekannt).
|
w |
Breite des Elements.
Optional kann eine Einheit angegeben werden, Default = px (Pixel).
Folgende Einheiten sind möglich:
- px: Pixel (default)
- %: Prozent, bezogen auf das ganze Bild
- mm: Millimenter (nur, wenn Auflösung bekannt).
|
BarcodeType |
Typ des Barcodes. Nur relevant beim Typ 'Barcode'. Es können mehrere Barcode-Typen angegeben werden. Diese werden mit Komma getrennt angegeben.
Folgende Barcode-Typen sind möglich:
- All (oder keine Angabe): Es wird nach allen untenstehenden Barcode-Typen gesucht.
- All1D: Es wird nach allen 1D Barcode-Typen gesucht
- All2D: Es wird nach allen 2D Barcode-Typen gesucht
- AustralianPostCode
- Aztec
- Circular2of5
- Codabar
- CodablockF
- Code128
- Code16K
- Code39
- Code39Extended
- Code39Mod43
- Code39Mod43Extended
- Code93
- DataMatrix
- EAN13
- EAN2
- EAN5
- EAN8
- GS1
- GS1DataBarExpanded
- GS1DataBarExpandedStacked
- GS1DataBarLimited
- GS1DataBarStacked
- GS1DataBarOmnidirectional
- GTIN12 (UPC-A mit 12 Symbolen)
- GTIN13 (EAN-13)
- GTIN14 (I2of5 mit 14 digits)
- GTIN8 (EAN-8)
- IntelligentMail
- Interleaved2of5
- ITF14 (I2of5 mit 14 digits)
- MaxiCode
- MICR
- MicroPDF
- MSI
- PatchCode
- PDF417
- Pharmacode
- PostNet
- PZN
- QRCode
- RoyalMail
- RoyalMailKIX
- TriopticCode39
- UPCA
- UPCE
- UPU
Dieses Attribut ist optional, der Standardwert ist 'All'. |
Rotate |
Optional, Default = 0 (0°).
Winkel in Grad [°], um den das Element gedreht werden muss, damit es horizontal von links nach rechst lesbar ist.
Die Winkel werden mit Komma getrennt erfasst.
Die Winkel steigen im Uhrzeigersinn von 0 bis 360° auf.
Negative Angaben sind erlaubt, diese werden automatisch in den entsprechenden positiven Winkel umgerechent, z.B- -20° = + 340°.
Die Drehung des Elements erfolgt nach der Drehung des Vollbildes (siehe Attribut Rotate von Tag ParserRule) und nach dem Ausschneiden des Elements gemäss den Attributen
y,x,h, w.
ACHTUNG: Jeder zusätzliche Winkel vervielfacht die Verarbeitungszeit zusätzlich!
Um fehlerhafte Lesungen von Barcode- und insbesondere UPOC-Elementen zu vermeiden ist es wichtig, dass die möglichen Winkel korrekt
definiert sind.
Die intern verwendete Barcode OCR-Engine unterstützt folgende diskreten Drehwinkel: 0°, 11°, 22°, 45°, 90°, 135°, 158°, 169°, 180°, 191°, 202°, 225°, 270°, 315°, 338°, 349°. Die
angegebenen Winkel werden auf den entsprechend nächstliegenden dieser Winkel auf/abgerundet.
Zusätzliche Winkelangaben sind dann zwingend notwendig, wenn die Verdrehung grösser ist als der Arcustangens (tan-1) des Verhältnisses von Strichhöhe zu Barcodelänge.
Bsp: Strichhöhe = 10 mm, Gesamtlänge = 50 mm. Damit: Arctan(10/50)=11,3°. Also: Wenn der Barcode um mehr als 11° verdreht sein kann muss der Wert 11 als Drehwinkel hinzugefügt werden.
|
PreProcess |
Optional, Vorverarbeitung des Bildes für Barcode OCR-Lesung, ist nur für den Type Barcode verfügbar! Standardwert: <leer> (keine Vorverarbeitung)
Folgende Vorverarbeitungen sind möglich:
- BRectS: Ausschneiden von kleinen genutzten Bereichen und einzelne Verarbeitung. Verbessert die Lesung von Barcodes und DataMatrix. Lange Verarbeitungsdauer.
- BRectM: Ausschneiden von mittleren genutzten Bereichen und einzelne Verarbeitung. Verbessert die Lesung von Barcodes und DataMatrix. Mittlere Verarbeitungsdauer.
- BRectL: Ausschneiden von grossen genutzten Bereichen und einzelne Verarbeitung. Verbessert die Lesung von Barcodes und DataMatrix. Kurze Verarbeitungsdauer. |
ValidValue |
RegEx-Ausdruck, welcher einen gültigen Wert des Elements definiert. Das Element hat nur dann einen gültigen Wert, wenn dieser gemäss dem RegEx-Ausdruck geprüft wurde. Ansonsten ist der Wert des Elements leer.
Nicht zu verwechseln mit 'RegEx' vom Kriterium.
Ist das Attribut 'ValidValue' nicht angegeben oder leer, so gelten folgende Default-Werte:
- Text: [0-9,a-z,A-Z]+
- Barcode: [0-9,a-z,A-Z]+
- UPOC: [0-9]+ |
InvalidValue |
RegEx-Ausdruck, welcher alle ungültigen Werte eines Elements definiert. Das Element darf keinen dieser ungültigen Werte enthalten, in diesem Fall ist das Element gültig. Wenn dieses Element erfasst ist, hat dieses Vorrang vor dem Element "ValidValue".
Ist das Attribut 'InvalidValue' nicht angegeben oder leer, so bleibt der Default-Wert leer und die Regel für 'ValidValue' ist aktiv. |
OCRMinConfidence |
Optional, Default = 0, nur für die Typen Text und PostalAddress verfügbar.
Das Attribut definiert, welche minimale Qualität (Confidence) der von der OCR-Erkennung erkannte Text für die weitere Verarbeitung
mindestens haben muss.
Gut erkannte Texte haben eine Confidence > 0, schlechte deutlich < 0 (z.B -280).
|
Prerequisite |
Dieses Attribut kommt nur bei der Digitalisierung zur
Anwendung. Es definiert, ob der Wert dieses Elementes
zwingend vorhanden sein muss, um die Digitalisierung
abzuschliessen. Wenn das Element nicht gefunden wird, muss
zwingend eine manuelle Nachbearbeitung oder Erfassung
erfolgen. |
SBB-CF |
Dieses Attribut kommt nur bei der Digitalisierung zur
Anwendung. Es definiert, in welchen Sendungs-Custfield der
ermittelte Wert des aktuellen Elementes gespeichert werden
soll. |
Criteria
Beschreibt die Kriterien die erfüllt sein müssen, dass diese ParserRule zum Tragen kommt. Falls die Kriterien nicht erfüllt sind, wird die nächste ParserRule verarbeitet.
Dies darf nicht mit 'ValidValue' des Elements verwechselt werden!
Attribut |
Beschreibung |
Name |
Name des Kriteriums |
Operation |
Gibt an, wie das Kriterium logisch verknüpft wird.
Mögliche Werte: 'AND', 'OR' |
ElementName |
Name des Elements, welches geprüft werden soll. |
RegEx |
RegEx-Ausdruck, welcher erfüllt sein muss.
Elemente vomn Typ PostalAddress unterstüzten KEINE Criterias, die Gültigkeit wird aufgrund interner Reglen bestimmt!
|
Postalische Adressen
Elemente vom Type PostalAddress werden wie folgt verarbeitet:
Die Attribute x, y, h, w sind optional. Wenn diese nicht angegeben sind (oder alle 0 sind) so wird das gesamte Bild auf Textblöcke untersucht.
Wenn die Attribute x, y, h, w definiert sind so wird nur der definierte Auschnitt verwendet (analog wie bei Element-Type "Text").
Die gefundenen Textblöcke werden nach bestimmten Kriterien sortiert und mit OCR und dem SortTree analysiert.
Die erste/beste erkannte Adresse wird ausgegeben.
Wenn als ValidValue KEIN Wert definiert ist so werden alle detektierten Adressblöcke als String zurückgegeben, es erfolt KEINE Analyse mit dem SortTree!
Spezifische Attribute für Element Type "PostalAddress"
Folgende Attribute können spezifisch für Elemente vom Type "PostalAddress" definiert werden:
Attribut |
Beschreibung |
ValidValue |
Folgende Pseudo-Regex (Default: <leer>) werden unterstützt:
- <leer> (Default)
- [AdrLevel_Country]
- [AdrLevel_City]
- [AdrLevel_Street]
- [AdrLevel_House]
- [AdrLevel_Name] |
CutLength |
Optional, Default = 0 (keine Ausschlusszone).
Definiert eine "Ausschlusszone" in [mm] für automatisch gefundene Textblöcke (x,y,h,w = 0) auf beiden langen Seiten des
Bildes. Detektierte Textblöcke, die diese Zone überlappen, werden ignoriert. |
CutWidth |
Optional, Default = 0 (keine Ausschlusszone).
Definiert eine "Ausschlusszone" in [mm] für automatisch gefundene Textblöcke (x,y,h,w = 0) auf beiden kurzen Seiten des
Bildes. Detektierte Textblöcke, die diese Zone überlappen, werden ignoriert. |
ValidateAddress |
Optional, Wertebereich: 0/1, Default: 0
Definiert wie die gefundenen Adressen gemäss ValidValue geprüft werden.
0: Die Prüfung erfolgt durch Zerlegung via Tokenizer und Test auf nicht leer (bis durch ValidValue
definierten Level)
1: Die Prüfung erfolgt gegenüber den Gebietsdaten der Bezirksverwaltung. Die Adresse muss bis mindenstes dem durch ValidValue
vorgegebenen Level gültig sein. |
Funktionsweise
Der ImageParser funktioniert wie folgt:
-
Das Bild wird mit dem entsprechenden Gerät (OCR-Station,
Dokumentenscanner, CxLetterScan usw.) aufgenommen.
-
Der ImageParser lädt die entsprechende XML-Konfigurationsdatei und
liest diese aus.
-
Das Bild wird gemäss der ersten ParserRule zerlegt. Dabei werden die
entsprechenden Elemente ausgeschnitten und entsprechend verarbeitet (z.B. OCR,
Barcode-Lesung usw.).
-
Anhand der gelesenen Daten werden die Kriterien ausgewertet.
Enthalten einzelne Elemente Rotationen, so werden diese der Reihe nach
verarbeitet, bis das Kriterium erfüllt ist oder keine weiteren Rotationen
vorhanden sind.
-
Sind alle Kriterien ausgewertet wird geprüft, ob alle gemäss den
Operationen gültig sind. Ist dies der Falls, so wird die Verarbeitung
abgebrochen und die gelesenen Werte zurückgegeben. Enthält die ParserRule
Rotationen, so werden die obenstehenden Schritte für jede Rotation durchgeführt,
bis alle Kriterien erfüllt sind oder keine Rotationen mehr vorhanden sind.
-
Erfüllt keine Variante die definirten Kriteren, so wird das Bild
analog mit der zweiten ParserRule verarbeitet.
-
Es können praktisch beliebig viele ParserRule definiert sein. Diese
werden gemäss Reihenfolge der XML-Konfigurationsdatei verarbeitet bis alle
Kriterien einer ParserRule erfüllt sind.
-
Erfüllt keine ParserRule die definierten Kriterien oder wird das Timeout erreicht, so wird die
Verarbeitung abgebrochen und leere Werte zurückgegeben. Der nachfolgende
Verarbeitungsschritt definiert das weitere Verfahren im Prozess.
Reihenfolge der Element Verarbeitung
Die Reihenfolge bei der Verarbeitung der Elemente ist wie folgt:
-
Alle Elemente, welche Bestandteil von Kriterien sind (von allen ParserRules, in der Reihenfolge der ParserRules im XML)
-
Alle Text-Elemente von allen ParserRules in der Reihenfolge der ParserRules im XML
-
Restliche Elemente aller ParserRules in der Reihenfolge der ParserRules im XML
Tipps für optimale Performance
-
Anzahl zu verarbeitende Varianten möglichst gering halten!
-
Nur die zwingend notwendigen Rotationen pro Parser-Rule (Attribut ParserRule.Rotate) definieren
-
Wenn nicht alle Elemente einer Parser-Rule eine Rotation benötigen dann Rotation auf Element (Attribut Element.Rotate) verwenden, anstatt Rotation auf Parser-Rule
-
Nur die wirklich benötigeten Criterias definieren
-
Text-Elemente: Position/Fläche des Element nicht grösser als notwendig definieren
-
Barcode/UPOC-Elemente: Position/Fläche des Element nicht grösser als notwendig definieren, Attribute BarcodeType und
PreProcess angeben
|