Zahlen in Bildern erkennen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

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ß
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich kann Dir nur den Tipp geben, dass Du nach "OCR" suchen musst; vielleicht liefert das zusammen mit OpenCV Ergebnisse, die Dich weiterbringen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
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.
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

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ß.
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

Vielleicht hilft dir das hier weiter: http://code.google.com/p/ocropus/wiki/LibraryReference
Benutzeravatar
Dobi
User
Beiträge: 31
Registriert: Mittwoch 28. September 2011, 17:04

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.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Benutzeravatar
think
User
Beiträge: 37
Registriert: Donnerstag 22. Februar 2007, 10:02
Wohnort: Schweiz

waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

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.
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...;)
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

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 :)
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

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
Zuletzt geändert von waki am Dienstag 4. Oktober 2011, 14:50, insgesamt 1-mal geändert.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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)
the more they change the more they stay the same
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

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...
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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?
the more they change the more they stay the same
Antworten