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 नहीं।
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": ऊर्ध्वाधर है या नहीं}।
ValueError
text ख़ाली, path में 2 से कम points या लंबाई शून्य, non-finite मान, कोई line path से लंबी,
या anchor और start के संयोजन से कोई line path से बाहर चली जाए।
• figure_annotation family guide
• dataset_conventions — Training dataset के conventions — COCO / YOLO / VOC और visual inspection में सावधानियाँ
• 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 में दिए गए हैं।
• annotate_paper_tour — py -3.11 examples/annotate_paper_tour.py
table को input के रूप में लेते हैं)—
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.