Seite 1 von 1

Zahlen in Bildern erkennen

Verfasst: Samstag 1. Oktober 2011, 14:18
von waki
Hey,
wird der Name des Threads schon sagt, würd ich gerne aus einem Bild eine Zahl auslesen können. Hab auch schon gegoogelt, aber keine wirklich guten ergebnisse bekommen. Habe gelesen, dass es mit OpenCV möglich ist, weis aber nicht wie das gehen soll. Habt ihr schonmal soetwas gemacht und wüsstet wie man das umsetzten könnte?

Bild
Ein kleines Beispielbild der Zahl


gruß

Re: Zahlen in Bildern erkennen

Verfasst: Samstag 1. Oktober 2011, 14:34
von Hyperion
Ich kann Dir nur den Tipp geben, dass Du nach "OCR" suchen musst; vielleicht liefert das zusammen mit OpenCV Ergebnisse, die Dich weiterbringen.

Re: Zahlen in Bildern erkennen

Verfasst: Samstag 1. Oktober 2011, 14:44
von deets
Um das wirklich abschaetzen zu koennen, musst du schon etwas mehr verraten - steht die Zahl immer an derselben Stelle im Bild, ist der Hintergrund verschieden, usw.

Re: Zahlen in Bildern erkennen

Verfasst: Samstag 1. Oktober 2011, 15:05
von waki
Zahlen haben einen ähnlichen Hintergrund, aber nicht genau identisch. Die grau und schwarztöne können ein wenig unterschiedlich sein. Und die Zahlen sind auch nicht immer an der gleichen Position. Sie sind dafür jedoch alle immer gleich groß.

Re: Zahlen in Bildern erkennen

Verfasst: Samstag 1. Oktober 2011, 22:45
von Boa
Vielleicht hilft dir das hier weiter: http://code.google.com/p/ocropus/wiki/LibraryReference

Re: Zahlen in Bildern erkennen

Verfasst: Sonntag 2. Oktober 2011, 17:55
von Dobi
OpenCV hat (noch) kein OCR-Modul dabei. Tesseract ist ziemlich gut. Du kannst damit ja erstmal etwas über die Kommandozeile herumprobieren und wenns funktioniert (oder direkt) nach pytesser suchen.

Re: Zahlen in Bildern erkennen

Verfasst: Sonntag 2. Oktober 2011, 20:21
von noisefloor
Hallo,

Bots, die automatisch Captchas "lesen" können, sollten sowas können. Wobei diese Anwendung natürlich fragwürdig ist.

Oder willst du so einen Bot schreiben? ;-)

Gruß, noisefloir

Re: Zahlen in Bildern erkennen

Verfasst: Montag 3. Oktober 2011, 18:33
von think

Re: Zahlen in Bildern erkennen

Verfasst: Montag 3. Oktober 2011, 20:55
von waki
Nein, schreibe gerade ein Bot für ein Browsergame, der jedoch nicht die seite selber öffnet, sondern über den browser aggiert, indem er immer screenshots macht und bestimmte sachen erkennt, und darauf reagiert. Und nun sollte es eben möglich sein bestimmte Zahlen auslesen können. Pytesser hab ich schon probiert und hat nicht funktioniert, irgendwelche Probleme im subprocess- Libary wurden gemeldet, pytesseract probiere ich jetzt einmal.

Re: Zahlen in Bildern erkennen

Verfasst: Montag 3. Oktober 2011, 23:59
von deets
Das hoert sich ziemlich falsch an. Sich mit so komplexen Themen wie Bilderkennung auseinanderzusetzen, nur weil man HTTP-Requests basteln will, ist IMHO der voellig falsche Weg.

Im einfachsten Fall kannst du mit "simplen" Bibliotheken wie mechanize oder gar urllib auskommen. Oder du schreibst einen HTTP-Proxy, der eigene Events einstreut. Oder du automatisierst einen Browser wie Qt Webkit.

Aber Bilderkennung waere das allerletzte auf meiner Liste. Und eigentlich auch nicht wirklich wert, verfolgt zu werden - in der Zeit, in der du das gelernt & programmiert hast, verdienst du so viel Geld, dass du dir einfach kaufen kannst, was auch immer du in dem Browsergame haben willst...;)

Re: Zahlen in Bildern erkennen

Verfasst: Dienstag 4. Oktober 2011, 13:25
von waki
Aber das Bot-Programm finde ich ganz interessant, weil ich damit nicht nur ein Browsergame automatisieren kann, sondern eigentlich alles am Pc. Und meine Bilderkennung läuft ganz einfach, dass ich zuvor einen screenshots mache und den in alle möglichen Teile slice und den Bot dann danach auf dem aktuellen Screenshot suchen lasse. Und nun wäre es eben noch ganz hilfreich, Zahlen/Text auslesen zu können :)

Re: Zahlen in Bildern erkennen

Verfasst: Dienstag 4. Oktober 2011, 14:36
von waki
ok, habe jetzt das Problem bei pytesser gefunden, habe es einfach in meine Lib ordner gepackt und ne __init__.py dazugehauen mit dem import von pytesser. Doch leider ist die Lib schlecht geschrieben und funktioniert nicht als import. Habe gerade etwas rumprobiert, es jedoch nicht gnaz hinbekommen. Kann mir einen helfen, dass Teil importfähig zu machen?

Code: Alles auswählen

tesseract_exe_name ='tesseract' # Name of executable to be called at command line
scratch_image_name = "temp.bmp" # This file must be .bmp or other Tesseract-compatible format
scratch_text_name_root = "temp" # Leave out the .txt extension
cleanup_scratch_flag = True  # Temporary files cleaned up after OCR operation

#########################################
def call_tesseract(input_filename, output_filename):
	"""Calls external tesseract.exe on input file (restrictions on types),
	outputting output_filename+'txt'"""
	args = [tesseract_exe_name, input_filename, output_filename]
	proc = subprocess.Popen(args)
	retcode = proc.wait()
	if retcode!=0:
		errors.check_for_errors()

#################################
def image_to_scratch(im, scratch_image_name):
	"""Saves image in memory to scratch file.  .bmp format will be read correctly by Tesseract"""
	im.save(scratch_image_name, dpi=(200,200))

Das sind ei Funktionien die man anpassen müsste. Ich habe es schon versucht, einfach den obrigen Variabeln den global PFad anzugeben, aber wollte auch nicht funktionieren. Hier Mal die Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Users\xxxxxxxxxx\python\xxxxxxxxxxxxxxx\pytest.py", line 8, in <module>
    print pytesser.image_to_string(im)
  File "C:\Program Files (x86)\Python\lib\pytesser\pytesser.py", line 31, in image_to_string
    call_tesseract(scratch_image_name, scratch_text_name_root)
  File "C:\Program Files (x86)\Python\lib\pytesser\pytesser.py", line 21, in call_tesseract
    proc = subprocess.Popen(args)
  File "C:\Program Files (x86)\Python\lib\subprocess.py", line 623, in __init__
    errread, errwrite)
  File "C:\Program Files (x86)\Python\lib\subprocess.py", line 833, in _execute_child
    startupinfo)
WindowsError: [Error 2] Das System kann die angegebene Datei nicht finden

Re: Zahlen in Bildern erkennen

Verfasst: Dienstag 4. Oktober 2011, 14:45
von Dav1d
pytesser ist nicht das Problem...zumindest funktioniert bei mir image_to_string fein. Hast du denn auch PIL installiert? (Imho ist dein "und ne __init__.py dazugehauen" der Fehler, aber wie gut, dass es eine aussagekräftige Fehlerbeschreibung gibt)

Re: Zahlen in Bildern erkennen

Verfasst: Dienstag 4. Oktober 2011, 14:49
von waki
die __init__.py sieht so aus:

Code: Alles auswählen

from pytesser import *
also das sollte funktionieren ^^ Wenn ich es so ausführe, also die pytesser.py funktioniert es bei mir auch, aber sobald ich es per import aus C:\Programme\Python\Lib aufrufe, habe ich diesen Fehler...

Re: Zahlen in Bildern erkennen

Verfasst: Mittwoch 5. Oktober 2011, 18:24
von Dav1d
Es tut mir leid, ich verstehe nicht was du tust, wo diese "magische" __init__.py liegt (welche man nicht braucht, erstrecht bei diesem Inhalt) und was der Pfad damit zu tun hat, meintest du evt. Lib/site-packages?