text_lines — TEXT layout op

• 데이터 종류: table → table

• 호출: 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)(구현을 직접 호출하려면 import textregion; textregion.text_lines(boxes, stroke_width=None, overlap_ratio: 'float' = 0.5, gap_ratio: 'float' = 3.0, width_ratio: 'float' = 3.0), 원장에서 가져오려면 opstext.get("text_lines"))

• GPU: 없음(CPU 참조 구현만)

사용법

문자 후보 상자를 줄로 묶는다(세로로 겹치고, 가로로 가깝고, 스트로크 폭이 비슷한 것).

★규칙의 근거(2026-09-27 실측): 후보는 획마다의 조각이 되므로(가로획과 'l'은 높이가 5배 다름) "높이가 비슷함"을 조건으로 하면 3행이 30〜60행으로 쪼개졌다. 행의 동일성은 세로 겹침(작은 쪽 높이의 overlap_ratio 이상)으로 판정하고, 가로 간격은 큰 쪽 높이의 gap_ratio배 이내, 획 폭은 width_ratio배 이내.

boxes는 두 가지 형태를 받는다: (1) N×4 직사각형 [y0, x0, y1, x1] (기존 형태), (2) text_candidates가 반환하는 표(dict. boxes를 반드시 가지며, stroke_width가 있으면 그것을 사용). 대장은 이 op의 입력을 table로 선언하고 있으므로, 후보의 표를 그대로 넘기면 사슬 text_candidates -> text_lines가 이어진다(★2026-11-03: 이전에는 표를 넘기면 int()의 TypeError로 떨어졌다 —— 레시피의 e2e가 발견). 표를 넘기면서 stroke_width도 따로 넘기면 어느 쪽을 쓸지 정해지지 않으므로 ValueError(fail-closed). boxes 키가 없는 dict도 ValueError.

Returns dict: lines(M×4 직사각형) / members(각 행의 후보 index 목록).

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.

• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.

• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.

실행 가능한 예제(이 연산자를 실제로 호출하는 검증된 샘플)

• poc_text_region_truth — py -3.11 examples/poc_text_region_truth.py

타입이 이어지는 다음 연산자(table 를 입력으로 받는 것)

—

같은 카테고리(layout)

—


*Provenance: textregion.py — TEXT 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.