Text lesen

Ein Lesevorgang, auf Anfrage. Nichts geschieht, bis ein Client <module>/read-text/execute schreibt.

Was ein Durchlauf tut

  1. Lehnt den Aufruf ab, wenn dieses Modul bereits belegt ist (Statuscode -1).

  2. Leert das vorherige Leseergebnis, damit ein Fehler nie alten Text zurücklässt.

  3. Prüft jede Einstellung und meldet alle Probleme auf einmal.

  4. Liest das Bild von input/input-image-address.

  5. Wendet input/crop an.

  6. Führt die OCR-Engine aus und veröffentlicht den Text.

Die Einstellungen

Knoten Standard Wirkung

input/input-image-address

(leer)

Adresse des zu lesenden Bildknotens, z. B. hdvisionsystems/lumiscan-cam-driver/camera1/output/image.

input/crop/startX
input/crop/startY
input/crop/width
input/crop/height

0

Der zu lesende Bildausschnitt. Alles null liest das ganze Bild; eine Breite oder Höhe von null reicht bis zum rechten bzw. unteren Rand. Schneiden Sie eng um den Text zu - siehe Genau lesen.

input/language

eng

Mit welchem Sprachmodell gelesen wird. Die auf diesem Gerät installierten Modelle sind auf system/languages aufgelistet.

input/engine

DEFAULT

DEFAULT wählt die beste verfügbare Engine, LSTM ist die moderne Engine mit neuronalem Netz, LEGACY die ursprüngliche Engine mit Mustervergleich, und COMBINED führt beide aus. LEGACY lohnt sich als Versuch bei Nadeldruck- und lasergravierten Kennzeichnungen.

input/layout

SINGLE_BLOCK

Wie viel Struktur im Bild gesucht wird.

input/preprocess

NONE

Was mit dem Bild vor dem Lesen geschieht. Greifen Sie zu GRAYSCALE, wenn ein Farbbild ganz ohne Wörter zurückkommt; das passiert, wenn ein Foto zusammen mit dem Text im Bild ist - siehe Genau lesen.

input/characters/mode
input/characters/allow
input/characters/deny

ALL_SYMBOLS
(leer)
(leer)

Welche Zeichen zurückgegeben werden dürfen.

input/min-score

0

Die Konfidenz, die ein Wort erreichen muss, um gemeldet zu werden, zwischen 0 und 1.

Das Ergebnis lesen

output/result ist ein text_read_result-Flatbuffer.

Feld Bedeutung

text

Das gesamte Leseergebnis genau so, wie die Engine es erzeugt hat, Zeilen durch Zeilenumbrüche getrennt. Nicht nach min-score gefiltert.

words[].text
words[].score
words[].bbox_x … bbox_height

Ein erkanntes Wort, seine Konfidenz von 0 bis 1 und ein Rahmen um das Wort in den Koordinaten der gelesenen Region.

word_count

Wie viele Wörter gemeldet werden.

mean_score

Mittlere Konfidenz über die gemeldeten Wörter; 0, wenn es keine gibt.

min_score

Der angewendete Schwellwert, damit eine kurze Wortliste als "streng" und nicht als "schlechtes Bild" gelesen wird.

language

Die tatsächlich verwendete Sprache - nicht immer die angeforderte.

engine, layout

Wie tatsächlich verwendet.

image_width, image_height

Die gelesene Region - das ganze Bild, sofern kein Ausschnitt gesetzt war.

timestamp

Mikrosekunden seit der Epoche, wann der Lesevorgang abgeschlossen wurde.

text und words[] dürfen sich unterscheiden, mit Absicht

text ist die eigene Ausgabe der Engine, mit den Zeilenumbrüchen, die sie gefunden hat. words[] ist nach min-score gefiltert. Bei min-score auf 0.8 erscheint ein Wort, das die Engine mit 0.4 gemeldet hat, in text, aber nicht in words[].

Wenn beide übereinstimmen müssen, lesen Sie text nur dann, wenn word_count die erwartete Zahl ist.

Wenn es fehlschlägt

Situation Statuscode Was Sie erhalten

Eine andere Operation auf diesem Modul läuft

-1

Nichts getan; das vorherige Leseergebnis bleibt unberührt

Eine Einstellung ist unbrauchbar

-2

Jedes Problem in einem status-text benannt

Der Bildknoten kann nicht gelesen werden

-3

Leeres Ergebnis

Der Ausschnitt passt nicht in das Bild

-2

Leeres Ergebnis

Die OCR-Engine konnte nicht starten

-7

Leeres Ergebnis, mit dem Grund in status-text

Nichts Lesbares im Bild

1 (Erfolg)

Leerer Text, word_count 0

Die letzten beiden Zeilen sind der Unterschied, der in der Produktion am meisten zählt: Ein Leser, der nicht starten konnte, meldet -7 und nennt den Grund, während ein funktionierender Leser, der auf ein leeres Teil schaut, Erfolg ohne Wörter meldet. Früher waren beide nicht zu unterscheiden.

Die Ausgaben gehören zum startenden Durchlauf

Jedes execute leert output/result in dem Moment, in dem es beginnt; ein Client muss ein Ergebnis also lesen, bevor er den nächsten Lesevorgang auslöst. status-code und status-text sind die Ausnahme - sie beschreiben immer den letzten Versuch.