Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ss17:erkennung_gedruckter_geschrift_einen_kassenbon_lesen [2017/09/21 10:24] Jan_Philipps [Symbol-Finder] |
ss17:erkennung_gedruckter_geschrift_einen_kassenbon_lesen [2017/10/18 09:13] (aktuell) Jan_Philipps [Symbol-Finder] |
||
---|---|---|---|
Zeile 100: | Zeile 100: | ||
try: | try: | ||
- | os.mkdir(pPath) #Erstellt Speicherverzeichniss falls noch nicht vorhanden | + | os.mkdir(pPath) #Erstellt Speicherverzeichnis falls noch nicht vorhanden |
except: pass | except: pass | ||
Zeile 115: | Zeile 115: | ||
EndLine=True | EndLine=True | ||
- | Zeit2=time() #Beendet Zeitmessung. Auskommentiert weil meist sinnlos, aber manchmal doch ganz nett zu wissen. | + | #Zeit2=time() #Beendet Zeitmessung. Auskommentiert weil meist sinnlos, aber manchmal doch ganz nett zu wissen. |
#print "SymbolScanner-Time=", (Zeit2-Zeit1) #Gibt an, wie lange die ganze Suche gedauert hat. Auskommentiert weil meist sinnlos, aber manchmal doch ganz nett zu wissen. | #print "SymbolScanner-Time=", (Zeit2-Zeit1) #Gibt an, wie lange die ganze Suche gedauert hat. Auskommentiert weil meist sinnlos, aber manchmal doch ganz nett zu wissen. | ||
Zeile 229: | Zeile 229: | ||
while (cy>yMax) and (cx<b): #Schleife laeuft bis der Algorithmus an der oberen oder rechten Kante vom Bereich ankommt. | while (cy>yMax) and (cx<b): #Schleife laeuft bis der Algorithmus an der oberen oder rechten Kante vom Bereich ankommt. | ||
- | if img[cy,cx]<threshold: #Wenn der aktuell Pixel dunkel ist, werden die Koordinaten zurueckgegeben | + | if img[cy,cx]<threshold: #Wenn der aktuelle Pixel dunkel ist, werden die Koordinaten zurueckgegeben |
return cx,cy | return cx,cy | ||
cx=cx+1 #Geht eins nach rechts | cx=cx+1 #Geht eins nach rechts | ||
Zeile 241: | Zeile 241: | ||
while (cy>yMax) and (cx<b): #Schleife laeuft bis der Algorithmus an der oberen oder rechten Kante vom Bereich ankommt. | while (cy>yMax) and (cx<b): #Schleife laeuft bis der Algorithmus an der oberen oder rechten Kante vom Bereich ankommt. | ||
- | if img[cy,cx]<threshold: #Wenn der aktuell Pixel dunkel ist, werden die Koordinaten zurueckgegeben | + | if img[cy,cx]<threshold: #Wenn der aktuelle Pixel dunkel ist, werden die Koordinaten zurueckgegeben |
return cx,cy | return cx,cy | ||
cx=cx+1 #Geht eins nach rechts | cx=cx+1 #Geht eins nach rechts | ||
Zeile 492: | Zeile 492: | ||
== Artefakte == | == Artefakte == | ||
- | Flecken, Schatten, Druckfehler, Stempeln oder ähnliche Unreinheiten auf dem Papier sind teilweise dunkel genug um vom Programm als Symbol erkannt zu werden. Das kann dazu führen, dass Zeilen nicht richtig erkannt werden, in manchen Fällen hält das Programm dann zwei Zeilen für eine einzige. In solchen Fällen werden oft Buchstaben aus den beiden Zeilen nicht gefunden. Dieser Fall tritt aber nur bei relativ großen Artefakten ein, welche ziemlich selten sind, wenn man sich mit dem Foto etwas Mühe gibt. | + | Flecken, Schatten, Druckfehler, Stempel oder ähnliche Unreinheiten auf dem Papier sind teilweise dunkel genug um vom Programm als Symbol erkannt zu werden. Das kann dazu führen, dass Zeilen nicht richtig erkannt werden, in manchen Fällen hält das Programm dann zwei Zeilen für eine einzige. In solchen Fällen werden oft Buchstaben aus den beiden Zeilen nicht gefunden. Dieser Fall tritt aber nur bei relativ großen Artefakten ein, welche ziemlich selten sind, wenn man sich mit dem Foto etwas Mühe gibt. |
Kleinere Artefakte werden einfach als Symbole erkannt und an das neuronale Netzwerk übergeben, welches diese dann aussortieren soll. In diesem Teil des Programmes eine Lösung zu finden wäre zu aufwendig, vor allem da man mit einem neuronales Netzwerk ziemlich einfach erkennen kann, ob es sich um eine richtiges Symbol handelt oder nicht. | Kleinere Artefakte werden einfach als Symbole erkannt und an das neuronale Netzwerk übergeben, welches diese dann aussortieren soll. In diesem Teil des Programmes eine Lösung zu finden wäre zu aufwendig, vor allem da man mit einem neuronales Netzwerk ziemlich einfach erkennen kann, ob es sich um eine richtiges Symbol handelt oder nicht. | ||
==== Machine Learning ==== | ==== Machine Learning ==== |