Genau lesen
OCR schlägt nicht sauber fehl. Ein Barcode wird dekodiert oder nicht; Text kommt immer mit etwas zurück, und eine Fehllesung sieht genauso aus wie ein korrektes Leseergebnis, bis jemand sie prüft.
Fünf Einstellungen entscheiden, ob man dem Ergebnis trauen kann. Ihre Bedeutung folgt ungefähr dieser Reihenfolge.
1. Auf den Text zuschneiden
input/crop ist hier die wirksamste Einstellung und die, die am häufigsten auf ihrem Standardwert
bleibt.
Ein volles 1920x1080-Bild mit einem 200x60-Etikett gibt der Engine enorm viel Hintergrund, in dem sie Text suchen kann - und sie findet welchen: Kanten des Teils, Schatten, das Förderband. Daraus werden Wörter mit niedriger Konfidenz, die das Leseergebnis auffüllen, und sie treiben die Layout-Analyse in Richtung "das ist eine komplizierte Seite", obwohl es eine Druckzeile ist.
Schneiden Sie eng um die Stelle zu, an der der Text stehen wird. Das ist schneller und beseitigt eine ganze Klasse falscher Antworten, statt sie nachträglich zu filtern.
|
Ein Ausschnitt, der nicht in das Bild passt, wird abgelehnt, nicht passend gekürzt. Eine stillschweigend verkleinerte Region würde sich viel später als Wörter zeigen, die einfach fehlen. |
2. Wenn Sie nicht zuschneiden können, die Farbkanäle zusammenführen
input/preprocess gibt es für einen einzigen Fehler, und der ist unangenehm: Ein Farbbild, in dem ein
Foto oder eine andere farbenfrohe Szene zusammen mit dem Text im Bild ist, kann ganz ohne Wörter
zurückkommen. Nicht verstümmelt - leer, während status-code Erfolg meldet. Das ist nicht von einem
Bild ohne Text zu unterscheiden; es sieht also nicht nach einer Einstellung aus, die man ändern
müsste, sondern danach, dass die Kamera auf das Falsche zeigt.
Gemessen an einem solchen Bild - eine Aufnahme mit 300x168 Pixeln, links ein Papageienfoto, rechts ein Titel auf einer dunklen Fläche:
preprocess |
Gelesen |
|---|---|
|
gar nichts |
|
|
|
|
Kein layout und keine engine rettet die erste Zeile - alle 24 Kombinationen der beiden liefern
nichts. Was die Engine scheitern lässt, ist die Art, wie sie ein Farb-Bild vor dem Lesen reduziert,
nicht die Größe des Textes: Dasselbe Bild, zu Grau reduziert, wird einwandfrei gelesen, ebenso das
Farbbild, auf die Fläche zugeschnitten.
|
Erst zuschneiden. Der Ausschnitt löst diesen Fall in Farbe, kostet nichts und hilft aus allen oben
genannten Gründen. Greifen Sie zu |
GRAYSCALE ist die richtige Wahl. BINARIZE_OTSU zwingt zusätzlich jedes Pixel auf Schwarz oder
Weiß und lohnt sich nur als Versuch, wenn GRAYSCALE nicht geholfen hat: Es verwirft die weichen
Kanten, aus denen die Engine Zeichenformen liest, und auf dem Bild oben liest es Title 01 The, wo
GRAYSCALE Title OF The liest.
|
Keine der Einstellungen erfindet Text. Auf einem Bild ohne Text - das Foto allein oder eine gleichmäßig graue Fläche - liefern alle drei Einstellungen nichts; das Einschalten kann also kein Leseergebnis herbeizaubern. |
3. Den Zeichensatz einschränken
input/characters/mode wählt einen Satz, allow fügt ihm Zeichen hinzu und deny entfernt welche.
Die klassischen OCR-Fehler sind alle Verwechslungen zwischen Zeichenklassen: O/0, I/1/l,
S/5, B/8, Z/2. Eine Teilenummer, die immer nur aus Ziffern besteht, kann mit
mode = DIGITS gelesen keine davon erzeugen. Das ist fast kostenlose Genauigkeit für eine einzige
Einstellung.
| Kennzeichnung | Einstellung |
|---|---|
Numerische Teile- oder Chargennummer |
|
Alphanumerischer Code in Großbuchstaben |
|
Datumscode mit Trennzeichen |
|
Alles mit festem Alphabet |
|
Freier Text, für Menschen lesbar |
|
|
Ein leerer Zeichensatz wird abgelehnt. |
4. Das Layout an das anpassen, was Sie betrachten
input/layout sagt der Engine, wie viel Struktur sie suchen soll. Der Standard ist SINGLE_BLOCK,
weil ein zugeschnittenes Etikett ein Textblock ist.
| Wert | Verwendung für |
|---|---|
|
Ein zugeschnittenes Etikett - der Standard |
|
Eine Druckzeile, sonst nichts im Ausschnitt |
|
Eine Teilenummer, ein Code |
|
Ein Zeichen, z. B. eine Nest- oder Stationsmarkierung |
|
Eine Zeile, ohne jeden Versuch, Struktur zu finden |
|
Mehrere Blöcke an unbekannten Positionen |
|
Über das Bild verstreuter Text ohne Layout |
|
Wie oben, und zusätzlich die Orientierung bestimmen |
|
Die Formen, die ihre Namen beschreiben |
Enger ist besser, wenn Sie wissen, was Sie betrachten: Der Engine zu sagen "das ist ein Wort" hindert sie daran, ein zweites zu erfinden.
|
Die |
5. Einen Konfidenz-Schwellwert setzen
input/min-score ist die Konfidenz, die ein Wort erreichen muss, um in der Wortliste zu erscheinen.
Der Standardwert ist 0; damit wird alles gemeldet, auch Vermutungen, denen die Engine kaum traut.
Dieser Standardwert ist Absicht - eine frische Installation soll Ihnen zeigen, was sie sehen kann, statt das meiste stillschweigend zu verbergen -, aber er ist keine Produktionseinstellung.
So wählen Sie einen Wert:
-
Lassen Sie einige bekannt gute Teile mit
min-scoreauf 0 durchlaufen. -
Sehen Sie sich
mean_scoreund die einzelnen Wort-Konfidenzen im Ergebnis an. -
Ein korrektes Leseergebnis auf einem ordentlichen Bild liegt deutlich über 0,8; die Störwörter, die ein weiter Ausschnitt aufsammelt, liegen meist unter 0,5.
-
Setzen Sie den Schwellwert in die Lücke, näher an den korrekten Leseergebnissen als am Rauschen.
min_score wird im Ergebnis zurückgemeldet, sodass ein Leser, der eine kurze Wortliste sieht, einen
strengen Schwellwert von einem schlechten Bild unterscheiden kann.
Was das nicht behebt
-
Schlechter Kontrast, Blendung oder ein Teil außerhalb des Fokus. Keine Einstellung holt Text zurück, den die Kamera nicht erfasst hat. Korrigieren Sie die Beleuchtung.
-
Nadeldruck- und lasergravierte Kennzeichnungen. Daran scheitert die
LSTM-Engine häufiger als an gedrucktem Text;engine = LEGACYschneidet manchmal besser ab und lohnt sich als erster Versuch. -
Ein Teil, das sich bewegt hat. Der Leser weiß nicht, wo das Etikett sein sollte. Wandert es aus dem Ausschnitt heraus, ist das Leseergebnis leer statt falsch - das ist der bessere Fehler und ein weiterer Grund zum Zuschneiden.