iOS Tesseract: schlechte Ergebnisse
Habe ich nur angefangen, um meine Hände schmutzig mit der Tesseract-Bibliothek, aber die Ergebnisse sind wirklich, wirklich schlecht.
Folgte ich den Anweisungen in dem Git-repository ( https://github.com/gali8/Tesseract-OCR-iOS ). Meine ViewController verwendet die folgende Methode, um beginnen zu erkennen:
Tesseract *t = [[Tesseract alloc] initWithLanguage:@"deu"];
t.delegate = self;
[t setVariableValue:@"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" forKey:@"tessedit_char_whitelist"];
[t setImage:img];
[t recognize];
NSLog( @"Recognized text: %@", [t recognizedText] );
labelRecognizedText.text = [t recognizedText];
t = nil;
Dem Beispiel-Bild aus dem Projekt tempalte
gut funktioniert (was mir sagt, dass das Projekt selbst ist richtig eingestellt), aber immer wenn ich versuche andere Bilder, die den erkannten text ist ein komplettes Chaos. Zum Beispiel, ich versuchte, ein Bild von meinem finder anzeigen die Beispiel-Bild:
https://dl.dropboxusercontent.com/u/607872/tesseract.jpg (1,5 MB)
Aber Tesseract erkennt:
Recognized text: s f l TO if v Ysssifss f
ssqxizg ss sfzzlj z
s N T IYIOGY Z I l EY s s
k Es ETL ZHE s UEY
z xhks Fsjs Es z VIII c
s I XFTZT c s h V Ijzs
L s sk sisijk J
s f s ssj Jss sssHss H VI
s s H
i s H st xzs
s s k 4 is x2 IV
Illlsiqss sssnsiisfjlisszxiij s
K
Sogar, wenn der Charakter whitelist enthält nur zahlen, die ich nicht ein Ergebnis erhalten, sogar in der Nähe, wie das Bild aussieht:
Recognized text: 3 74 211
1
1 1 1
3 53 379 1
3 1 33 5 3 2
3 9 73
1 61 2 2
3 1 6 5 212 7
1
4 9 4
1 17
111 11 1 1 11 1 1 1 1
Ich nehme an, es ist etwas falsch mit der Art und Weise fotos stammen aus der iPad mini Kamera, die ich derzeit benutze, aber ich kann nicht herausfinden, was und warum.
Irgendwelche Tipps?
Update #1
In Reaktion auf Tomas:
Ich folgte der Anleitung in deinem post stieß dabei aber auf einige Fehler entlang der Weise...
- die
UIImage+OpenCV
Kategorie nicht verwendet werden, in meiner ARC-Projekt - Kann ich nicht importieren
<opencv2/...>
in meinem Controller, auto-Vervollständigung nicht bieten (und daher[UIImage CVMat]
ist nicht definiert)
Ich glaube, es gibt etwas falsch mit meinem integration von OpenCV, obwohl ich folgte der Hallo-tutorial Hinzugefügt und den Rahmen. Bin ich verpflichtet zu bauen OpenCV auf meinem Mac so gut oder ist es ausreichend, nur sind die Rahmen in meinem Xcode Projekt?
Da ich nicht wirklich weiß, was Sie überlegen könnten, wie "wichtig" an diesem Punkt (ich habe schon gelesen einige Beiträge und tutorials und versucht, verschiedene Schritte), fühlen Sie sich frei zu Fragen 🙂
Update #2
@Tomas: danke, den ARC-Teil wesentlich war. Meine ViewController bereits umbenannt wurde, um .mm
. Vergessen Sie den Teil über "nicht importieren können, opencv2/" da ich bereits eingeschlossen in meinem TestApp-Prefix.pch
(wie es in der Hallo-tutorial).
Sich auf die nächste Herausforderung 😉
Bemerkte ich, dass wenn ich Bilder mit der Kamera aufgenommen, die Grenzen für die roi
Objekt nicht erfolgreich berechnet. Ich habe gespielt, um mit dem Gerät die Orientierung und setzen einen UIImage
aus meiner Sicht zu sehen, das Bild, die Verarbeitung der Schritte, aber manchmal (auch wenn das Bild richtig ausgerichtet ist), die Werte sind negativ, weil die if
-Bedingung in der bounds.size()
-for
-Schleife nicht erfüllt. Der Schlimmste Fall, den ich hatte: minX/Y und maxX/Y wurden nie berührt. Lange Geschichte kurz: die Zeile beginnend mit Mat roi = inranged(cv::Rect(
wirft eine Ausnahme (assertion ist fehlgeschlagen, weil die Werte waren < 0
). Ich weiß nicht, ob die Anzahl der Konturen Sache, aber ich nehme Sie so, weil die größer die Bilder, desto wahrscheinlicher ist die Geltendmachung Ausnahme ist.
Um ehrlich zu sein: ich hatte noch nicht die Zeit zum Lesen OpenCV-Dokumentation und zu verstehen, was dein code tut, aber nun, ich glaube nicht, dass es einen Weg gibt, um. Scheint so, leider für mich, meine erste Aufgabe (scan-Eingang, OCR ausführen, zeigen Sie Elemente in einer Tabelle) erfordert mehr Ressourcen (=Zeit), als ich dachte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nichts falsch in der Weise, die Sie um die Bilder vom iPad per se. Aber Sie können einfach nicht werfen in ein Komplexes Bild-und erwarten, dass Tesseract auf Magische Weise ermitteln, welcher text zu extrahieren. Nehmen Sie einen genaueren Blick auf das Bild und Sie werden feststellen, es hat keine einheitliche Blitz, es ist extrem laut, so dass es möglicherweise nicht das beste Beispiel zum starten der Wiedergabe mit.
In solchen Szenarien ist es zwingend notwendig, vorab das Bild, um den tesserakt Bibliothek mit etwas einfacher zu erkennen.
Unten finden Sie eine sehr naive Vorverarbeitung Beispiel, verwendet die OpenCV (http://www.opencv.org), ein beliebtes image processing framework. Es sollte Ihnen und Idee, um Sie zu erhalten begann.
Hinweise
UIImage+OpenCV
Kategorie finden hier. Wenn Sie unter ARC-check diese.Es ist das unterschiedliche Verhalten von tesseract Ergebnis.
Bei der Einnahme von Foto direkt von der Kamera versuchen unter Funktion.
Habe ich Schwierigkeiten mit Tesseract Zeichen der Anerkennung für Wochen. Hier sind zwei Dinge, die ich gelernt, es zu bekommen, besser zu arbeiten...
Wenn Sie wissen, welche schriftart, die Sie Lesen werden, klar, die Ausbildung und Umschulung von it-nur für die schriftart. Mehrere Schriftarten verlangsamt die OCR-Verarbeitung nach unten und erhöht auch die Mehrdeutigkeit in der Tesserakt Entscheidungsprozess. Dies führt zu einer größeren Genauigkeit und Geschwindigkeit.
Nach der OCR-Bearbeitung wirklich erforderlich ist. Sie werden am Ende mit einer matrix von Zeichen, die Tesseract erkennt. Sie müssen weiterhin die Zeichen zu verengen auf das, was Sie versuchen, zu Lesen. So zum Beispiel, wenn Ihre Anwendung ist, Lesen Etiketten von Lebensmitteln, die Kenntnis der Regeln für die Wörter und Sätze, aus denen sich die Lebensmittel-label hilft erkennen eine Reihe von Zeichen, aus denen das label.
Konvertieren Sie Ihre UIImage von srgb zu rgb-format .
wenn Sie mit IOS 5.0 und höher verwenden Sie
verwenden
#import <Accelerate/Accelerate.h>
sonst entfernen Sie die Kommentarzeichen //IOS 3.0-5.0
Den swift-äquivalent von @FARAZ Antwort