---
title: "Genau lesen"
product: "LumiScan Text Reader"
component: "lumiscan-text-reader-de"
version: "1.1.0"
display_version: "1.1.0.6"
latest_version: true
language: "de"
url: "https://docs.hdvisionsystems.com/de/lumiscan-text-reader-de/1.1.0/lumiscan-text-reader/reading-accurately.html"
---

# Genau lesen – LumiScan Text Reader

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.

> [!NOTE]
> 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.

> [!IMPORTANT]
> 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.

> [!NOTE]
> 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) |

> [!WARNING]
> **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.

> [!NOTE]
> 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.
