Bilderkennung in C

noreaga

noreaga

Eroberer
Tach beisammen!

Den Thread hier erstelle ich, um mir ein paar Vorschläge bzw. Anregungen zu holen, für ein Projekt, welches ich demnächst angehen will.
Es geht um folgendes:

Ich plane (wenns überhaupt umsetzbar ist) eine Bilderkennunssoftware zu schreiben, welche folgendes Leisten soll:

Die Software soll hochauflösende JPEG Grafiken einlesen können und auf dem Bild maximal 4 stellige Zahlen erkennen können. Der Bereich auf dem die Zahlen stehen ist meistens weiß (mit einer gewissen toleranz, je nach Lichtverhältnissen) hinterlegt und annährend rechteckig, bzw. perspektivisch verzerrt (je nach Winkel der Fotografie). Das Programm soll also eine Art "Schrifterkennung" darstellen.

Ich hätte mir jetzt mal folgende Lösung dafür vorgestellt:
- Bild in ein 2-dimensionales Array pixelweise einlesen und mithilfe geeigneter Funktionen den weißen rechteckigen Bereich erkennen (wobei natürlich mit einer gewissen toleranz gearbeitet werden muss ... farbtechnisch sowie geometrisch)

- den zu erkennenden Bereich in ein Raster aufteilen und mit zuhilfenahme des winkels ausdem das foto entstanden ist (müsste sich aufgrund der perpektivischen Verzerrung berechnen lassen) irgendwie die Zahlen erkennen.

Bei den ominösen Rechtecken handelt es sich um Startnummern auf Fahrzeugen/Kleidungsstücken von diversen Sportveranstaltungen. Das Projekt wird natürlich etwas längerfristig angelegt. Das man damit warscheinlich keine 100% abdeckung hinbekommt ist mir klar, jedoch wär mir schon geholfen, wenn zumindest 50% erkannt werden. Große Probleme sehe ich was das erkennen der Rechtecke angeht, da die Bilder oft einen mehrfarbigen Hintergrund haben.

Meine Fragen an die Community hier wären nun folgende:
- denkt ihr das das überhaupt möglich ist ?
- hat jemand vorschläge für geeignete Libraries die man dafür verwenden könnte, bzw. kennt jemand software (opensource) die in der lage ist sowas zu meistern?

Für weitere konstruktive Vorschläge und Gedankengänge aller Art wär ich sehr dankbar!
 
Hi


Zu deiner Frage ob es möglich ist so ein Programm zu schreiben. Ja es ist möglich kann ja heut zu Tage jeder 0815 Bot im Internet der Gästebücher zu spammt.

Natürlich wird es nicht leicht einen Solchen Algorithmus zu schreiben. Da stellt sich die Frage wie viel Erfahrung du hast.

Leider kenne ich keine Library's die diesen Bereich abdecken. Solltest du des Englischen mächtig sein kannst du ja mal nach optical character recognition oder OCR suchen.

Oder du hast glück und die Technik hilft dir. Da zur Zeit immer Mehr Spam als Bild daher kommen könnte es sein das die großen Projekte wie zb Thunderbird und co einen Spammfilter entwerfen der erkennen kann ob ein Bild Spam enthält oder nicht. Den könnte man sich dann zu eigen nehmen....
(oder du hast Pech und sie finden einen anderen Weg...)

Du solltest dich auch fragen ob es wirklich sinvoll für dich ist mit JPG zu arbeiten da es ein komprimiertes Dateiformat ist. Und ob die Umwandlung in ein nicht komprimiertes Dateiformat die Arbeit nicht erleichtern würde.

mfg manhunt
 
Hi, da du ja in C mit Bildern arbeiten willst, würde ich OpenCV empfehlen. Ist eine wie ich finde sehr umfangreiche Bibliothek, die dir das arbeiten mit Bildern erleichtert, halt viele Basics hat. Du kannst damit beliebig Bilder hin- und herkopieren, konvertieren, und pixel auslesen. Dich werden aber mehr die eingebauten Funktion zur Mustererkennung interessieren. Einfach mal in dem, wie ich finde, gut geschriebenen HowTo was wühlen.

MfG
Alex
 
oh da hasst du dir ja was ausgesucht ... so ein projekt braucht mehr pflege als ein tamagotchi!

ich interessiere mich auch sehr für dieses thema leider ist alles was ich bis jetzt dazu gefunden habe nur für spezielle aufgaben geeignet und für meine probleme absolut unzureichend!
leider gehe ich davon aus das erst spinoff algorithmen vom quantencomputer einen entscheidenen durchbruch in der mustererkennung liefern!
 
hehe... na so viel zeit um noch auf quantenrechner zu warten hab ich jetzt leider nicht ;)
Die OpenCV Lib hab ich mir gestern abend schon mal reingezogen. Da hab ich auch ein interessantes Beispiel zur Erkennung von Rechtecken in Bildern gefunden, was mich auf ein paar gute Ideen gebracht hat. Leider kann ich vom JPEG Format nicht abweichen, da die zu bearbeitenden Dateien eben von einer Digi Cam kommen.

Ich hab gestern Nacht mal damit angefangen einen Prototypen in PHP (lol) in Verbindung mit der GD zu schreiben. Die Dateien (bzw. die entsprechenden Bereiche) lassen sich wunderbar auf eine binäre Matrix abbilden.
Werd mich jetzt mal damit beschäftigen Störungen zu entfernen und mich an die Rechteckserkennung machen.
Glücklicherweise hab ich schon nen relativ großen Datenvorrat an bereits bearbeiteten Fotos. Sprich ich kann von einigen tausend Bildern diese Muster erkennen lassen und später via Mengenoperationen nachsehen ob was da drauf passt. Wäre jetzt zumindest mal der erste Ansatz den ich verfolge ;)
 
Hi


Ich habe nie nie gesagt das du von JPG abspringen sollst ich habe lediglich gesagt das du vieleicht mit einem anderen Format arbeiten könntest. BZW die Bilder vor dem Bearbeiten umwandeln könntest. So könntest du deine Software leicht auf andere Formate umrüsten und müsstest deinen Algorithmus nicht umändern.(niemand weiß was die Zukunft bringt.)

Zum umwandeln gibt es allerdings schon genug librarys.

mfg manhunt
 
Ich bin ebenfalls der Meinung, das du nicht mit JPEG arbeiten solltest. Das du die Datein in dem Format vorliegen hast ist ja ok, aber kein Hindernis, sie dann doch vernünftig einzulesen. Da JPEG ein komprimierung ist, speichert der meiner Meinung nach nicht informationsen zu jedem Bildpunkt, sondern Informationswechsel von einem Punkt zum nächsten (erklären war nie meine Stärke) und gerade für Mustererkennung solltest du auf unkomprimierten Daten arbeiten. Aber OpenCV konvertiert glaub ich eh automatisch. Dann hast du ein drei kanäliges Bild RGB, das kann man das fein konvertieren in HSV. Davon ist der "H-Kanal" dann der Kontrast, sollte für deine Arbeit also der richtige sein.
 
Hallo,

das Thema interessiert mich auch - wie ist das Ergebnis dazu?


Grüße
 
Hi,

ich habe eine Diplomarbeit über dieses Thema geschrieben (inkl. Erkennungssoftware) ich, das ganze war 2 Jahre Arbeit! Für was brauchst du das Programm?

Lg Hazelnoot
 
Zurück
Oben