Metainformationen zur Seite
  •  

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
speedy:30_modules:ocr [2019/05/29 08:33] – [Halbautomatische Indizierung (Imaging)] speedyspeedy:30_modules:ocr [2020/12/29 12:24] (aktuell) – [OCR] admin
Zeile 1: Zeile 1:
 ====== OCR ====== ====== OCR ======
  
-In speedyPDM gibt es die Möglichkeit eine OCR Indizierung ein zu richten um z.B. Rechnungen oder Angebote automatisch in speedy ein zu pflegen. Um dieses Modul nutzen zu können muss eine Lizenzierung für dieses Modul vorhanden sein.+In speedyPDM gibt es die Möglichkeit eine OCR Indizierung einzurichten, um z.B. Rechnungen oder Angebote automatisch in speedy einzupflegen. Um dieses Modul nutzen zu können muss eine Lizenzierung für dieses Modul vorhanden sein.
 Es gibt 2 Möglichkeiten die OCR Funktionalität in speedy zu nutzen: Es gibt 2 Möglichkeiten die OCR Funktionalität in speedy zu nutzen:
  
Zeile 22: Zeile 22:
  
 ===== Regelwerk/Einrichtung ===== ===== Regelwerk/Einrichtung =====
-Die OCR Indizierung wird durch ein Regelwerk, dass in der Datenbank beschrieben ist durchgeführt. Dieses Regelwerk steht in der ocr_rules Tabelle. Das Regelwerk wird nach einander abgearbeitet, d.h. dass die erste ebene (pid = 0) danach die dazugehörige 2. Pid usw. abgearbeitet werden. Die pid ist immer die id nachdem diese Rule abgearbeitet werden soll. Die Pattern werden in Regex-Ausdrücken ausgelesen. Dies gibt einem die Möglichkeit viele verschiedene Fälle in Bezug auf Texterkennung abzudecken. Ein Tool zur Erstellung des Regex-Ausdruckes kann hier gefunden werden: https://regex101.com/. Zur Einrichtung einer Vorlage wird empfohlen dies im Imaging Modul zu machen und die Einstellung [ocr.deletefiles] zu nutzen um die txt Datei abzufangen und damit im Regex Editor die Pattern zu erstellen oder das Fenster mit dem OCR-Text anzeigen lassen. Um z.B. aus einer pdf-Datei einen Text zu extrahieren nutzen wir ein Tool namens Tesseract. Dieses Tool erzeugt aus Bilddateien einen Text den wir dann durch das Pattern indizieren können. Um ein besseres Ergebnis der Indizierung und der Trefferquote zu bekommen können verschiedene Einstellungen getroffen werden. Diese werden weiter hinten beschrieben. Um ein bestmögliches Ergebnis zu bekommen wird empfohlen immer den gleichen Scanner zu verwenden, da unterschiedliche Auflösungen, das Ergebnis verschlechtern können. Sollte ein Ausschnitt genommen werden ist es essenziell notwendig den gleichen Scanner zu benutzen! Die OCR-Indizierung steht im Imaging Modul und in der dwImportOcr.exe zur Verfügung. Die dwImportOcr.exe ist dafür da eine Automatische Erkennung in Verbindung mit der dwSpool zu nutzen. D.h. es können z.B. Angebote direkt in ein Verzeichnis gescannt werden und wenn die Erkennung Funktioniert werden die Dokumente automatisch in Speedy eingepflegt. Wenn hier Fehler passieren werden die Dateien die nicht geklappt haben in ein Unterverzeichnis Error verschoben.\\ \\+Die OCR Indizierung wird durch ein Regelwerk, dass in der Datenbank beschrieben ist durchgeführt. Dieses Regelwerk steht in der ocr_rules Tabelle. Das Regelwerk wird nach einander abgearbeitet, d.h. dass die erste ebene (pid = 0) danach die dazugehörige 2. Pid usw. abgearbeitet werden. Die pid ist immer die id nachdem diese Rule abgearbeitet werden soll. Die Pattern werden in Regex-Ausdrücken ausgelesen. Dies gibt einem die Möglichkeit viele verschiedene Fälle in Bezug auf Texterkennung abzudecken. Ein Tool zur Erstellung des Regex-Ausdruckes kann hier gefunden werden: https://regex101.com/. Zur Einrichtung einer Vorlage wird empfohlen dies im Imaging Modul zu machen und die Einstellung [ocr.deletefiles] zu nutzen um die txt Datei abzufangen und damit im Regex Editor die Pattern zu erstellen oder das Fenster mit dem OCR-Text anzeigen lassen. Um z.B. aus einer pdf-Datei einen Text zu extrahieren nutzen wir ein Tool namens Tesseract. Dieses Tool erzeugt aus Bilddateien einen Text den wir dann durch das Pattern indizieren können. Um ein besseres Ergebnis der Indizierung und der Trefferquote zu bekommen können verschiedene Einstellungen getroffen werden. Diese werden weiter hinten beschrieben. Um ein bestmögliches Ergebnis zu bekommen wird empfohlen immer den gleichen Scanner zu verwenden, da unterschiedliche Auflösungen, das Ergebnis verschlechtern können. Sollte ein Ausschnitt genommen werden ist es essenziell notwendig den gleichen Scanner zu benutzen! Die OCR-Indizierung steht im Imaging Modul und in der dwImportOcr.exe zur Verfügung. Die dwImportOcr.exe ist dafür da eine Automatische Erkennung in Verbindung mit der dwSpool zu nutzen. D.h. es können z.B. Angebote direkt in ein Verzeichnis gescannt werden und wenn die Erkennung Funktioniert werden die Dokumente automatisch in Speedy eingepflegt. Wenn ein Fehler auftritt wird diese Dateien in ein Unterverzeichnis Error verschoben.\\ \\
 Die ocr_rules Tabelle hat folgende Spalten: Die ocr_rules Tabelle hat folgende Spalten:
 ^Spalte^Beschreibung^ ^Spalte^Beschreibung^
