kendama op• Data kinds: image2d → table
• Call: import fullseye as fs; fs.ledger.hole_detect(img, ball_center, ball_radius, *, dark_ratio: 'float' = 0.45, min_sat: 'float' = 0.35, min_chroma: 'float' = 0.1, min_area: 'int' = 3) -> 'dict' (implementation को सीधे call करना हो तो import kendama; kendama.hole_detect(img, ball_center, ball_radius, *, dark_ratio: 'float' = 0.45, min_sat: 'float' = 0.35, min_chroma: 'float' = 0.1, min_area: 'int' = 3) -> 'dict', registry से लेना हो तो opsdrive.get("hole_detect"))
गेंद की image में गहरी disc (ken-tip का छेद) खोजता है: गेंद के केंद्र ball_center (col, row) और image त्रिज्या ball_radius [px] वाले वृत्त के अंदर, उन pixels के connected components में सबसे बड़ा जिनकी brightness (RGB का औसत) गेंद की brightness के median के dark_ratio गुना से कम है, saturation (max − min)/max ≥ min_sat है (grey डोरी को बाहर करता है), और chromaticity (RGB / |RGB|) गेंद की chromaticity के median से कम से कम min_chroma दूर है (छाया वाली गेंद की सतह में केवल brightness गिरती है, chromaticity वही रहती है —— केवल brightness से चुनने पर छाया को छेद समझ लिया गया था, मापकर खारिज किया)। return value {"found", "col", "row", "angle" (गेंद का केंद्र → छेद के centroid का image में कोण [rad], atan2(Δrow, Δcol)), "offset" (दूरी / ball_radius: 0 = सामने, → 1 = किनारा), "ellipticity" (minor axis / major axis, 2nd moments से: 1 = सामने से वृत्त, → 0 = ठीक बगल से), "area" [px]}। न मिले तो found False (बाकी NaN)। सामने से देखने पर छेद का केंद्र गेंद के केंद्र से मिलता है; जितना बगल की ओर घूमता है, उतना किनारे की ओर खिसकता और चपटा होता है (offset ≈ sin φ, ellipticity ≈ cos φ, φ = छेद के axis और दृष्टि-रेखा के बीच कोण)। img (H, W, 3) और ball_radius > 0 न हो तो ValueError।
• 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 में दिए गए हैं।
• poc_kendama — py -3.11 examples/poc_kendama.py
table को input के रूप में लेते हैं)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
kendama)kendama_params · elliptic_k_agm · pendulum_period_exact · pendulum_launch_speed · pendulum_rod_simulate · tether_tension_fixed · tether_slack_angle · swing_up_plan
*Provenance: kendama.py — DRIVE operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.