OCR für Szenentext mit Ultralytics YOLO26
Was ist OCR für Szenentext?#
Die optische Zeichenerkennung (OCR) erkennt und liest Text in Bildern. Die OCR-Lösung kombiniert einen Ultralytics-YOLO26-Textdetektor mit einem Backend für die Texterkennung. Sie unterstützt achsenparallele Erkennungsrahmen, orientierte Rahmen (OBB) und Segmentierungspolygone und gibt den erkannten Text anschließend in Lesereihenfolge zurück.
Erkennung und Texterkennung bleiben getrennte Komponenten. So kannst du deinen Szenentext-Detektor mit PaddleOCR oder deinem eigenen Erkennungsmodell kombinieren.
Warum OCR für Szenentext verwenden?#
- Flexible Textgeometrie: Verwende Erkennungs-, OBB- oder Segmentierungsmodelle für horizontalen, gedrehten oder unregelmäßigen Text.
- Austauschbare Texterkennung: Nutze PaddleOCR ohne zusätzlichen Integrationscode oder übergib eine aufrufbare Funktion für ein anderes Modell.
- Strukturierte Ausgabe: Greife über ein einziges Ergebnisobjekt auf den erkannten Text, die Konfidenzwerte für Text- und Objekterkennung, die ursprüngliche Geometrie und ein annotiertes Bild zu.
OCR für Szenentext mit YOLO26 ausführen#
PaddleOCR ist optional und wird geladen, wenn OCR mit recognizer="paddleocr" erstellt wird. Falls erforderlich, werden PaddleOCR 3.x und die CPU-Version von PaddlePaddle installiert. Für die Erkennung auf der GPU installiere zuerst eine passende Version von paddlepaddle-gpu; dem Basispaket von Ultralytics werden keine OCR-Pakete hinzugefügt.
Übergib der Lösung OCR ein Bild und einen Textdetektor. Das Ergebnis enthält das annotierte Bild und den erkannten Text:
yolo solutions ocr model="scene-text-obb.pt" source="path/to/video.mp4" recognizer="paddleocr"YOLO26-Text-Checkpoints#
Die öffentliche YOLO26-Text-Modellfamilie umfasst die OBB-Checkpoints n, s, m, l und x. Lege ULTRALYTICS_API_KEY auf deinen Ultralytics-Plattform-API-Schlüssel fest und lade anschließend einen Checkpoint anhand seiner Plattform- URI:
export ULTRALYTICS_API_KEY="your-api-key"ocr = solutions.OCR(model="ul://ultralytics-yolo/yolo26-text/yolo26n-text", recognizer="paddleocr")
result = ocr(im0)Ersetze yolo26n-text durch yolo26s-text, yolo26m-text, yolo26l-text oder yolo26x-text, um ein größeres Modell zu verwenden.
Argumente für OCR#
Hier ist eine Tabelle mit den Argumenten für OCR:
| Argument | Typ | Standard | Beschreibung |
|---|---|---|---|
model | str | None | Pfad zu einer Ultralytics-YOLO-Modelldatei. |
recognizer | str oder Callable | 'paddleocr' | Backend für die Texterkennung oder aufrufbare Funktion, die einen BGR-Bildausschnitt entgegennimmt und (text, confidence) zurückgibt. |
line_width | int | 2 | Linienstärke für die Boxen, Keypoints und Zählwerte, die von der Lösung eingezeichnet werden. |
verbose | bool | True | Aktiviert das Protokoll der Lösung für jedes Bild, das Eingabeform, Klassenanzahlen und Verarbeitungsgeschwindigkeit enthält. Der Tracking-Aufruf selbst gibt grundsätzlich keine Meldungen aus. |
Zusätzlich werden die folgenden Visualisierungseinstellungen unterstützt:
| Argument | Typ | Standard | Beschreibung |
|---|---|---|---|
show | bool | False | Wenn True aktiviert ist, werden die annotierten Bilder oder Videos in einem Fenster angezeigt. Nützlich für unmittelbares visuelles Feedback während der Entwicklung oder beim Testen. |
show_conf | bool | True | Zeigt neben der Bezeichnung den Konfidenzwert jeder Erkennung an. Gibt Aufschluss darüber, wie sicher sich das Modell bei der jeweiligen Erkennung ist. |
show_labels | bool | True | Zeigt für jede Erkennung eine Bezeichnung in der visuellen Ausgabe an. So lassen sich erkannte Objekte sofort erkennen. |
So funktioniert OCR für Szenentext#
- Text erkennen: YOLO26 erzeugt achsenparallele Rahmen, orientierte Rahmen oder Segmentierungspolygone.
- Bildausschnitte für die Texterkennung erstellen: Die Rahmen werden auf das Bild zugeschnitten. OBBs werden entlang der Kante affin entzerrt, die sich am weitesten von links nach rechts erstreckt, wodurch annähernd quadratische Rahmen aufrecht bleiben und geneigte Textzeilen horizontal in Leserichtung ausgerichtet werden. Bei Segmentierungspolygonen wird das umschließende Rechteck mit minimaler Fläche entzerrt, während das ursprüngliche Polygon erhalten bleibt. Ausschnitte, die mindestens 1,5-mal höher als breit sind, werden wie bei PaddleOCR um 90° gegen den Uhrzeigersinn gedreht.
- Text erkennen: PaddleOCR verarbeitet alle Ausschnitte in Stapeln zu je 16. Benutzerdefinierte Erkennungsmodelle erhalten jeweils einen Ausschnitt.
- Ergebnisse ordnen und darstellen: Der Text wird in horizontale Zeilen gruppiert und von oben nach unten sowie von links nach rechts sortiert. Für die Visualisierung wird eine Unicode-Schriftart für Nicht-ASCII-Text wie Chinesisch verwendet.
Koordinaten beziehen sich immer auf das Originalbild, nicht auf die Eingabe des Detektors oder den Ausschnitt für die Texterkennung.
Eigenes Erkennungsmodell verwenden#
Übergib eine aufrufbare Funktion, um ein anderes Erkennungsmodell einzubinden, ohne den Ablauf für Erkennung, Geometrie oder Sortierung zu ändern. Die Funktion wird einmal pro nicht leerem BGR-Ausschnitt numpy.ndarray aufgerufen. Gib pro Aufruf ein Tupel (text, confidence) zurück, nicht eine Liste mit Stapelergebnissen:
| Tupel-Element | Zulässiger Typ | Beschreibung |
|---|---|---|
text | str | Dekodierter Text für diesen Ausschnitt. Gib "" zurück, wenn kein Text erkannt wird. |
confidence | float, int oder numpy.floating | Numerischer Konfidenzwert der Texterkennung, den die Lösung in float umwandelt. |
def recognize(crop):
# Führe dein Erkennungsmodell auf dem BGR-Ausschnitt aus und dekodiere hier die Ausgabe.
return "example", 0.95
ocr = solutions.OCR(model="custom-text.pt", recognizer=recognize)
result = ocr(im0)Nicht unterstützte Backend-Namen lösen einen Fehler vom Typ ValueError aus. Wenn kein Text erkannt wird, ist result.texts leer und das Erkennungsmodell wird nicht aufgerufen.
OCR-Ergebnisse#
Jeder Aufruf gibt ein SolutionResults- Objekt zurück. Verwende result.plot_im für das annotierte Bild und result.texts für Datensätze in deterministischer Lesereihenfolge:
| Schlüssel | Typ | Beschreibung |
|---|---|---|
text | str | Erkannter Text. |
confidence | float | Konfidenzwert der Texterkennung, getrennt vom Konfidenzwert der Objekterkennung. |
detection_confidence | float | Konfidenzwert des YOLO-Detektors. |
detection_index | int | Index der Erkennung vor der Sortierung nach Lesereihenfolge. |
polygon | list[list[float]] | Polygon im Originalbild: vier Eckpunkte bei Erkennungen mit Rahmen und OBB oder der Umriss der Maske. |
Abhängigkeiten und Lizenzen#
| Komponente | Erforderlich | Rolle | Lizenz |
|---|---|---|---|
| Ultralytics | Ja | YOLO-Erkennung, Geometrie der Ausschnitte und Zusammenstellung der Ergebnisse | AGPL-3.0 |
| PaddlePaddle | Nur für recognizer="paddleocr" | Laufzeitumgebung für die Texterkennung | Apache-2.0 |
| PaddleOCR 3.x | Nur für recognizer="paddleocr" | Modelle zur Erkennung von Textzeilen und Adapter für die Inferenz | Apache-2.0 |
| Benutzerdefinierte aufrufbare Funktion | Nein | Integration eines benutzereigenen Erkennungsmodells | Durch das Backend festgelegt |
PaddleOCR lädt beim ersten Einsatz möglicherweise Gewichte für die Texterkennung herunter. Prüfe vor dem Paketieren oder Bereitstellen dieser Artefakte die Modellkarte und die Bedingungen für die Weiterverbreitung des ausgewählten Modells. Für benutzerdefinierte Checkpoints gelten separate Lizenzbedingungen.
Häufig gestellte Fragen#
Ja. Übergib eine aufrufbare Funktion als
recognizerund gib für jeden BGR-Ausschnitt(text, confidence)zurück. Unter Eigenes Erkennungsmodell verwenden findest du die Anforderungen an Ein- und Ausgabe.Nein. OCR verarbeitet jedes Eingabebild unabhängig, ohne Verfolgungs-IDs oder Zwischenspeicherung erkannter Texte. Verarbeite jedes Videobild als separate Eingabe, wenn OCR für jedes einzelne Bild erforderlich ist.
Du kannst den YOLO-Detektor mit dem normalen Exportmodus exportieren. PaddleOCR oder ein eigenes Erkennungsmodell ist jedoch nicht in das ONNX-, TensorRT- oder sonstige Detektorartefakt eingebettet. Stelle den exportierten Detektor und die Laufzeitumgebung für die Texterkennung als separate Komponenten bereit oder behalte diese Python-Kompositionsebene bei.
Kommentare
Stell eine Frage, teile deine Ergebnisse oder hilf jemand anderem.