Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Simples OCR Programm erstellen (Texterkennung) (https://www.delphipraxis.net/44783-simples-ocr-programm-erstellen-texterkennung.html)

endeffects 24. Apr 2005 16:58


Simples OCR Programm erstellen (Texterkennung)
 
Hallo,

ich möchte mir ein simples Texterkennungsprogramm selbst bauen,
vielmehr sollen lediglich einzelne Buchstaben oder Zahlen erkannt werden.

Bisher habe ich mein Programm schon soweit dazu bewegen können ein Bild
entsprechend zu konvertieren (Graustufen) und relevante Bereiche (Buchstaben)
auszuschneiden. Jetzt fehlt mir allerdings ein vernünftiger Ansatz
um die OCR Implementation umzusetzen.

Meine Überlegung war nun eine auf Textdateien basierende Datenbank anzulegen
die ich dann über TStringList laden und auswerten kann. Wobei jede Textdatei
für einen Buchstaben oder aber eine Zahl steht. Jede Textdatei enthält
60 Zeilen mit jeweils 60 Zeichen (Nullen und Einsen) um eine Grafik (Buchstaben)
von 60x60 Pixeln darzustellen.

Um eine Texterkennung durchzuführen würde ich die vorhandenen Stringlisten
aus der Datenbank mit der Stringliste der Grafik vergleichen und
die Anzahl der "Treffer" ermitteln. Vergleichen würde ich hier
allerdings die Datenbank mit der Grafik und nicht umgekehrt.

Was haltet Ihr davon, würdet Ihre eine anderen Ansatz wählen?

Mfg

jfheins 24. Apr 2005 17:13

Re: Simples OCR Programm erstellen (Texterkennung)
 
Ich würde vermutlich einen anderen Ansatz wählen, da dieser Binäre Vergleich zu unflexibel ist.
Wenn z.B. der Buchstabe kursiv ist, hast du auf einmal viel weniger Treffer, oder wenn er (z.B. wegen dieser Serifen) leicht versetzt ist ...

Ich würde versuchen, den Buchstaben in (Teilkreis-)Linien aufzuteilen, also Linie, Halbkreis, Kreis ... und dann über die Ähnlichkeit dieser Merkmale gehen. Wenn der Buchstabe plötzlich Kursiv ist, hast du "nur" eine Änderung der Neigung der Linien, und wenn er versetzt ist, macht das gar nichts. So würdest du ein R als eine senkrechte linie, einen Halbkreis und eine schräge Linie speichern. Das bringt neben dem Speicherplatzvorteil auch den Vorteil, dass die Buchstaben verschieden groß sein können.
Die Hauptarbeit wird hier auf jeden Fall, einen Algo zu entwickeln, der aus einem Bild diese Linien folgert.

Falls du deinen Ansatz nehmen möchtest, würde ich dir auf jeden Fall Raten, nicht die Nullen und Einsen zu speichern, sondern jedes Bit einzeln, dann brauchst du nur noch ein Achtel an Speicherplatz ...

endeffects 24. Apr 2005 17:41

Re: Simples OCR Programm erstellen (Texterkennung)
 
hmm das ist ein interessanter gedanke, vielleicht
sollte man das ganze noch weiter abstrahieren
und nur nach anfangs/endpunkten der Linien suchen
und deren Verteilung in einem Gitternetz analysieren


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz