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

NONE (Standard)

gar nichts

GRAYSCALE

Title Of The Presentation

BINARIZE_OTSU

Title Of The Presentation

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 preprocess, wenn sich Text und Szene nicht durch ein Rechteck trennen lassen - ein Etikett auf einem gemusterten Teil oder ein als Ganzes fotografierter Bildschirm.

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

mode = DIGITS

Alphanumerischer Code in Großbuchstaben

mode = UPPERCASE_LETTERS, allow = 0123456789

Datumscode mit Trennzeichen

mode = DIGITS, allow = /-.

Alles mit festem Alphabet

mode = CUSTOM, allow = das Alphabet

Freier Text, für Menschen lesbar

mode = ALL_SYMBOLS (der Standard)

Ein leerer Zeichensatz wird abgelehnt. mode = CUSTOM mit leerem allow oder ein deny, das alles entfernt, was der Modus ausgewählt hat, würde an die Engine als gar keine Filterung weitergegeben - das genaue Gegenteil dessen, was konfiguriert wurde, und im Ergebnis unsichtbar. Beides wird mit Statuscode -2 abgelehnt, unter Nennung des Knotens.

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

SINGLE_BLOCK

Ein zugeschnittenes Etikett - der Standard

SINGLE_LINE

Eine Druckzeile, sonst nichts im Ausschnitt

SINGLE_WORD

Eine Teilenummer, ein Code

SINGLE_CHAR

Ein Zeichen, z. B. eine Nest- oder Stationsmarkierung

RAW_LINE

Eine Zeile, ohne jeden Versuch, Struktur zu finden

AUTO

Mehrere Blöcke an unbekannten Positionen

SPARSE

Über das Bild verstreuter Text ohne Layout

AUTO_OSD, SPARSE_OSD

Wie oben, und zusätzlich die Orientierung bestimmen

SINGLE_COLUMN, SINGLE_BLOCK_VERT, CIRCLE_WORD

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 _OSD-Varianten kosten mehr, als sie aussehen. Sie laden ein zweites Modell und verbringen Zeit damit, zu entscheiden, wie herum der Text steht. In einer Prüfzelle kommt das Teil jedes Mal gleich herum an - eine Tatsache, die die Mechanik bereits garantiert -, dafür bei jedem Lesevorgang zu bezahlen ist also Verschwendung. Verwenden Sie sie nur, wenn die Orientierung wirklich variiert.

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:

  1. Lassen Sie einige bekannt gute Teile mit min-score auf 0 durchlaufen.

  2. Sehen Sie sich mean_score und die einzelnen Wort-Konfidenzen im Ergebnis an.

  3. 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.

  4. 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 = LEGACY schneidet 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.