Supervision 关键点标注器全解析:Vertex、Edge 与 Ellipse 系列 Annotators 使用指南

发布时间:2026/9/8 20:24:48

Supervision 关键点标注器全解析:Vertex、Edge 与 Ellipse 系列 Annotators 使用指南 Supervision 关键点标注器全解析Vertex、Edge 与 Ellipse 系列 Annotators 使用指南【免费下载链接】supervisionWe write your reusable computer vision tools. 项目地址: https://gitcode.com/GitHub_Trending/su/supervision导读本篇文章基于 Supervision 官方文档 keypoint/annotators.md 编写围绕人体姿态、手部骨骼与面部关键点可视化这一主题系统讲解六个骨骼关键点标注器VertexAnnotator、EdgeAnnotator、VertexLabelAnnotator、VertexEllipseAreaAnnotator、VertexEllipseOutlineAnnotator与VertexEllipseHaloAnnotator。读完本篇你将掌握如何用统一的sv.KeyPoints数据结构驱动不同风格的关键点渲染学会用源码级参数颜色、半径、线宽、sigma 椭圆层级、透明度、防重叠标签等快速产出可直接用于质检与展示的标注画面。前置准备一个可以被标注的KeyPoints在 Supervision 中关键点标注器的输入统一是sv.KeyPoints对象。它把来自不同框架的姿态/关键点结果标准化为一致的字段xy形状(n, m, 2)的坐标数组n为检测到的目标数m为每个目标的特征点数class_id形状(n,)的目标类别 ID可为Nonekeypoint_confidence形状(n, m)的逐点置信度visible形状(n, m)的可选布尔矩阵标记哪些关键点是可见的None时全部视为可见core.py 的字段定义见该文件 docstringdata附加数据的字典与关键点对齐。你可以通过不同模型的适配器生成KeyPoints如KeyPoints.from_ultralytics()接收 YOLO pose 结果、KeyPoints.from_mediapipe()、KeyPoints.from_inference()、KeyPoints.from_transformers()、KeyPoints.from_detectron2()与KeyPoints.from_yolo_nas()详见 keypoint/core.md 与 core.py。生成之后即可像官方文档示例那样把坐标交给任意标注器import supervision as sv image ... # 读取一帧画面numpy.ndarray 或 PIL.Image 均可 key_points sv.KeyPoints(...) # 来自任意模型适配器接下来按能力分三组介绍六个标注器。六个标注器速览标注器作用核心参数构造函数默认值见源码 annotators.pyVertexAnnotator在每个关键点画实心圆colorColor.ROBOFLOW、radius4EdgeAnnotator在关键点之间连线形成骨架colorColor.ROBOFLOW、thickness2、edgesNoneVertexLabelAnnotator为每个关键点绘制带背景的文字标签colorColor.ROBOFLOW、text_colorColor.WHITE、text_scale0.5、text_thickness1、text_padding10、border_radius0、smart_positionFalseVertexEllipseAreaAnnotator基于协方差绘制多层级半透明填充椭圆sigma(1.0, 2.0, 3.0)、color(GREEN, YELLOW, RED)、opacity0.4、max_axisNoneVertexEllipseOutlineAnnotator基于协方差绘制多层级空心椭圆环同上另有thickness2VertexEllipseHaloAnnotator基于协方差绘制径向渐变发光椭圆同 Areaopacity0.6内部_DECAY2.0需要留意的是官方文档示例中的数值如radius10、thickness5属于演示取值构造函数在源码中的默认值如上表所示实际使用时两套值都合法。VertexAnnotator标注关键点顶点VertexAnnotator负责把每个关键点画成实心圆即骨骼的“顶点/关节点”。import supervision as sv image ... key_points sv.KeyPoints(...) vertex_annotator sv.VertexAnnotator( colorsv.Color.GREEN, radius10, ) annotated_frame vertex_annotator.annotate( sceneimage.copy(), key_pointskey_points, )源码层面的执行规则annotators.py 中VertexAnnotator.annotate遍历key_points.xy对每个目标内的每个点调用cv2.circle画实心圆thickness-1表示填充坐标为(0, 0)的占位点会被跳过当key_points.visible存在且对应位置为False时该点被跳过visible is None时不做过滤全部绘制key_points为空时直接返回原始scene不会报错。因此visible与“坐标零值”共同决定了哪些顶点会被画出这对存在遮挡、模型输出置信度低的关键点尤为重要。EdgeAnnotator连接关键点绘制骨架边EdgeAnnotator把关键点两两连线得到完整的骨架结构import supervision as sv image ... key_points sv.KeyPoints(...) edge_annotator sv.EdgeAnnotator( colorsv.Color.GREEN, thickness5, ) annotated_frame edge_annotator.annotate( sceneimage.copy(), key_pointskey_points, )edges参数有三种传法源码中EdgeAnnotator.__init__与annotate的处理逻辑edgesNone默认自动检测骨架根据每个目标的关键点数量在skeletons.py定义的SKELETONS_BY_VERTEX_COUNT字典中查找预设骨架。该字典由内建Skeleton枚举COCO、HAND、GHUM、FACEMESH_TESSELATION_NO_IRIS等多个标准骨架按去重后的顶点数自动索引构建skeletons.py。若按顶点数查不到匹配会打印警告并跳过该目标。传Sequence[tuple[int, int]]单骨架对所有目标实例应用同一组边例如edges[(1, 2), (1, 3)]表示把 1 号点分别连向 2、3 号点。传dict[int, Sequence[tuple[int, int]]]按类别多骨架以class_id为键、各自映射一组边适合“同一批检测里混有多种骨架类型”的数据集例如edges{0: [(1, 2), (1, 3)], 1: [(1, 2)]}。关于边索引的 1-based 约定公共 API 中的边索引采用1-based编号从 1 到m内部会通过_validate_edge_indices校验范围并转换为 0-based 下标后再访问xy数组见源码annotators.py。若索引越界超出[1, m]会抛出ValueError。绘制时若边两端任一坐标为零值或任一端点被visible标记为不可见则该边被跳过源码annotate逻辑。完整的多骨架用例可见源码 docstring 中的示例代码。VertexLabelAnnotator给关键点挂上文字标签当需要直接读出“哪个点是什么关节”时使用VertexLabelAnnotator在每个关键点旁绘制带圆角背景的文字框import supervision as sv image ... key_points sv.KeyPoints(...) vertex_label_annotator sv.VertexLabelAnnotator( colorsv.Color.GREEN, text_colorsv.Color.BLACK, border_radius5, ) annotated_frame vertex_label_annotator.annotate( sceneimage.copy(), key_pointskey_points, )annotate()的labels参数同样支持三种形态源码annotate/_resolve_labelsNone默认以关键点的下标0、1、...作为标签list[str]长度必须等于关键点数量作用于每个实例如labels[head, L-foot, R-foot]dict[int, list[str]]按class_id给不同骨架类型配置各自的标签列表。颜色参数color与text_color既可以是单个Color也可以是按关键点逐个配置的Color列表长度需与点数一致否则抛ValueError。细节特性源码层面border_radius背景圆角半径设成较大值可把背景渲染成圆形smart_positionTrue利用pad_boxes先扩张每个标签框再交给spread_out_boxes把重叠标签“摊开”最后再内缩回原尺寸从而避免标签互相遮挡相关工具函数来自 detection/utils/boxes.py标签框居中于关键点先用cv2.getTextSize测量文字尺寸得到文本包围盒再以其中心对齐关键点坐标背景矩形通过draw_rounded_rectangle绘制与顶点标注一致visible为False的点、或visible为None时坐标为(0,0)的点会被跳过。椭圆家族把不确定度可视化出来VertexEllipseAreaAnnotator、VertexEllipseOutlineAnnotator与VertexEllipseHaloAnnotator三个标注器用于不确定性/概率分布的可视化它们不依赖模型输出的固定坐标而是依据每个关键点的 2×2 协方差矩阵画出与置信区间对应的椭圆。数据要求key_points.data[covariance]三个椭圆标注器共用一个私有基类_BaseVertexEllipseAnnotator并依赖key_points.data中键为covariance的数据其形状必须为(N, K, 2, 2)N目标数、K每目标关键点数矩阵以像素坐标表示。缺少该字段或形状不匹配时_get_covariances会抛出ValueError。官方文档与本源码 docstring 均给出构造示例key_points sv.KeyPoints( xy..., class_id..., data{ covariance: np.array( [[[[800, 0], [0, 400]], # 第 1 个关键点的 2x2 协方差 [[400, 0], [0, 800]], # 第 2 个关键点 [[600, 0], [0, 600]]]], # 第 3 个关键点 dtypenp.float32, ) }, )sigma、color 与 max_axis 的语义三个椭圆标注器共享sigma、color、max_axis三个参数_BaseVertexEllipseAnnotator.__init__sigma每个椭圆环的倍率可传单个浮点数或浮点序列默认(1.0, 2.0, 3.0)。内部会把 sigma 按降序排列因此绘制顺序是“最外圈先画、最内圈最后画”。color每个 sigma 层级对应的颜色可传单个Color或颜色序列默认(Color.GREEN, Color.YELLOW, Color.RED)颜色数量必须与 sigma 数量一致否则抛ValueError。max_axis椭圆半轴长度的像素上限可选。约束在max_axis非空时必须为正。绘制几何的底层逻辑源码_iter_ellipse_params对每个可见、非零坐标的关键点取出其 2×2 协方差矩阵用np.linalg.eigh做特征分解得到特征值与特征向量按特征值降序排列第一主轴方向对应最大方差方向椭圆倾角即由该特征向量经arctan2换算为角度每个 sigma 层级的椭圆半轴长度为sigma * sqrt(特征值)中心落在关键点坐标上协方差含非有限值或特征值非正的矩阵会被安全跳过不做绘制。Area / Outline / Halo 三者的差异VertexEllipseAreaAnnotator —— 半透明实心填充area_annotator sv.VertexEllipseAreaAnnotator( colorsv.Color.GREEN, sigma2.0, )将所有椭圆先在 overlay 副本上用cv2.ellipsethickness-1、抗锯齿LINE_AA填充再通过cv2.addWeighted(overlay, opacity, scene, 1 - opacity, 0)融合回原图opacity默认 0.4。多层同心圆叠加后呈现“靶心”效果内圈颜色代表更高的概率密度。VertexEllipseOutlineAnnotator —— 空心描边环outline_annotator sv.VertexEllipseOutlineAnnotator( colorsv.Color.GREEN, sigma2.0, thickness2, )只画椭圆轮廓cv2.ellipse使用给定的thickness不做任何透明融合适合需要清晰边界、不遮挡底层图像内容的场景。VertexEllipseHaloAnnotator —— 径向渐变的辉光halo_annotator sv.VertexEllipseHaloAnnotator( colorsv.Color.GREEN, sigma2.0, )不依赖 cv2.ellipse而是对每个椭圆外接矩形 ROI 内的像素逐点计算归一化距离dist_sq内部像素的透明度按(1 - dist_sq) ** decay衰减_DECAY 2.0的幂曲线峰值透明度取opacity默认 0.6从而得到“中心最亮、边界渐隐”的柔光效果。兼容别名VertexEllipseAnnotator官方文档特别注明sv.VertexEllipseAnnotator是sv.VertexEllipseAreaAnnotator的兼容别名。这一点在源码中由模块级赋值VertexEllipseAnnotator VertexEllipseAreaAnnotator直接落实annotators.py并且顶层包supervision同时导出了这两个名字见init.py。迁移/升级时代码若使用旧名仍能正常工作。源码级共通细节与注意事项场景类型自适应所有标注器的annotate(scene, key_points)都通过ensure_cv2_image_for_class_method装饰器包装来自 utils/conversion.py因此scene同时接受numpy.ndarray与PIL.Image.Image返回值与输入类型一致若传入其他类型则抛出TypeError。文档示例统一用image.copy()传入避免在原始帧上原地修改。统一基类与返回约定六个标注器除VertexLabelAnnotator单独定义外都继承自抽象基类BaseKeyPointAnnotator接口完全一致便于在视频处理管线里互相替换空KeyPoints一律原样返回scene不会中断逐帧处理流程。可见性过滤语义顶点、边、标签三类标注都尊重visible掩码椭圆族还会额外跳过协方差矩阵异常的点。若想把低置信度关键点“不删除、只不画”可参考KeyPoints.visible的文档建议key_points.visible key_points.keypoint_confidence 0.3core.py。模块路径与兼容性核心实现位于supervision.key_points.annotators与supervision.key_points.core单复数形式为key_points。仓库中旧命名空间的 keypoint/init.py 会在导入时发出弃用警告提示从0.27.0起改用supervision.key_points请在新代码中统一使用后者。对应测试覆盖见 tests/key_points。结语从画点VertexAnnotator、连线EdgeAnnotator、打标签VertexLabelAnnotator到把预测不确定度可视化为多层椭圆VertexEllipseArea/Outline/HaloAnnotatorSupervision 的关键点标注器家族覆盖了姿态、手部与面部等主流应用的全部基础渲染需求。实际使用时只需遵循三条规则先用统一适配器得到sv.KeyPoints再按需在data中提供协方差数据椭圆族最后选择标注器并合理设置visible掩码即可获得干净、专业且利于排查的可视化结果。【免费下载链接】supervisionWe write your reusable computer vision tools. 项目地址: https://gitcode.com/GitHub_Trending/su/supervision创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/8 20:24:48

前端人别卷大模型算法,AI Agent转型正当时

最近被问得最多的问题,已经从“前端还能不能干”变成“我是不是得去卷大模型算法了”。很多前端朋友看到大模型算法工程师的薪资包和岗位热度,心里多少有点痒:是不是该回头补数学、刷论文,直接转算法岗才算赶上这波 AI 浪潮&#…

2026/9/8 20:24:48

DeepSeek Harness 实战指南:从安装到自动化工作流

先聊个现象:现在一搜“DeepSeek Harness”,出来的全是安装教程、插件排名、渗透模式、局域网访问这些词,看起来五花八门,其实背后就一件事——大家不想再当网页版聊天框的“手动搬运工”了。DeepSeek Harness 说白了就是给 DeepSe…

2026/9/8 20:24:48

条件GAN在垃圾邮件数据填补中的实战应用

简介:本资源是一份面向深度学习初学者与数据科学实践者的GAN缺失值填补实战代码包,聚焦Spam邮件数据集中的缺失特征修复问题,适用于机器学习预处理、学术研究及课程设计等场景。压缩包共2个文件(127KB),含核…

2026/9/8 21:30:01

自动化代码评审工具Hermes实战:从部署到调优,提升PR审查效率

写这篇东西之前,我刚刚处理完一个被 Hermes 拦下来的问题 PR。事情的背景很直白:我维护的仓库长期被 GitHub 上的 PR 队列压得喘不过气,于是接入了自动化代码评审工具 Hermes,让每个 PR 合入前都先过一遍机器审查。这套组合拳打下…

