尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Label Studio 图像关键点标注(Keypoint Labeling)实战:从配置模板到坐标导出

Label Studio 图像关键点标注(Keypoint Labeling)实战:从配置模板到坐标导出 Label Studio 图像关键点标注Keypoint Labeling实战从配置模板到坐标导出【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio关键点标注Keypoint Labeling是计算机视觉数据标注中最精细的任务类型之一标注者不需要绘制矩形或轮廓而是直接在图像上点选具有明确语义的点位如人脸五官、人体关节、飞机引擎与机翼等为后续的人脸关键点检测、人体姿态估计等模型训练提供数据。本指南以 Label Studio 官方模板 image_keypoints.md 为核心完整讲解基于KeyPointLabels标签的标注配置方法、全部参数语义、输出结果 JSON 格式并结合仓库源码说明点选工具在前端编辑器的实际实现帮助你从零搭建一个可直接运行、可导出标准化结果的关键点标注项目。模板核心配置三行标签完成关键点标注模板提供的标注配置非常精简完整内容如下View KeyPointLabels namekp-1 toNameimg-1 Label valueFace backgroundred / Label valueNose backgroundgreen / /KeyPointLabels Image nameimg-1 value$img / /View整个配置只有三个组成部分View所有标注配置必须包裹在 View 标签内KeyPointLabels控制标签Control Tag负责在图像上添加可标注的关键点并绑定到图像对象Image对象标签Object Tag声明待标注的图像数据来源。仓库中label_studio/annotation_templates/computer-vision/keypoints/config.yml提供了同款官方模板其附带的应用场景说明给出了关键点标注的典型行业用途人体姿态估计、人脸关键点检测、运动表现分析、医学诊断、增强现实、动作捕捉、健身追踪、手势识别、自动驾驶安全、驾驶员监控、生物特征认证与动画制作等并列举了 OpenPose、MediaPipe、PoseNet、DensePose、Face、Dlib 等常见下游模型。逐标签拆解配置语义1. KeyPointLabels 控制标签KeyPointLabels namekp-1 toNameimg-1name元素名称标注结果中from_name字段会引用该值toName绑定到待标注图像的名称即下方Image标签的name。它决定了关键点工具出现在工具栏中并在点选时要求先选中一个标签类别。2. Label 标签定义关键点类别Label valueFace backgroundred / Label valueNose backgroundgreen /Label是单个关键点类别value指定类别名称background指定该类别的关键点在画布上的显示颜色十六进制色值。background默认值为#36B37EselectedColor激活状态下标签文字颜色默认#ffffff。3. Image 对象标签声明数据源Image nameimg-1 value$img /value$img引用任务数据中的img字段该字段存放图像的 URL 或本地路径。提示若任务中每个标注只需要一个关键点类别可以省略Label子标签改用更精简的KeyPoint标签不带标签类别直接点选详见后文“不带类别的简化方案”。关键点标注标签的参数全解析完整的关键点标注配置除了模板示例外还支持大量可调参数。下表来自 keypointlabels 参数说明列出了KeyPointLabels标签的全部参数ParamTypeDefaultDescriptionnamestring元素名称toNamestring待标注图像的名称[choice]single|multiplesingle配置每个关键点只能选择单个标签还是可以选择多个标签[maxUsages]number每个任务中一个标签最多可被使用的次数[showInline]booleantrue标签是否在同一行内显示[opacity]float0.9关键点的透明度[strokeWidth]number1关键点描边宽度[snap]pixel|nonenone是否将关键点吸附到图像像素choice参数在需要一个关键点同时命中多个语义时很有用例如同一骨骼节点既属于肢体又属于躯干maxUsages则适合限制类别出现次数如规定每张图最多标注 5 个Facesnappixel适合需要亚像素级精度的医学影像等场景可将关键点精确吸附到像素格点。Label标签同样拥有独立参数见 label 参数说明除value与background外常用的还有ParamTypeDefaultDescription[selected]booleanfalse是否预选中该标签[maxUsages]number该标签在每个任务中的最大使用次数[hint]string鼠标悬停时的提示文本[hotkey]string该标签的快捷键不指定时自动生成[alias]string标签别名[size]stringmedium标签文字大小[category]int导出时label-studio-converter用于 YOLO/COCO 格式的标签排序编号以人脸关键点为例一个更完整的配置可以是View KeyPointLabels namekp-face toNameimg-1 choicesingle strokeWidth2 opacity0.8 snappixel Label valueLeft Eye background#FF0000 hotkey1 maxUsages1 / Label valueRight Eye background#00FF00 hotkey2 maxUsages1 / Label valueNose Tip background#0000FF hotkey3 maxUsages1 / Label valueMouth Corner background#FFFF00 hotkey4 maxUsages2 / /KeyPointLabels Image nameimg-1 value$image zoomtrue zoomControltrue / /View这里同时展示了Image标签的常用增强参数完整参数见 image 参数说明zoomtrue允许鼠标滚轮缩放、zoomControltrue在工具栏显示缩放控件——对于需要精细点选的关键点任务缩放能力几乎是必备的。不带类别的简化方案KeyPoint 标签如果整个任务只有一种关键点语义比如所有点位都是人体关节点可以不使用KeyPointLabels改用KeyPoint标签省去每次点选前切换标签类别的操作View KeyPoint namekp-1 toNameimg-1 / Image nameimg-1 value$img / /ViewKeyPoint标签的参数见 keypoint 参数说明与KeyPointLabels高度相似但多了颜色相关参数ParamTypeDefaultDescriptionnamestring元素名称toNamestring待标注图像名称[opacity]float0.9关键点透明度[fillColor]string#8bad00关键点填充颜色十六进制[strokeWidth]number1描边宽度[strokeColor]string#8bad00描边颜色十六进制[smart]boolean显示智能工具用于交互式预标注[smartOnly]boolean仅显示智能工具用于交互式预标注[snap]pixel|nonenone是否吸附到图像像素其中的smart/smartOnly参数与 Label Studio 的 ML 交互式预标注能力挂钩开启后可在关键点附近调用后端模型辅助定位属于进阶用法。标注结果与导出格式百分比坐标关键点标注完成后每个关键点对应一个标注结果Result对象。根据 keypointlabels 结果参数说明字段结构如下NameTypeDescriptionoriginal_widthnumber原始图像宽度像素original_heightnumber原始图像高度像素image_rotationnumber图像旋转角度度valueObject关键点数值对象value.xnumberx 坐标按图像尺寸百分比0-100value.ynumbery 坐标按图像尺寸百分比0-100value.widthnumber点的大小按图像尺寸百分比0-100一个典型的关键点标注结果 JSON{ original_width: 1920, original_height: 1280, image_rotation: 0, value: { x: 3.1, y: 8.2, width: 2, keypointlabels: [Car] } }仓库中web/libs/editor/src/examples/image_keypoints/annotations/0.json提供了一个真实的多关键点标注示例与文档给出的百分比坐标系完全一致坐标值归一化到 0-100keypointlabels为类别名数组{ result: [ { id: hqudA4A3U4, from_name: tag, to_name: img, source: $image, type: keypointlabels, value: { x: 49.6, y: 52.340425531914896, width: 0.6666666666666666, keypointlabels: [Hello] } }, { id: Rz9oHDXIwG, from_name: tag, to_name: img, source: $image, type: keypointlabels, value: { x: 47.733333333333334, y: 52.765957446808514, width: 0.6666666666666666, keypointlabels: [World] } } ] }需要注意的工程要点from_name对应配置中KeyPointLabels的nameto_name对应Image的name坐标为相对百分比而非像素绝对值x、y取值范围 0-100width代表点在图上显示的尺寸占比。这保证了不同分辨率的图像标注结果可直接对齐复用要还原像素坐标用x / 100 * original_width、y / 100 * original_height计算即可original_width、original_height记录在结果顶层字段中type字段固定为keypointlabels这是下游解析与导出如 label-studio-converter 将关键点转换为 COCO/YOLO 等格式时识别该结果类型的依据。源码视角关键点工具的前端实现关键点标注并非简单的画一个点其交互逻辑在前端编辑器中有明确的实现路径值得标注流程设计者了解。工具定义web/libs/editor/src/tools/KeyPoint.js中定义了KeyPointTool其tagTypes明确声明该工具支持的控制标签类型为[keypointlabels, keypoint]即上面两种配置方案的底层入口都是同一个工具get tagTypes() { return { stateTypes: keypointlabels, controlTagTypes: [keypointlabels, keypoint], }; }点选交互clickEv动作实现了单击落点逻辑见 KeyPoint.js——当使用keypointlabels类型且尚未选中任何标签时!c.isSelected点击不会生成关键点只有选中某个标签类别后才允许落点并通过createRegion创建关键点区域。这印证了文档中先选标签、再点图像的操作语义。区域模型创建出的关键点在web/libs/editor/src/regions/KeyPointRegion.jsx中管理负责关键点的渲染、选中与坐标计算。吸附行为snap参数的实现与Image对象的像素坐标换算相关配置解析可追溯至web/libs/editor/src/tags/control/KeyPointLabels.jsx当snappixel时落点坐标会被吸附到最近的整数像素位置。这些源码证据说明模板配置中的每个参数都对应编辑器内真实的交互与坐标计算逻辑理解参数语义有助于精确控制标注行为。配套资源与进一步阅读围绕关键点标注主题仓库中还有以下可直接对照使用的资源KeyPointLabels 标签参考文档标签完整说明与示例KeyPoint 标签参考文档无类别关键点方案Label 标签参考文档类别标签参数详解Image 标签参考文档图像对象标签参数详解关键点标注模板配置官方模板含行业应用与关联模型说明关键点标注示例数据真实标注结果样例。快速上手三步创建项目在 Label Studio 中新建一个图像标注项目进入 Labeling Setup 页面粘贴配置将上文模板核心配置中的 HTML 配置粘贴到标签配置编辑器保存导入数据并标注上传包含img字段图像 URL 或路径的任务数据进入标注界面先选中标签类别如 Face/Nose再在图像上单击即可放置关键点可通过Image的缩放参数辅助精确定位完成后在导出界面选择所需格式如 COCO、JSON获取标准化标注结果。【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表