paper op• Datenarten: text → table
• Aufruf: import fullseye as fs; fs.ledger.annotate_table_layout(text, xy, anchor='lt', font_size=13, font_path=None, pad=6, col_gap=None, row_gap=0, align='auto', header=False, bold=False, italic=False, line_spacing=1.15) (die Implementierung direkt: import annotate; annotate.annotate_table_layout(text, xy, anchor='lt', font_size=13, font_path=None, pad=6, col_gap=None, row_gap=0, align='auto', header=False, bold=False, italic=False, line_spacing=1.15); aus dem Register: opsannotate.get("annotate_table_layout"))
Gibt eine table (dict) zurück: die Spalten- und Zeilenpositionen, an denen ein tabulatorgetrennter String als Tabelle platziert wird.
Zeilen werden an \n, Spalten an \t getrennt. Die Spaltenbreite ist das Maximum der Breiten, gemessen mit der echten Schrift in der angegebenen Größe, 1 Zelle nach der anderen -- Zählen der Zeichen geht zwischen Japanisch und alphanumerischen Zeichen immer schief, daher ist Messen der einzige korrekte Weg.
text : str
Tabulatorgetrennt. Alle Zeilen müssen dieselbe Spaltenzahl haben (sonst ValueError).
xy : (x, y)
Die Position, auf die anchor zeigt (x=col, y=row).
anchor : str
Eine der 9 Varianten 'lt','ct','rt','lm','cm','rm','lb','cb','rb'.
pad : int
Innenabstand der Tabelle [px].
col_gap : int or None
Abstand zwischen Spalten [px]. None (Standard) rundet Zeilenhöhe ×0.6, daher
ändert sich der Abstand mit der Schriftgröße.
row_gap : int
Zusätzlich zwischen Zeilen [px] (0 belässt den normalen Zeilenabstand).
align : str or sequence
Einer der Werte aus TABLE_ALIGNS oder eine Folge pro Spalte. "auto"
(Standard) richtet eine Spalte nur rechtsbündig aus, wenn alle ihre Werte wie Zahlen aussehen.
Bei header=True wird die Kopfzeile von dieser Prüfung ausgenommen.
header : bool
Wenn wahr, wird die 1. Zeile als Kopfzeile fett gesetzt und darunter 1 Linie gezogen.
bold, italic : bool or int
Synthetische Schriftschnitte (_bold_px / _italic_tile). Der Fettdruck von header
ist davon unabhängig und gilt nur für die Kopfzeile.
dict
{"rect": (x,y,w,h), "ncols", "nrows", "col_w": [...], "col_x": [...], "row_y": [...], "row_h", "col_gap", "align": [...], "header", "rule_y": y der Kopfzeilenlinie (None, wenn header falsch ist), "cells": [{"text","row","col","xy","width","bold"}]}.
col_x / row_y / cells[i]["xy"] sind alle in Bildkoordinaten.
ValueError
Spaltenzahl je Zeile verschieden / leer / unbekanntes align anchor /
Länge von align weicht von der Spaltenzahl ab.
>>> import annotate
>>> lay = annotate.annotate_table_layout("Name\tWert\nA\t1.5\nB\t22.25", (10, 10))
>>> lay["ncols"], lay["nrows"], lay["align"]
(2, 3, ['left', 'left'])
>>> lay2 = annotate.annotate_table_layout("Name\tWert\nA\t1.5\nB\t22.25", (10, 10),
... header=True)
>>> lay2["align"] # ohne Kopfzeile enthält Spalte 2 nur Zahlen
['left', 'right']
• Leitfaden zur Familie figure_annotation
• dataset_conventions — Konventionen für Trainingsdatensätze — COCO / YOLO / VOC und Fallstricke in der Sichtprüfung
• 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.
• annotate_paper_tour — py -3.11 examples/annotate_paper_tour.py
table als Eingabe)—
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. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.