Wie wähle ich zwischen Tesseract und OpenCV? [geschlossen]

93

Ich bin kürzlich auf Tesseract und OpenCV gestoßen . Es sieht so aus, als ob Tesseract eine vollwertige OCR-Engine ist und OpenCV als Framework zum Erstellen einer OCR-Anwendung / eines OCR-Dienstes verwendet werden kann.

Ich habe versucht, Tesseract für einige meiner Bilder zu verwenden, und die Genauigkeit scheint anständig zu sein. Später stieß ich auf ein sehr einfaches Tutorial zur Verwendung von OpenCV zur Durchführung von OCR mit Python und war beeindruckt. In wenigen Minuten war ich mit dem Training des Systems fertig und seine Genauigkeit war gut. Dieser Ansatz bedeutet natürlich, dass ich mein System mithilfe eines großen Trainingssatzes umfassend trainieren muss.

Meine spezifischen Fragen sind folgende:

  • Wie wählt man zwischen Tesseract und OpenCV, um eine benutzerdefinierte OCR-App zu erstellen?
  • Für Tesseract stehen Trainingsdatensätze für verschiedene Sprachen zur Verfügung. Hat OpenCV etwas Ähnliches, damit ich nicht von Grund auf neu anfangen muss, um OCR zu erreichen?
  • Welches ist besser für eine kommerzielle Anwendung?

Irgendwelche Vorschläge?

Legende
quelle
8
Die folgenden Antworten sind wirklich großartig, aber als einer, der mit OCR gearbeitet hat, kann ich Ihnen sagen, dass die Erkennungsqualität in Tesseract unter den Erwartungen eines kommerziellen App-Benutzers liegt. Tesseract ist großartig, aber OCR ist schwierig - Dinge wie Online-Training oder Verbesserungen im laufenden Betrieb sind hmmm ... noch Forschung. Google, der große Sponsor hinter TS in letzter Zeit, hat beschlossen, eine eigene Engine zu bauen - OCROpus. Und obwohl es versprochen hat, es zu öffnen, ist die Kernerkennungs-Engine noch nicht verfügbar - sie haben nur ein Framework veröffentlicht - das ist eine API für Tesseract.
Sam
3
@vasile: Das ist sehr informativ. OCROpus war mir nicht bekannt. Danke dir. Hätten Sie Vorschläge für Alternativen, wenn mein Endziel darin besteht, eine Visitenkarte OCR zu schreiben (oder eine, die Tankstellenbelege wie den von mir verlinkten liest: upload.wikimedia.org/wikipedia/en/3/34/… )? Ich frage, weil ich nur neugierig bin, was die zahlreichen mobilen Apps verwenden, um dies zu erreichen. Es macht mir nichts aus, die OCR auf der Serverseite durchzuführen. Ich war versucht, OpenCV zu verwenden, nachdem ich diese coole Demo gesehen hatte: youtube.com/watch?v=OkcOfS1lTxs
Legend
6
Es gibt eine Reihe von kommerziellen OCR-Engines, nur Google OCR accuracy testsund Sie finden einige Diagramme. Und wenn es um mobile Apps geht, verwenden die meisten von ihnen Tesseract. Wenn Sie sich jedoch die Mühe machen, einige davon herunterzuladen, werden Sie feststellen, dass die Ergebnisse etwas anders sind als die Versprechen. Normalerweise erstellen sie eine Videodemo in einer sorgfältig kontrollierten Umgebung und veröffentlichen sie auf Youtube. In freier Wildbahn erhalten Sie jedoch lustige Ergebnisse, wenn Sie eine Seite / ein Rezept / eine Karte / was auch immer scannen.
Sam
1
@vasile: Danke. Etwas, das mich für heute Nacht beschäftigt. Schätzen Sie wirklich Ihre Zeit.
Legende

Antworten:

