Zahlen aus einem Bild auslesen

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

Midimaster

BeitragSo, Dez 20, 2009 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
@cyderic

was im Ergebnis dieser Scanning-Aktionen herauskommt, muss nicht mehr wie eine "4" aussehen. Hauptsache der Computer unterscheidet das Ding von allen anderen Ziffern und bringt es mit dem genauso hässlichen 4er aus seiner Vergleichsdatenbank in Bezug.

Trenn Dich von der Vorstellung, diese "Ziffer-Bilder" müssten auch noch für Menschen lesebar bleiben.

Mach doch bitte mal die Arbeit und erstelle durch den aktuelle Code in Verbindung mit GRABIMAGE() ein Bild pro Ziffer, also 12 Bilder mit allen 10 Ziffern und einem Punkt und einem Prozent-Zeichen. Wichtig: Die Ziffern nicht "von Hand" erstellen, sondern das was aus unserem Schwarz/Weiss-Werkzeug rauskommt nehmen.
 

Cyderic

BeitragSo, Dez 20, 2009 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist mir klar Midimeister^^ Aber wenn du siehst was aus den 4ern passiert..das sind einfach nur noch ein haufen Striche, das könnte doch Probleme geben bei der Erkennung. Mit 2 haben wir immer klare weiße balken mit der Ziffer drin.

Zu den Bildern. Ich würde einfach alle Zahlen und den Punkt dann mit nem Grafikprogramm exakt ausschneiden.

@ Badudel
Das war ja ansich auch mein Denkansatz, aber die Schriftart verschiebt sich ja. Eine 1 braucht weniger Platz neben einer 3, als eine 4 usw. Dan müsste man so ein Bild um jeden Pixel verschieben und dann überprüfen. Ich denke so wie ich es grad mit Midimaster vor hab, kommen wir zu einem Ergebnis Smile
Native ITler

Holzchopf

Meisterpacker

BeitragSo, Dez 20, 2009 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du Ziffer für Ziffer ausliest, ist es ja egal, dass alle Zeichen unterschiedlich breit sind. Wenn du das erste Zeichen als 1 entzifferst, weisst du auch, wie viele Pixel später die nächste Ziffer anfängt. Im übrigen hat DerHase schon den besten Lösungsvorschlag zum erkennen der einzelnen Zeichen geliefert.

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

Cyderic

BeitragSo, Dez 20, 2009 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
DIe Idee vom hase habe ich auch schon im Kopf gehabt..aber einen richtigen Plan habe ich da noch nicht. Mal sehen ob ich das hinbekomme.

Hier trotzdem mal die exakten Bilder der Zahlen (Prozent und . ist egal, die rechte Seite kann ich ausrechnen)

http://feuco.de/zahlen.zip
Native ITler

Midimaster

BeitragSo, Dez 20, 2009 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Mensch, das sieht doch schon ganz gut aus mit den Prototypen...

Haste schon was zum Vergleichen geschrieben? Du gehts pro gefundener Zifferstelle den Vergleich mit jedem Prototypen für alle pixel durch:

Falls (Color bei X,Y in ZuErforschendesBild) = (Color bei X,Y in Bild "1")
dann gibts einen Pluspunkt

so kriegst Du für jeden Prototyp eine bestimmte Anzahl an PlusPunkten. Der mit den meisten ist Sieger.


Kommen überall zu wenig Punkte heraus so lohnt sich ein Vergleich mit

Falls (Color bei X+1,Y in ZuErforschendesBild) = (Color bei X,Y in Bild "1")
dann gibts einen Pluspunkt


oder

Falls (Color bei X+1,Y in ZuErforschendesBild) = (Color bei X+1,Y in Bild "1")
dann gibts einen Pluspunkt

Badudel

BeitragSo, Dez 20, 2009 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, ich habs einfach mal realisiert...

Es wird nur gelber Text unterstützt, blau ist halt eine andere farbe und gleich noch eine andere Größe, das kannst du dann selbst machen Wink
Wichtig: Wenn man mit BB Jpgs importiert, so gibt es einen Qualitätsverlust (nein, ich wusste das selbst auch nicht davor...), deswegen muss man es mit einer Bmp machen.

