Beleg erkennen und ausschneiden? (Shell script)

Hallo miteinander

Ich habe mir eine Software zur Büroautomation geschrieben.
Meine Software scannt Rechnungen ab Netzwerkscanner und archiviert diese als PDF wobei der reine Text als Blob in die Datenbank gespeichert wird (zum durchsuchen).

Geschrieben als HTML/ PHP/ Shell mit einem Web-Front-End.

Nun möchte ich den Einzahlungsschein erkennen können:

  1. Einzahlungsschein als separates Bild ausschneiden (TIF)
  2. Einzahlungsschein per OCR an bestimmten Positionen lesen

Der Einzahlungsschein kann an beliebiger Position auf einer A4 Seite sein. Hat aber eine definierte Grösse, Layout und Form.

Frage:
Hat sich vielleicht schon Mal jemand mit Mustererkennung per Shell Script auseinandergesetzt und kann mir ein paar Tips geben?
Wie erkenne ich den Einzahlungsschein zuverlässig?

Grüsse
Oliver

(ja, ich werde dann die Lösung hier posten)

Hallo,

jein.

Aus einem TIFF gemäß Vorgaben einen Teil erkennen, auszuschneiden und zu speichern habe ich schon mal gemacht. Ist so kompliziert nicht.

Die Musterkennung - vielleicht habe ich dich ja nur falsch verstanden - erfolgt nicht durch das Shell-Script, dort wurde nur das entsprechende Programm aufgerufen.

Dann kann die OCR folgen und die daraus resultierende Text-Datei wieder nach bestimmten Patterns,/Positionen durchsucht werden.

Bei mir sah es so aus:

Vorlage > Scannen > TIFF > speichern > Öffnen > Bearbeitung durch externes Programm (ausschneiden) > speichern > öffnen > OCR (lesen) > speichern > Text suchen etc. > Weiterverarbeitung.

Zur „Bildbearbeitung“ habe ich „Processing“

http://de.wikipedia.org/wiki/Processing

eingesetzt, zur Textanalyse und Bearbeitung AWK

http://de.wikipedia.org/wiki/Awk

mfg

tf

Aus einem TIFF gemäß Vorgaben einen Teil erkennen,
auszuschneiden und zu speichern habe ich schon mal gemacht.
Ist so kompliziert nicht.

Ja, genau das möchte ich machen.
Kannst Du mir Deinen Script zur Verfügung stellen?

Die Musterkennung - vielleicht habe ich dich ja nur falsch
verstanden - erfolgt nicht durch das Shell-Script, dort wurde
nur das entsprechende Programm aufgerufen.

Ja, so ist das natürlich gedacht.

Dann kann die OCR folgen und die daraus resultierende
Text-Datei wieder nach bestimmten Patterns,/Positionen
durchsucht werden.

Bei mir sah es so aus:

Vorlage > Scannen > TIFF > speichern > Öffnen > Bearbeitung
durch externes Programm (ausschneiden) > speichern > öffnen >
OCR (lesen) > speichern > Text suchen etc. >
Weiterverarbeitung.

Bei mir ist das ähnlich
PHP Aufruf -> scannen -> VorBearbeitung -> OCR Trennseite erkennen -> [A] -> in PDF -> Dokumentenarchiv

Neu möchte ich halt bei [A] den Einzahlungsschein erkennen -> Verarbeiten -> Archivieren

Zur „Bildbearbeitung“ habe ich „Processing“
http://de.wikipedia.org/wiki/Processing

Ich guck mir die Doku gerne durch. Auf den ersten Blick finde ich es etwas „oversized“. Aber eben, ich gucks noch durch.
Das was ich möchte, sollte eigentlich auch mit z.B ImageMagick möglich sein.

mfg

tf

Danke für die Infos.
Ich lese mich da mal ein.

Grüsse
Oliver

Hallo Oliver,

schicke mir doch mal ein TIFF mt einem Einzahlungsbeleg als Muster, also so, wie das eingescante Dokument bei dir vorliegen würde.

Dann versuche ich mich mal dran. Bei Erfolg darfst du das Ganze natürlich nutzen.

mfg

tf

Hi Thomas

Das ist aber sehr nett! Obwohl mein Skript-Stolz etwas beleidigt wird :smile: Ich habe dir eine persönliche Nachricht geschickt mit E-Mail usw.

mfg

Hallo Oliver,

erhalten und beantwortet.

mfg

tf

Hi Thomas

Danke für Deine Unterstützung soweit.
Mir ist eingefallen, dass es ja genügend Beispiele im Internet gibt.

Ich habe hier deshalb ein paar Beispiele gesammelt:

Allen gemeinsam ist die Farbe und die Form. Boxen, Rahmen und Schnittmarken sind nicht immer vorhanden. Hingegen sollten die Positionen der DatenFelder in etwa gleich sein.
Eine A4 Seite kann mehrere Einzahlungsscheine enthalten und die Position auf dem A4 ist beliebig.

Falls ich Dir dann später noch eine gescannte Datei von mir senden darf, mach ich das gerne.

Grüsse
Oliver

Hallo,

ich werde einen Blick drauf werfen. Schicke mir bitte trotzdem die Datei.

Ich melde mich dann.

mfg

tf

Ich habs gelöst mit ImageMagick

compare A4-mit-rechnung.tif RechnungVorlage.tif info:-

Gibt in etwa so etwas zurück:

A4-mit-rechnung.tif[0] TIFF 512x702 512x702+12+451 8-bit DirectClass 0.030u 0:00.019
A4-mit-rechnung.tif[1] TIFF 13x457 13x457+0+0 8-bit DirectClass 87.090u 0:53.280

512x702+12+451 bezeichnet die Koordinaten der Fläche der erkannten Fläche bzw dessen Negativ => Höhe x Breite + offset y + offset x.

Mit diesen Koordinaten kann man nun den PaymentSlip ausschneiden.

Danke für die Unterstützung.

Oliver

1 Like