77
  • Tesseract ist eine OCR-Engine. Es wird von Google speziell verwendet, bearbeitet und finanziert, um Text aus Bildern zu lesen, eine grundlegende Dokumentensegmentierung durchzuführen und bestimmte Bildeingaben (ein einzelnes Wort, eine Zeile, ein Absatz, eine Seite, begrenzte Wörterbücher usw.) zu bearbeiten.

  • OpenCV hingegen ist eine Computer-Vision-Bibliothek, die Funktionen enthält, mit denen Sie einige Funktionen extrahieren und Daten klassifizieren können. Sie können einen einfachen Buchstabensegmentierer und -klassifizierer erstellen, der eine grundlegende OCR ausführt, aber es ist keine sehr gute OCR-Engine (ich habe zuvor eine in Python erstellt. Sie ist wirklich ungenau für Eingaben, die von Ihren Trainingsdaten abweichen).

Wenn Sie ein grundlegendes Verständnis dafür erhalten möchten, wie schwierig OCR ist, versuchen Sie es mit OpenCV. Tesseract ist für echte OCR.

Mixer
quelle
3
Das hängt von Ihren Eingabebildern ab. Tesseract funktioniert am besten, wenn die Buchstaben scharf sind, in einer horizontalen Linie, im Abstand, nicht verbunden und perfekt schwarzweiß. Ich bastelte ungefähr ein Jahr lang in der DIY-Community zum Scannen / Aufbewahren von Büchern und arbeitete in meiner Freizeit an Software, um den Prozess zu vereinfachen. Die beste Software (kommerziell oder nicht) für die Nachbearbeitung von Bildern mit Text ist Scan Tailor . Es gibt einige CLI-Optionen, aber wenn Sie sich etwas Zeit nehmen, um zu sehen, wie es funktioniert, ist es ziemlich erstaunlich.
Blender
2
Ich habe ein wenig am Quellcode von Scan Tailor gearbeitet und OpenCV wird intern nicht verwendet, aber viele der erstellten Algorithmen können mit den Funktionen von OpenCV sehr einfach umgeschrieben werden. Wenn Ihre Bilder nicht verzogen und nicht beeinträchtigt sind, müssen Sie nur eine adaptive Binärisierung und ein einfaches Entflecken implementieren, bevor Sie Ihr Bild in Tesseract einspeisen.
Blender
1
In Bezug auf Ihre Frage habe ich gestern nur einige zufällige Eingabebilder getestet. Ich habe versucht, eine Quittung von einer Tankstelle zu erhalten: upload.wikimedia.org/wikipedia/en/3/34/… Es wurde die Quittung 0als 8(insgesamt 20,00 USD) erkannt . Ich gebe zu, dass diese Ziffer selbst für mich schwer zu entziffern war, aber ich war mir nicht sicher, was ich sonst noch tun kann, um Tesseract an diese Situationen anzupassen oder vielleicht eine Lernkomponente einzuführen, wenn ich eine aktive Benutzerbasis haben werde.
Legende
5
Tesseract ist für das Lesen bestimmter Schriftarten geschult. Diese Blockbuchstaben gehören nicht dazu. Sie müssen Google ein Tieropfer präsentieren und versuchen, Tesseract selbst zu trainieren: code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3
Blender
1
Erwarten Sie auch nicht, dass diese korrekt ist, bevor Sie eine benutzerdefinierte OCR-Engine zum Lesen dieser Buchstaben schreiben. Ich habe eines zur Automatisierung des Glücksrads geschrieben und die Beispielbilder (Screenshots eines Online-Spiels) waren JPEGs. Die Artefakte der JPEG-Komprimierung reichten aus, um den Bildklassifizierer zu vermasseln, es sei denn, ich lieferte etwa 10 bis 20 Beispielbilder für jedes einzelne Zeichen.
Blender
65

Ich bin der Autor des von Ihnen erwähnten Tutorials zur Ziffernerkennung, und ich würde sagen, das ist kein Ersatz für Tesseract.

Tesseract ist eine wirklich gute OCR-Engine, möglicherweise die beste OpenSource-OCR-Engine.

Das von Ihnen erwähnte Tutorial ist nur ein Versuch, die einfachste Arbeitsweise von OCR zu verstehen.