Ihr braucht also noch die bmp-Datei (unter https://www.blitzforum.de/upload/file.php?id=7614; heißt im code data.bmp)

und die Font-Datei (unter https://www.blitzforum.de/upload/file.php?id=7613, heißt im code font.bmp).

Jah, es fehlt die 4, das liegt daran, dass es im data-bild gar keine 4 gab.
Der Font hat alle Antialiastöne herausgeschnitten, deswegen sieht es so abgefressen aus.

Hier ist also noch der Code:

BlitzBasic: [AUSKLAPPEN]
Const toleranz=20;toleranzbereich der farben - er ist etwa zwischen 15 und 30
Global font=LoadAnimImage("font.bmp",8,13,0,10);hier habe ich den gelben font ohne antialistöne gespeichert
MaskImage font, 255,0,255
Global dat=LoadImage("data.bmp");unbedingt bmp nehmen, mit jpg gehts fast gar nicht
Dim img(8,13);hier lese ich das zu behandelnde zeichen später ein

txt$="Stärke: "

For x=104 To 170 Step 10;hier stehen die stärkepunkte. der step ist bei dem gelben font immer 10.
character=GetChar(x,5)
If character<>-1 txt=txt+character;-1 wird zurückgegeben, wenn er nichts findet. ansonsten addiern
;wir den wert schön immer an die nächste stelle.
Next

txt=txt+", Verteidigung: "

For x=361 To 400 Step 10;verteidigung
character=GetChar(x,5)
If character<>-1 txt=txt+character
Next

Print txt
WaitKey
End






Function GetChar(x,y)

ziffer=CreateImage(8,13)
CopyRect x,y,8,13,0,0,ImageBuffer(dat),ImageBuffer(ziffer);zeichen in bild ziffer extrahieren

sicher=CopyImage(ziffer);kopieren, damit ich immer wieder auf das ursprungsbild zurück komme

SetBuffer ImageBuffer(ziffer)
LockBuffer ImageBuffer(ziffer)

For y=0 To 13
For x=0 To 8
img(x,y)=ReadPixelFast(x,y);die ziffer ins dim-feld einlesen
Next
Next

SetBuffer ImageBuffer(ziffer)

For frame=0 To 9;brute force ^^ (wir nehmen einfach jedes zeichen und fummeln es drauf)
DrawImage sicher,0,0;auf das ursprungsbild zurücksetzen

UnlockBuffer ImageBuffer(ziffer)
DrawImage font,0,0,frame;wir fummeln das zeichen drauf



For y=0 To 13;wir gehen das gesamte bild durch, wenns nötig ist
For x=0 To 8
save=img(x,y);rgb-wert des eingelesenen bildes
reed=ReadPixelFast(x,y,ImageBuffer(ziffer));read ist ein befehl, also heists jetzt reed... wir lesen das bild mit
;draufgefummelten buchstaben ein

r1=(reed And $FF0000)/$10000;farbanteile des neuen bilds berechnen
g1=(reed And $FF00)/$100
b1=reed And $FF

r2=(save And $FF0000)/$10000;farbanteile des ursprungsbildes berechnen
g2=(save And $FF00)/$100
b2=save And $FF

rgb1=r1+g1+b1;wir addieren die rgb-werte. damit ist der toleranzbereich viel einfacher zu realisieren.
;der toleranzbereich ist für alle drei farben auf einmal definiert, insgesamt dürfen die farben um
;die konstante toleranz (oben) abweichen.
rgb2=r2+g2+b2
If rgb2-rgb1<>0;wenn sich die farbwerte des ursprünglichen und des neuen bildes unterscheiden
If (rgb2-rgb1>toleranz And rgb2-rgb1>0) Or (rgb1-rgb2>toleranz And rgb1-rgb2>0);und der unterschied außerhalb des
;toleranzbereiches liegt,
nicht=1;dann ist es nicht die ziffer, die wir ausprobiert haben.
Exit;wir verlassen also die x-schleife
EndIf
EndIf

Next
If nicht=1 Then Exit;wenn es nicht übereinstimmt gehen wir auch aus der y-schleife
Next
If nicht=0;wenn es nicht nicht richtig war (-> es hat übereingestimmt), so ist unser ergebnis diesderzeitige
;framenummer
Exit;verlassen wir also die brute-force-schleife
EndIf

If nicht=1 Then nicht=0;wenn wirs nicht gefunden haben, wird der wert wieder resettet und die brute-force-schleife
;macht weiter

Next
If frame=10 Then frame=-1;frame 10 kommt raus, wenn es keine übereinstimmung gab. setzen wir der übersichtlichkeit
;halber -1...
Return frame
End Function


Ich hoffe, meine Anmerkungen sind einigermaßen verständlich...
Wir werden dem Schwein schon schlachten, auch wenn ihm quiekt.
Zum Teufel mit das Grammatik!
 

Cyderic

BeitragSo, Dez 20, 2009 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Uff..da warst du ja einiges schneller als ich mit dem Code. Ich bin eigentlich noch dabei meinen eigenen zu debuggen Embarassed

PS.
Ich geh jetzt erstmal schlafen. Vielen vielen Dank für eure Mühen. Mal schauenw as ich damit noch hin bekomme Smile
Native ITler

Plasma

Betreff: ähm ...

BeitragMo, Dez 21, 2009 1:36
Antworten mit Zitat
Benutzer-Profile anzeigen
falls es hilft
brucey hat für bmax ein modul welches schrifterkennung aus bildern ermöglicht.
müsstest das image bloss vorher irgendwie ummodeln so das nur die chars stehen bleiben dann als s/w abspeichern
und durchs ocr jagen


bah.tesseract gugst du


oller bot Shocked

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group