2026/9/8 21:30:01

ESP32-S3端侧AI架构:语音唤醒与端云协同实战

1. 项目概述:一块开发板如何长出“思考力”与“陪伴感”你手边那块不到三十块钱的 ESP32-S3 开发板,它真就只是个带 Wi-Fi 和蓝牙的微控制器吗?我去年在调试一个儿童语音唤醒玩具时,第一次把麦克风阵列焊上 S3,又用 Mi…

2026/9/8 21:30:01

Vibe Coding越改越乱?这些方法让AI生成代码可控

最近一个周末,我终于把一个拖了两周的页面功能做完了,结果不到三个小时,它又碎了。我心里很清楚问题出在哪:这个功能不是我从零手写的,而是从头到尾“聊”出来的——对,就是现在大家口中那个 Vibe Coding。…

2026/9/8 21:30:01

DeepSeek Harness Preset 详解:四种模式参数逻辑与适用场景全对比

如果你也在折腾 DeepSeek Harness,应该会有这样的经历:同样一句“写个爬虫”,切到极简模式它只丢给你 5 行核心代码,切到 PTC 模式它给你带异常处理的完整脚本,切到创造模式它反而问你“这个爬虫是为了采集数据&#x…

2026/9/8 21:24:59

零成本启动不是梦!北京这些孵化器对初创团队超友好

对于很多刚成立的初创团队来说,在创业初期最现实的难题就是资金有限,想要实现零成本起步,寻找合适的孵化器就成为了十分关键的选择。不少创业者都会提出疑问:初创团队想零成本起步,北京有什么推荐的孵化器?…

2026/9/8 7:15:10

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/8 7:15:10

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/8 0:01:49

踩多轮坑才跑通|OpenClaw 3.1.0 双平台本地 AI 自动化搭建实操实录

🔹 工具简述 OpenClaw 是一款备受开发者与办公人群青睐的开源本地智能工具,凭借离线本地运行、可视化图形面板、全流程自主任务处理三大核心特点,积累了众多忠实用户。与普通对话类 AI 产品不同,它能够直接调用电脑的软硬件操作权…

2026/9/8 0:01:50

拒绝复杂命令行,Hermes Agent 一键包快速解锁智能办公能力

🔍前言 不少想要体验 Hermes Agent 办公能力的使用者,往往会被复杂的环境配置拦住使用脚步。手动下载匹配依赖、反复调整系统目录、处理命令行持续报错、修复权限异常、补全丢失核心文件等一系列操作,对普通使用者而言门槛较高,很…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/7 22:45:59

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码