Wenn Sie also nach einer OCR-App suchen, würde ich Ihnen empfehlen, OpenCV für die Vorverarbeitung des Bildes zu verwenden und dann die Tesseract-Engine anzuwenden.

Abid Rahman K.
quelle
1
+1 Danke. Zunächst einmal vielen Dank für das Tutorial :) Es war eine wirklich interessante Lektüre. Kennen Sie Referenzen / Tutorials zur Verwendung von OpenCV zusammen mit Tesseract? Sie sprechen nicht über Schnittstellen, sondern über die Art der Bildtransformationen oder Vorverarbeitung, die durchgeführt werden müssen, um die Genauigkeit von Tesseract zu verbessern?
Legende
2
Ich möchte nur sagen, dass Tesseract zwar im Vergleich zu anderen eine gute OCR-Engine ist, aber immer noch ziemlich ungenau, aber ich hatte eine Erfolgsquote von etwa 40% bei der Erkennung des richtigen Textes. Hoffentlich wird es in ein paar Jahren besser.
GangstaGraham
4
@GangstaGraham Sie müssen nur Tesseract trainieren und können in wenigen Stunden oder Tagen, nicht in Jahren, bessere Ergebnisse erzielen. opensource.newmediaist.com/tesseract-training.html
valentt
1
Ich verwende PyTesseract für die Echtzeit-Textextraktion. Es funktioniert gut auf dem Linux-PC, ist aber in der Raspberry Pi-Umgebung sehr langsam ... Gibt es eine Möglichkeit, eine Lightweight-Version zu installieren? Zum Beispiel nur Ziffern und Großbuchstaben des englischen Alphabets verarbeiten?
Yuriy Chernyshov
9

Die beiden können sich ergänzen. Wenn Sie das Papier auf OpenCV lesen: https://github.com/tesseract-ocr/docs/blob/master/tesseracticdar2007.pdf

Es wird Folgendes hervorgehoben: "Da HP eine unabhängig entwickelte Technologie zur Analyse des Seitenlayouts hatte, die in Produkten verwendet wurde (und daher nicht für Open Source freigegeben wurde), benötigte Tesseract nie eine eigene Analyse des Seitenlayouts. Tesseract geht daher davon aus, dass die Eingabe ein Binärbild mit ist optionale polygonale Textbereiche definiert. "

Diese Art von Aufgabe kann von OpenCV ausgeführt und das resultierende Bild an Tesseract übergeben werden. Ein Beispiel für diesen Codetyp finden Sie im Git-Repo: https://github.com/Itseez/opencv_contrib/tree/master/modules/text/samples Die Beispiele verwenden Tesseract-APIs für die Konvertierung von Bild in Text.

user2957542
quelle
3

OpenCV ist eine Bibliothek für Lebensläufe , mit der Bilder im Allgemeinen analysiert und verarbeitet werden. Tesseract ist eine Bibliothek für OCR , eine spezielle Teilmenge des Lebenslaufs, die sich dem Extrahieren von Text aus Bildern widmet.

Von OpenCV.org

..... verwendet, um Gesichter zu erkennen und zu erkennen, Objekte zu identifizieren, menschliche Handlungen in Videos zu klassifizieren, Kamerabewegungen zu verfolgen, sich bewegende Objekte zu verfolgen, 3D-Modelle von Objekten zu extrahieren, 3D-Punktwolken von Stereokameras zu erzeugen, Bilder zusammenzufügen, um ein Hoch zu erzeugen Auflösungsbild einer ganzen Szene, ähnliche Bilder aus einer Bilddatenbank finden, rote Augen aus mit Blitz aufgenommenen Bildern entfernen, Augenbewegungen verfolgen, Landschaften erkennen und Markierungen erstellen, um sie mit Augmented Reality zu überlagern usw.

Von Tesseract Github :

..... kann direkt oder (für Programmierer) mithilfe einer API verwendet werden, um typisierten, handgeschriebenen oder gedruckten Text aus Bildern zu extrahieren. Es unterstützt eine Vielzahl von Sprachen.

Aniruddha Varma
quelle