layout op• Datenarten: table → table
• Aufruf: import fullseye as fs; fs.ledger.text_lines(boxes, stroke_width=None, overlap_ratio: 'float' = 0.5, gap_ratio: 'float' = 3.0, width_ratio: 'float' = 3.0) (die Implementierung direkt: import textregion; textregion.text_lines(boxes, stroke_width=None, overlap_ratio: 'float' = 0.5, gap_ratio: 'float' = 3.0, width_ratio: 'float' = 3.0); aus dem Register: opstext.get("text_lines"))
• GPU: nein (nur CPU-Referenzimplementierung)
Fasst Zeichenkandidaten-Boxen zu Zeilen zusammen (vertikal überlappend, horizontal nah, ähnliche Strichbreite).
★Begründung der Regel (gemessen 2026-09-27): Kandidaten entstehen als Fragmente je Strich (ein Querbalken und ein 'l' unterscheiden sich 5-fach in der Höhe), daher zerfielen bei der Bedingung „ähnliche Höhe“ 3 Zeilen in 30–60. Die Zeilenzugehörigkeit wird über die vertikale Überlappung entschieden (mindestens overlap_ratio der kleineren Höhe), die horizontale Lücke muss innerhalb des gap_ratio-fachen der größeren Höhe liegen, die Strichbreite innerhalb des width_ratio-fachen.
boxes nimmt zwei Formen an: (1) ein N×4-Array von Rechtecken [y0, x0, y1, x1] (die ursprüngliche Form), (2) die von text_candidates gelieferte Tabelle (ein dict; muss boxes enthalten, ein vorhandenes stroke_width wird verwendet). Das Register deklariert die Eingabe dieses Ops als table, sodass die Kandidatentabelle direkt übergeben die Kette text_candidates -> text_lines verbindet (★2026-11-03: früher scheiterte die Übergabe einer Tabelle mit einem TypeError aus int() — vom Rezept-e2e gefunden). Wird eine Tabelle und zusätzlich ein separates stroke_width übergeben, ist unentschieden, welches gilt, daher ValueError (fail-closed). Ein dict ohne Schlüssel boxes ergibt ebenfalls ValueError.
Returns dict: lines (M×4-Rechtecke) / members (Liste der Kandidatenindizes je Zeile).
• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).
• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.
• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.
• poc_text_region_truth — py -3.11 examples/poc_text_region_truth.py
table als Eingabe)—
layout)—
*Provenance: textregion.py — TEXT Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.