Ich hatte gehofft, dass mir jemand sagen könnte, warum mein Tesseract Schwierigkeiten hat, Bilder mit Ziffern zu erkennen, und wenn ich etwas dagegen tun kann. Alles funktioniert nach dem Test, und da es nur Ziffern sind, die ich brauche, dachte ich, ich könnte mit dem englischen Muster fertig werden, bis ich auch mit dem 7segmentierten Display anfangen musste.
Obwohl ich eine Menge Probleme mit den angehängten Bildern habe, würde ich gerne wissen, ob ich anfangen sollte, an meinen eigenen Erkennungsalgorithmen zu arbeiten, oder ob ich meine eigenen Datensätze für Tesseract machen könnte und dann würde es funktionieren Wissen Sie, wo die Einschränkung bei Tesseract liegt?
Dinge versucht: versuchte psm auf one_line, one_word, one_char zu setzen (und das Bild zu zerhacken). Mit one_line und one_word gab es keine signifikante Änderung. mit one_char hat es ein bisschen besser erkannt, aber manchmal hat es wegen der großen Abstände eine extra Nummer angehängt, die es dann vermasselt hat, wenn man sich das angehängte Bild dann ergab sich 04. Ich habe auch versucht, die Binarisierung selbst durchzuführen, was zu einer schlechteren Erkennung führte und sehr restriktiv war. Ich habe versucht, die Bilder zu invertieren, das macht keinen Unterschied für Tesseract.
Ich habe unter anderem die Bilder angehängt, die ich verarbeiten muss.
Erklärung zu den Bildern:
ist ein Bild, das der Tesseract problemlos erkennen kann, obwohl es in Word für die Bequemlichkeit beim Erstellen einer App verwendet wurde um ein Arbeitsbild.
ist ein Bild aus dem echten Leben, das mit image_seven übereinstimmt. Aber es kann das nicht erkennen.
ist ein anderes Bild, das ich gerne erkennen würde, und ja, ich weiß, dass es nicht skrewed sein kann, und ich habe unskrew ( denke skrew ist der Begriff hier == "straighting") es beim Testen.
Ich kenne einige Optionen, die Ihnen helfen könnten:
font training
und image binarization
für tesseract. Denken Sie daran, dass die eingebaute Kamera in mobilen Geräten meist Bilder mit niedriger Qualität produziert (verwackelt, geräuschvoll, verzerrt usw.). OCR selbst ist ein ressourcenaufwändiger Prozess, und wenn Sie eine angemessene Bildvorverarbeitung zu diesem hinzufügen, Low-End und mittlere mobile Geräte (die wahrscheinlich Android haben) könnten mit einer unerwartet langsamen Leistung oder sogar einem Mangel an Ressourcen konfrontiert werden. Das ist in Ordnung für kostenlose / Studienprojekte, aber wenn Sie eine kommerzielle App planen, sollten Sie ein besseres SDK verwenden.
Sehen Sie sich diese Frage für Details an: OCR für Android
>Tesseract führt keine Segmentierung für Sie durch. Tesseract wird vor dem eigentlichen Tesseract-Algo eine Bildschwelle erstellen. Nach der Schwellenwertbildung kann es einige Kanten und Artefakte geben, die im Bild verbleiben.
Versuchen Sie, Ihre Bilder manuell in Schwarz-Weiß-Farben zu ändern, und sehen Sie, was tesseract als Ausgabe zurückgibt.
Versuchen Sie, Ihre Bilder automatisch zu schwenken und sehen Sie, was tesseract als Ausgabe zurückgibt. Die Ausgabe des Schwellenwerts kann zu schlecht sein, was dazu führt, dass der Tesseract schlechte Ergebnisse liefert.
Ihr 4. Bild wird wahrscheinlich aufgrund von Schwellwertbildung versagen (Sie haben 3 Farben: schwarzer Hintergrund, gräulicher Hintergrund und weiße Buchstaben) und die Schwelle kann zwischen (schwarzer Hintergrund, gräulicher Hintergrund) liegen.
Im Allgemeinen möchte Tesseract schöne Schwarz-Weiß-Bilder. Die Vorverarbeitung Ihrer Bilder kann für bessere Ergebnisse erforderlich sein.
Versuchen Sie für Ihr erstes Bild (mit dem Ergebnis "04") das Box-Ergebnis zu sehen (char + Koordinaten des Kastens, der das erkannte Zeichen enthält). Die "0" kann ein kleines Artefakt sein - wie ein 4 mal 4 Blob von Pixeln.
Sie können javaocr versuchen ( Ссылка , ja, ich bin Entwickler)
Therre ist jedoch keine Off-Social-Version, und Sie werden nach Quellen suchen müssen (gute Nachrichten: Es gibt eine funktionierende Android-Probe, einschließlich Sampler, Offline-Trainer und Erkennungsanwendung)
Wenn Sie nur eine Schriftart haben, können Sie ziemlich gute Ergebnisse damit erzielen (Ich erreichte Erkennungsraten von 99,96 an Ziffern der gleichen Schriftart)
PS: Es ist reines Java und verwendet invariante Momente, um eine Übereinstimmung zu erzielen (also keine Probleme mit Skalierung und Rotation). Es gibt auch eine ziemlich effektive Binarisierung.
Sehen Sie es in Aktion: