1. 项目概述:YOLO-POSE关键点数据格式转换工具
在计算机视觉领域,YOLO-POSE作为实时人体姿态估计模型,其训练数据的准备往往成为项目落地的第一道门槛。最近在实际项目中,我遇到了一个典型问题:团队使用X-AnyLabeling标注工具生成的JSON格式标注文件,需要转换为YOLO-POSE模型所需的TXT格式。这个看似简单的转换过程,实际上涉及坐标归一化、关键点映射、数据校验等多个技术环节。
本文分享的Python脚本,正是为解决这一痛点而生。它不仅实现了JSON到TXT的格式转换,还包含三大实用功能:
- 支持指定特定标签进行选择性转换
- 自动清理无效图片数据
- 提供可视化验证模块
这个方案已经在我们的工业质检项目中稳定运行,累计处理超过50万张标注图像。下面将详细解析实现原理和实战技巧。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心设计思路与技术选型
2.1 数据格式差异分析
X-AnyLabeling生成的JSON标注文件与YOLO-POSE需要的TXT格式存在显著差异:
JSON标注结构示例:
json复制{
"imageWidth": 1920,
"imageHeight": 1080,
"shapes": [
{
"label": "person",
"shape_type": "rectangle",
"points": [[100,200],[300,400]]
},
{
"label": "left_eye",
"shape_type": "point",
"points": [[150,250]]
}
]
}
YOLO-POSE目标格式:
code复制<class_id> <center_x> <center_y> <width> <height> <x1> <y1> <v1> ... <xn> <yn> <vn>
其中关键差异点包括:
- 坐标表示:JSON使用绝对像素坐标,YOLO要求归一化到[0,1]区间
- 结构差异:JSON自由格式 vs YOLO的固定顺序
- 关键点属性:YOLO需要额外标注可见性(v)状态
2.2 技术实现路线
基于上述分析,我们采用分阶段处理策略:
-
矩形框处理阶段:
- 提取所有
shape_type为rectangle的标注 - 计算中心点坐标和宽高
- 进行归一化处理(除以图像宽高)
- 提取所有
-
关键点处理阶段:
- 遍历指定关键点标签(如left_eye、right_eye等)
- 对每个点执行坐标归一化
- 转换difficult属性为可见性标识(0=不可见,1=遮挡,2=可见)
-
数据校验阶段:
- 自动删除无对应标注的图片文件
- 验证坐标值是否超出[0,1]范围
3. 核心代码实现解析
3.1 矩形框归一化处理
python复制def process_json_rectangle(json_path, keypoint_labels, PROCESS_CATEGORY):
with o
