Ich versuche Tesseract zu trainieren, um Zahlen aus realen Bildern von Gaszählern zu erkennen.
Die Bilder, die ich für das Training verwende, werden mit einer Kamera gemacht. Aus diesem Grund gibt es viele Probleme: schlechte Bilderauflösung, verschwommene Bilder, schlechte Beleuchtung oder geringer Kontrast als Folge von Überbelichtung, Reflexionen, Schatten usw. .
Für das Training habe ich ein großes Bild mit einer Reihe von Ziffern erstellt, die von den Bildern des Gaszählers aufgenommen wurden, und ich habe die Dateibox manuell bearbeitet, um die .tr-Dateien zu erstellen. Das Ergebnis ist, dass nur die Ziffern der klareren und schärferen Bilder erkannt werden, während die Ziffern unscharfer Bilder nicht durch Tesseract erfasst werden.
Soweit ich das feststellen kann muss man bei OpenCV Box erkennen, in der sich Nummern befinden, aber OpenCV ist kein Gott für OCR. Nachdem Sie das Feld gefunden haben, schneiden Sie einfach das Teil, führen Sie die Bildverarbeitung durch und übergeben Sie es dann an tessearact für OCR.
Ich brauche Hilfe mit OpenCV, weil ich nicht weiß, wie man in OpenCV programmiert.
Hier sind einige Beispiele aus der realen Welt.
Ich würde zuerst diesen einfachen ImageMagick-Befehl versuchen:
%Vor% (Spielen Sie ein wenig mit dem Parameter 50%
- versuchen Sie es mit kleineren und höheren Werten ...)
Thresholding lässt grundsätzlich nur 2 Werte, Null oder Maximum, für jeden Farbkanal übrig. Werte unter dem Schwellenwert werden auf 0 gesetzt, Werte darüber auf 255 (oder 65535 bei 16-Bit-Tiefe).
Je nach Ihrem original.jpg haben Sie möglicherweise ein OCR-fähiges, funktionierendes Bild mit sehr hohem Kontrast.
Ich empfehle Ihnen:
Ich empfehle Ihnen, die Tesseract-API selbst zu verwenden, um das Bild zu verbessern (Denoise, Normalize, Sharpen ...).
Zum Beispiel: Boxa * tesseract::TessBaseAPI::GetConnectedComponents(Pixa** pixa)
(es ermöglicht Ihnen, zu den Begrenzungsrahmen jedes Zeichens zu gelangen)
Pix * pimg = tess_api- & gt; GetThresholdedImage ();
Hier finden Sie einige Beispiele
Tesseract ist ein ziemlich anständiges OCR-Paket, aber Bilder werden nicht ordnungsgemäß vorverarbeitet. Meine Erfahrung ist, dass Sie ein gutes OCR-Ergebnis erhalten können, wenn Sie nur eine Vorverarbeitung durchführen, bevor Sie es an tesseract weitergeben.
Es gibt ein paar wichtige Hinweise, die die Erkennung deutlich verbessern:
Wenn Sie wie Punkt 4 wissen, welche Schriftart verwendet wird, gibt es einige bessere Lösungen als die Verwendung von Tesseract wie die Übereinstimmung dieser Zeichensätze direkt mit den Bildern ... Der grundlegende Algorithmus besteht darin, die Ziffern zu finden und ihnen zu entsprechen alle möglichen Zeichen (die nur 10 sind) ... immer noch ist die Implementierung schwierig.