Laden...

Eingescannte Rechnungen auf Unterschrift oder Stempel überprüfen

Erstellt von CHRRP vor 8 Jahren Letzter Beitrag vor 7 Jahren 3.212 Views
C
CHRRP Themenstarter:in
5 Beiträge seit 2015
vor 8 Jahren
Eingescannte Rechnungen auf Unterschrift oder Stempel überprüfen

Servus,

suche gerade nach einem robusten Verfahren um eingescannte Rechnungen automatisch auf vorhandene Signatur (Stempel und Unterschrift) zu überprüfen.
Mein erste Idee das ganze zu bewerkstelligen wäre eine Merkmalsextraktion über SIFT- bzw. SURF-Features, da diese ja Skalen- und Rotationsinvarianz gewährleisten. Anschließend die Features mittels SVM klassifizieren?
Bin ich auf dem richtigen Weg oder kann mir jemand einen besseren Ansatz raten?

Schonmal ein herzliches Dank,

CHRRP

W
196 Beiträge seit 2008
vor 8 Jahren

Nur mal so als Anregung vielleicht:

Wenn Du nur wissen musst, dass in einem definierten Bereich der sonst leer/einfarbig ist ETWAS enthalten ist, kannst Du auch einfach ermitteln ob eine ausreichende Menge Pixel im definierten Bereich sich deutlich vom Rest der Pixel unterscheidet (Farbe und/oder Kontrast/Helligkeit). Das wäre sicher deutlich einfacher zu realisieren...

16.830 Beiträge seit 2008
vor 8 Jahren

Eine robuste Erkennung wirst Du hier kaum mit eigenen Features implementieren können, wenn die Stempel und Unterschriften in Form, Farbe und Position vollkommen verschieden schein können.
Vermutlich wird das höchstens auf eine gewisse Wahrscheinlichkeit bei diesem Fall hinaus laufen.

Wenn das jedoch zB. innerhalb eines Freifelds ist, dann ist das schon eher machbar.

C
CHRRP Themenstarter:in
5 Beiträge seit 2015
vor 8 Jahren

Hey, danke für eure Antworten.

Das Problem ist, dass die Unterschrift sowohl auf, unter oder im Stempel sein kann.
Habe jetzt z.B. 8 verschiedene Beispiele als eine Art Template bzw. Trainingsmenge.
Kann ich die nicht als Wavelet oder ähnliches benutzen und auf Korrelation prüfen und den Wert mit irgendeinem Schwellwert abgleichen ? Muss nicht vollkommen robust sein.

Um sich das besser vorstellen zu können, hier ein Beispiel von Dr. Google :
edit : siehe Anhang

Bin für jede Idee offen 😃

Danke euch

C
CHRRP Themenstarter:in
5 Beiträge seit 2015
vor 8 Jahren

Ok, versuche jetzt mal nen simplen Ansatz. Beziehe mich nur auf den Ausschnitt mit Stempel und Unterschrift und binarisiere das Bild.

Idee : Sobald ich einen Kantenzug habe (8er Nachbarschaft) der größer ist als die Länge eines gedruckten Standardzeichen, liegt eine Signatur vor (evtl. noch morphologische Ops vorher)

Funktioniert das vllt mit einer Distanzmap die jeden Punkt meines Bildes die maximale Anzahl Nachbarn anzeigt ? Über Manhattan (City Block) Distanz könnte das doch funktionieren?

Nur wo finde ich Ansätze? Benutze u.a. die Emgu CV Bibliothek, falls da jemand spezielle Routinen kennt die mir weiterhelfen könnten 😃

Danke

T
708 Beiträge seit 2008
vor 8 Jahren

Hallo CHRRP,

habe das Bild gerade mal durch die Azure OCR API gejagt.
Der entsprechende Bereich produziert folgende Ausgabe:

[pre]. med. C.
ön
Musterst e 5

20

spieldorf
-10090[/pre]

Also die lesbaren Stellen des Stempels, die nicht durch die Unterschrift verdeckt wurden.

Glaube das wird echt schwierig, entweder Stempel oder Unterschrift würde ich noch als "relativ" simpel einschätzen, aber beides in Kombination, inkl. Überschneidung ist schon heftig.

C
CHRRP Themenstarter:in
5 Beiträge seit 2015
vor 8 Jahren

Danke für die Antwort trib,

wie gesagt ich versuchs jetzt erstmal heuristisch und werd mal sehen wie weit ich damit Erfolg habe.
Möchte die 8er Nachbarschaften sämtlicher Pixel prüfen, da die Symbole eines Standardstempels in ihrer Größe ja relativ fixiert sind. Möchte einfach den Vorteil ausnutzen, dass ich mein Bild binarisiert habe und eine Prüfung auf S/W relativ leicht fallen sollte.

Also wie gesagt, erster trivialer Ansatz -> Länge zusammenhängender Pixel ermitteln und mit Schwellwerten rumspielen

[Skizze siehe Anhang]

Gibt es sowas schon irgendwo optimiert im Web? Denke mal wenn ich das selber implementiere wirds nicht sonderlich effizient 😄
Mein Wunsch ist halt einfach eine Längenmatrix über die Bildkoordinaten ala
0 0 0 0 0 0 0
0 3 3 3 0 0 0
0 0 0 0 0 1 0
2 2 0 0 0 0 0

Hoffe ich habe mich verständlich ausgedrückt.

Danke!

P
1.090 Beiträge seit 2011
vor 8 Jahren

Ich gehe jetzt einfach mal, davon aus das du mindestens (mehr sind besser) einen Referenzwerte (Bild) hast und der Stempel immer "gleich" ist. Und die Unterschrift immer ein bisschen versetzt und anders ist.

Mein erster Schritt wäre hier zu versuchen den Stempel zu erkennen. Trip hat ja schon mal angezeigt was eine OCR Software da zurück gibt. Darüber könntest du mit einer Wiki:Unscharfen Suche schon mal den Passenden Stempel (Bildbild) finden.

Wenn du den Passenden Stempel hast, kannst du ihn Theoretisch aus dem Bild entfernen. So das nur teile der Unterschrift erhalten bleiben. Hier vielleicht mal schauen ob du mit Verschiedenen Graustufen und Substitution des „Standard“ Grauwertes des Stempels mehr von der Unterschrift bekommst.

Danach kannst du dann Schauen ob du die Unterschrift erkennst. Mit Google hab ich die Diplomarbeit dazu gefunden (Hab ich jetzt nicht gelesen).

[edit] Hab jetzt mal grob das Ergebniss der Arbeit durch gelesen. Da geht es nicht wirklich um Handschrift erkennung. Passt aber grob zu deiner Frage, deshalb hab ich den Link mal drin gelassen.
[/edit]

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

W
872 Beiträge seit 2005
vor 7 Jahren

Die Klassifizierung von Bildern ist ein klassisches Machine Learning Problem.
Im ersten Kapitel von "Machine Learning Projects for .NET developers" wird so ein Problem diskutiert. Da geht es sogar um Handschriften-Erkennung.
Die Azure Lösung wäre das computer vision api