Zeile 38: Zeile 38:
 |ocr_extscript|Momentan nicht verwendet| |ocr_extscript|Momentan nicht verwendet|
 |ocr_selectstate|Ein Select Statement, dass abgearbeitet wird:\\ \\  - wenn ocr_flag = 3: Dann wird ein Platzhalter in diesem Select Statement durch einen Wert der schon ermittelt wurde ausgetauscht. Dieser Platzhalter wird mit < > Signalisiert. Zum Beispiel <Ben1> \\ \\ - wenn ocr_flag = 1: Dann wird direkt das Ergebnis dieser Abfrage in die Eigenschaft geschrieben. \\ \\ Das Select Statement sollte folgendermaßen aussehen: <code MySql>SELECT [ocr_pattern], [ocr_matchindex], [ocr_propdefault], [ocr_pcontext]</code>| |ocr_selectstate|Ein Select Statement, dass abgearbeitet wird:\\ \\  - wenn ocr_flag = 3: Dann wird ein Platzhalter in diesem Select Statement durch einen Wert der schon ermittelt wurde ausgetauscht. Dieser Platzhalter wird mit < > Signalisiert. Zum Beispiel <Ben1> \\ \\ - wenn ocr_flag = 1: Dann wird direkt das Ergebnis dieser Abfrage in die Eigenschaft geschrieben. \\ \\ Das Select Statement sollte folgendermaßen aussehen: <code MySql>SELECT [ocr_pattern], [ocr_matchindex], [ocr_propdefault], [ocr_pcontext]</code>|
-|ocr_sector|Es kann ein Rechteck ausgeschnitten werden um z.B. ein besseres lese Ergebnis zu bekommen. \\ Beispiel: 322x201+536x314(Linkes oberes Eck + Rechtes unteres Eck)|+|ocr_sector|Es kann ein Rechteck ausgeschnitten werden um z.B. ein besseres lese Ergebnis zu bekommen. \\ Beispiel: {322,201,536,314} (Linkes oberes Eck + Rechtes unteres Eck) \\ Hinweis: Dazu das Setting **ocr.deletefiles** auf 0 setzen und im Temp Ordner die dazugehörige .png-Datei in Paint öffnen und die Koordinaten bestimmen.|
 |ocr_flag|gibt an, welcher Wert zu einer Eigenschaft genommen wird: \\ := 1: Wert der durch Regex oder SQL Abfrage ermittelt wurde wird genommen.  \\ := 2: Wert der in ocr_propdefault steht wird genommen.   \\ := 3: SQL Statement wird ein Platzhalter ersetzt.|\\ |ocr_flag|gibt an, welcher Wert zu einer Eigenschaft genommen wird: \\ := 1: Wert der durch Regex oder SQL Abfrage ermittelt wurde wird genommen.  \\ := 2: Wert der in ocr_propdefault steht wird genommen.   \\ := 3: SQL Statement wird ein Platzhalter ersetzt.|\\
 +
 +Beispiel eines Regelwerks für ein Angebot[1] dass die Angebotsnummer herausliest[2], in einer Angebots-Tabelle nach der Kundennummer sucht[3], ein Rechtecksauschnitt macht[4] und in diesem Ausschnitt dann das Angebotsdatum sucht[5].
 +\\
 +^ocr_id^ocr_pid^ocr_pcontext^ocr_index^ocr_rulename^ocr_ruledesc^ocr_pattern^ocr_matchindex^ocr_searchlevel^ocr_propname^ocr_propdefault^ocr_extscript^ocr_selectstate^ocr_sector^ocr_flag^
 +|1|0| |0|Angebot| |(Angebot:\s+)([\w]+)|0|-1|doc_doctype|Angebot| | | |2|
 +|2|1|MMH|0|Angebotsnummer| |(Angebot:\s+)([\w][0-9]+)|2|-1|dm_docno| | | | |1|
 +|3|1| |0|Kunde|Kunde aus Datenbank suchen| | |-1|kd_nr| | |select kd_name from angebot_db.angebot a inner join angebot_db.kunden k ON a.ang_kunde=k.kd_id where a.ang_nr='<BEN1>';| |3|
 +|4|2|MMH|0|Rechteck| | |3|-1|Rectangle| | | |{322,201,536,314}|1|
 +|5|4|MMH|0|Angebotsdatum| |(Datum:\s)([0-9]+.[0-9]+.[0-9]+)|2|-1|KOMMENTAR| | | | |1|
 \\ \\
 Creation Code der ocr_rules Tabelle: \\ Creation Code der ocr_rules Tabelle: \\
Zeile 76: Zeile 85:
 |ocr.color.colored|Gibt an ob die Indizierung Farbig oder Schwarz weiß stattfindet. \\ Default: 1 (Farbig)| |ocr.color.colored|Gibt an ob die Indizierung Farbig oder Schwarz weiß stattfindet. \\ Default: 1 (Farbig)|
 |ocr.deletefiles|Löscht die erzeugten Dateien im Temp Ordner. \\ Default: 1 (Löschen)| |ocr.deletefiles|Löscht die erzeugten Dateien im Temp Ordner. \\ Default: 1 (Löschen)|
 +|ocr.zoom| Zoomfaktor der beim Umwandeln von PDF in TIFF verwendet wird um ein besseres OCR Ergebnis zu erzielen. \\ Standardwert := 2.0|