labelme使用教程yolo格式人体姿态
时间: 2025-04-19 20:27:50 浏览: 49
### Labelme 使用教程:创建 YOLO 格式的人体姿态数据集
#### 一、YOLO 关键点检测数据集格式
YOLOv5 和 YOLOv7 的关键点检测数据集通常遵循特定的文件结构和标注格式。对于每张图像,YOLO 需要一个对应的 `.txt` 文件来描述其中的关键点位置。
- **文件夹结构**
- `images/`: 存储原始图片
- train/
- val/
- `labels/`: 存储对应于上述图片的标签文件
- train/
- val/
- **标签文件内容**
每一行代表一个人体实例中的所有关键点坐标及其类别 ID:
```
<class_id> <x_center> <y_center> <width> <height>
<x1> <y1> ...
<xN> <yN>
```
这里 `<class_id>` 是目标类别的索引编号;`(x_center, y_center)` 表示边界框中心点相对于整幅图的比例坐标;而 `(width, height)` 则表示该矩形区域宽度高度占整个画面百分比大小[^1]。
#### 二、Labelme 安装与使用
##### (一)Labelme 安装
为了能够顺利运行 labelme 工具并完成后续操作,建议按照官方文档说明来进行环境配置:
```bash
pip install labelme
```
如果遇到依赖项冲突等问题,则可以考虑通过虚拟环境中独立安装此软件包的方式加以规避[^2]。
##### (二)Labelme 使用方法简介
启动命令行界面后输入如下指令即可打开图形化用户界面 (GUI),从而方便快捷地标记各类物体轮廓线或兴趣区(ROI):
```bash
labelme
```
此时会弹出应用程序窗口,在菜单栏选择 "Open" 来加载待处理的照片素材,并利用左侧工具栏内的选项绘制多边形形状覆盖住感兴趣的目标对象。完成后记得保存当前进度为 JSON 文件形式以便后期进一步加工处理[^3]。
#### 三、JSON 转换至 YOLO 格式
当完成了对人体部位特征点的手动标记之后,下一步就是把这些信息转化为适合喂给神经网络训练使用的标准格式——即前述提到过的 YOLO 文本记录样式。为此可编写一段简单的 Python 脚本来批量读取由 labelme 输出的结果集(`*.json`),再依据既定规则重新组织成新的表述方式写入相应目录下的纯文本文件中去。
下面给出了一段用于执行这种转换工作的示范代码片段:
```python
import json
from pathlib import Path
def convert_labelme_to_yolo(json_file_path: str, output_dir: str):
with open(json_file_path, 'r') as f:
data = json.load(f)
image_width = data['imageWidth']
image_height = data['imageHeight']
shapes = []
for shape in data["shapes"]:
points = shape["points"]
class_name = shape["label"]
# Assuming single keypoints are stored directly under the points list.
keypoint_x = sum([p[0] for p in points]) / len(points)
keypoint_y = sum([p[1] for p in points]) / len(points)
normalized_keypoint_x = round(keypoint_x / image_width, 6)
normalized_keypoint_y = round(keypoint_y / image_height, 6)
shapes.append((normalized_keypoint_x, normalized_keypoint_y))
txt_filename = Path(output_dir).joinpath(Path(json_file_path).stem + ".txt")
lines = ["{} {} {}".format(class_names.index(class_name), *shape) for shape in shapes]
with open(txt_filename, 'w') as file:
file.write('\n'.join(lines))
if __name__ == "__main__":
input_jsons_directory = "./annotations/"
output_labels_directory = "./labels/"
all_files = list(Path(input_jsons_directory).glob('*.json'))
for file in all_files:
convert_labelme_to_yolo(str(file), output_labels_directory)
```
这段脚本实现了从 labelme 导出的 JSON 文件到 YOLO 所需 TXT 文件之间的自动化转变过程。需要注意的是,具体实现细节可能会因个人需求不同有所调整,比如支持更多种类的姿态定义或是优化性能等方面的工作都可能成为未来改进的方向之一。
阅读全文
相关推荐

















