text_lines — TEXT 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)

Verwendung

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

Referenzen (Beispieldaten, Literatur)

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

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• poc_text_region_truth — py -3.11 examples/poc_text_region_truth.py

Typkompatible Folge-Operatoren (nehmen table als Eingabe)

—

Gleiche Kategorie (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.