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

发布时间:2026/10/27 8:00:47

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/10/25 9:57:32

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

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

2026/10/24 19:23:16

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

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

2026/10/24 22:51:41

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

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

2026/10/27 7:58:35

动态规划与栈解法:最长有效括号问题详解

1. 题目解析与核心思路Longest Valid Parentheses(最长有效括号)是LeetCode上的一道经典动态规划/栈应用题目,编号32,难度等级为Hard。题目要求在一个仅包含(和)的字符串中,找出最长的有效括号子串的长度。有效括号子串…

2026/10/27 7:58:35

Oracle 11gR2 DB-PSU 220118 补丁落地与避坑指南

简介:Oracle 数据库 11.2.0.4 版本的 2022 年 1 月 PSU 补丁包(p33477185),面向需要为 Linux x86-64 平台数据库补齐安全修复与性能改进的 DBA 和运维人员。压缩包约 436.52MB,共 3658 个文件,涵盖大量 so …

2026/10/27 7:58:35

Prompt、Skill与Agent:大模型应用开发中的选型指南

1. 从一个真实困惑说起:为什么这三个词总被混着用刚接触大模型应用开发那阵子,我在一个技术群里看到有人问:"我想让模型帮我自动整理会议纪要,到底该写 Prompt 还是搭个 Agent?"底下回答五花八门&#xff0c…

2026/10/27 7:58:35

百度千帆API实现AI图片生成全攻略

1. 千帆API与AI图片生成技术解析百度智能云的千帆大模型平台近期开放了AI图片生成API接口,这为开发者提供了一种快速集成AI绘图能力的解决方案。不同于需要本地部署的Stable Diffusion等开源模型,千帆API采用云端服务模式,开发者只需通过简单…

2026/10/27 7:58:35

Agent开发必读:先拆能力再改skill,告别盲目调优

1. 为什么“先拆能力”比“先改 skill”更重要做 Agent 开发的人,几乎都经历过这样一个循环:发现 Agent 在某类任务上表现不行,第一反应是去改 prompt、加工具、换模型,或者干脆把整个 skill 重写一遍。改完之后跑几个 case&#…

2026/10/27 7:53:35

AI大模型实战:从入门到部署全流程指南

1. 项目概述:AI大模型实战全攻略这个教程的诞生源于我过去三年在AI领域的实战经验。记得第一次接触大模型时,面对海量的专业术语和复杂的代码库,我花了整整两周才跑通第一个demo。现在,我将这些经验浓缩成一套从零开始的完整学习路…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/27 0:59:21

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价

“模式选错”的典型代价 摘要 在软件工程中,设计模式、架构模式、并发模式乃至团队协作模式的选择,往往在项目早期就决定了后续的开发效率和维护成本。本文通过多个真实场景,剖析“模式选错”带来的典型代价——包括返工成本、技术债务累积、…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式20_新手推荐路径

新手推荐路径 摘要 在 AI 辅助开发工具快速普及的今天,新手面对最多的困惑往往不是"工具够不够强",而是"我该从哪一步开始用"。本文提出一条经过实践验证的三阶段学习路径:先从 Ask(问答式交互)起…

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

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

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