annotate_text_path_layout — ANNOTATE paper op

• Data kinds: text → table

• Call: import fullseye as fs; fs.ledger.annotate_text_path_layout(text, path, font_size=13, font_path=None, spacing=1.0, start=0.0, anchor='start', offset=0.0, upright=False, line_spacing=1.15) (implementation को सीधे call करना हो तो import annotate; annotate.annotate_text_path_layout(text, path, font_size=13, font_path=None, spacing=1.0, start=0.0, anchor='start', offset=0.0, upright=False, line_spacing=1.15), registry से लेना हो तो opsannotate.get("annotate_text_path_layout"))

उपयोग

table (dict) लौटाता है: polyline के साथ अक्षरों को 1-1 करके रखने की position और झुकाव (arc length से तय)।

अक्षर i का केंद्र arc length s_i = s0 + Σ_{j<i} a_j*spacing + a_i/2 पर होता है, और झुकाव उस स्थान पर line segment का tangent angle है (screen coordinates, डिग्री)। path से लंबी string पर ValueError आता है।

स्थिति कैसे तय होती है (2026-09-08 को जोड़ा गया; default पहले के व्यवहार जैसा ही है):

• anchor -- path के साथ alignment का तरीका। "start" (default, पहले जैसा) / "center" (path के बीच में align) / "end" (अंत पर align)। start anchor से तय स्थिति से और खिसकाने की मात्रा के रूप में काम करता है।

• offset -- path के लंबवत खिसकाव [px]। धनात्मक मान चलने की दिशा के दाएँ है (screen coordinates; y नीचे की ओर है, इसलिए बाएँ→दाएँ चलने वाले text के लिए यह "नीचे" है)। line को छुए बिना बगल में रखने के लिए।

• \n से नई line। line 2 और आगे की lines line_spacing से गुणा की गई line height जितनी offset की ही दिशा (चलने की दिशा के दाएँ) में खिसकती हैं। ★इस 1 नियम से, क्षैतिज लेखन "नीचे" और ऊर्ध्वाधर लेखन "बाएँ" जाता है, दोनों typesetting के अनुसार (ऊर्ध्वाधर लेखन में चलने की दिशा नीचे है, इसलिए उसका दायाँ screen का बायाँ है)।

• upright -- अक्षरों को tangent angle पर घुमाने के बजाय सीधा खड़ा रखता है। path मुख्यतः ऊर्ध्वाधर हो (शुरू→अंत में |dy| > |dx|) तो advance अक्षर की चौड़ाई के बजाय अक्षर की ऊँचाई से होता है, इसलिए यह ऊर्ध्वाधर लेखन बन जाता है। केवल VERTICAL_ROTATED_CHARS के अक्षर 90 डिग्री घुमाए जाते हैं।

विराम चिह्न (、。,.) ऊर्ध्वाधर typesetting की परंपरा के अनुसार ऊपर-दाएँ खिसकाए जाते हैं (VERTICAL_SHIFTED_CHARS; खिसकाव advance का _VPUNCT_SHIFT गुना है)। Windows के @ वाले fonts जो काम font की ओर से करते थे, वह यहाँ synthesis से किया जाता है -- Pillow font को file path से खोलता है, इसलिए @ face तक नहीं पहुँच पाता, और HarfBuzz का direction="ttb" भी Raqm के होने या न होने से अलग परिणाम देता है, इसलिए सभी platforms पर एक जैसा रहने वाला तरीका चुना गया।

★ऊर्ध्वाधर लेखन में जो लागू नहीं है (चुपचाप approximate नहीं करता): छोटे kana की स्थिति का सुधार, tate-chu-yoko (ऊर्ध्वाधर में क्षैतिज), और line के अंत का kinsoku। यह छोटे notes के लिए है, मुख्य text की typesetting नहीं।

Returns

dict

{"chars": [{"char","s","xy","angle_deg","width","advance","line"}], "length": path की लंबाई, "used": सबसे लंबी line के **advance का योग** (पहले जैसा Σ advance*spacing), "span": सबसे लंबी line **वास्तव में जितनी** arc length घेरती है (आख़िरी अक्षर के बाद का advance शामिल नहीं -- anchor इसी से align होता है), "lines": lines की संख्या, "line_height": line pitch [px], "vertical": ऊर्ध्वाधर है या नहीं}।

Raises

ValueError

text ख़ाली, path में 2 से कम points या लंबाई शून्य, non-finite मान, कोई line path से लंबी,

या anchor और start के संयोजन से कोई line path से बाहर चली जाए।

उपयोग की विस्तृत guide

• figure_annotation family guide

पृष्ठभूमि guides (इस op के पीछे की physics और conventions)

• dataset_conventions — Training dataset के conventions — COCO / YOLO / VOC और visual inspection में सावधानियाँ

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• annotate_paper_tour — py -3.11 examples/annotate_paper_tour.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

—

इसी category के (paper)

annotate_leader_layout · annotate_leader · annotate_markers · annotate_legend · annotate_dimension_layout · annotate_dimension · annotate_angle_layout · annotate_angle


*Provenance: annotate.py — ANNOTATE operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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