yolov8-pose关键点标注文件转换代码——json格式转txt格式

1、yolov8数据集txt文件的两种格式(两种格式都可用于关键点训练)

(yolov8pose官方:Pose Estimation Datasets Overview - Ultralytics YOLO Docs

格式1:<类别ID> <边框中心点X坐标> <边框中心点Y坐标> <关键点X坐标> <关键点Y坐标>......

格式2:<类别ID> <边框中心点X坐标> <边框中心点Y坐标> <关键点X坐标> <关键点Y坐标> <可见性>.......

2、json转txt

import json
import os
from pathlib import Path

def convert_to_txt(json_data, save_path):
    # 获取图片的宽度和高度
    img_width = json_data["imageWidth"]
    img_height = json_data["imageHeight"]

    txt_lines = []

    for shape in json_data["shapes"]:
        points = shape["points"]

        if shape["shape_type"] == "rectangle":
            # 处理矩形框 (4个点)
            x_min = min(points[0][0], points[2][0])
            x_max = max(points[0][0], points[2][0])
            y_min = min(points[0][1], points[2][1])
            y_max = max(points[0][1], points[2][1])

            x=f"{x_min:.6f}"
            y=f"{x_max:.6f}"
            # 计算中心点坐标和宽高
            x_center = (x_min + x_max) / 2 / img_width
            y_center = (y_min + y_max) / 2 / img_height

            x_center=f"{x_center:.6f}"
            y_center=f"{y_center:.6f}"

            width = (x_max - x_min) / img_width
            height = (y_max - y_min) / img_height

            width=f"{width:.6f}"
            height=f"{height:.6f}"
            # 类别索引默认为0
            class_index = 0
            txt_lines.append(f"{class_index} {x_center} {y_center} {width} {height}")

        elif shape["shape_type"] == "point":
            # 处理关键点 (单个点),只保留归一化后的坐标
            x = points[0][0] / img_width
            y = points[0][1] / img_height
            x=f"{x:.6f}"
            y=f"{y:.6f}"
            txt_lines.append(f"{x} {y}")


            # 如果 group_id 不为 null, 将其添加到坐标后面
            group_id = shape["group_id"] if shape["group_id"] is not None else ""
            group_id=f"{group_id:.6f}"
            # 将group_id添加到输出中
            if group_id:
                txt_lines.append(f"{group_id}")


    # 将结果写入txt文件
    with open(save_path, 'w') as f:
        f.write(" ".join(txt_lines))  # 每个数据占据一行
    print(f"转换完成,保存至: {save_path}")


def convert_folder(json_folder, txt_folder):
    # 确保目标txt文件夹存在
    os.makedirs(txt_folder, exist_ok=True)

    # 遍历json文件夹中的每一个文件
    for json_file in Path(json_folder).glob("*.json"):
        # 读取JSON数据
        with open(json_file, 'r') as f:
            json_data = json.load(f)

        # 确定保存的txt文件路径,使用相同的文件名
        txt_file_name = json_file.stem + ".txt"
        txt_save_path = os.path.join(txt_folder, txt_file_name)

        # 转换并保存txt
        convert_to_txt(json_data, txt_save_path)


# 假设你的JSON文件夹和目标TXT文件夹路径如下:
json_folder = r"C:\Users\admin\Desktop\DataPoseID\json"
txt_folder = r"C:\Users\admin\Desktop\DataPoseID\txt"

# 调用文件夹转换函数
convert_folder(json_folder, txt_folder)

说明:

我是在标注时通过设置Group ID的值来表示可见性。如果设置了了deseription来表示可见性则把下面代码的group_id改为deseription。

如果想要使用格式1进行训练,则把下面代码删除即可。

            # 如果 group_id 不为 null, 将其添加到坐标后面
            group_id = shape["group_id"] if shape["group_id"] is not None else ""
            group_id=f"{group_id:.6f}"
            # 将group_id添加到输出中
            if group_id:
                txt_lines.append(f"{group_id}")

###我主页的另一篇博客做了 制作和训练 自定义的yolov8关键点数据集的全过程。

### YOLOv8姿态估计用于行人动作识别教程与实现 #### 介绍 YOLOv8 是一种先进的目标检测框架,在物体检测领域表现出色。通过引入姿态估计模块,可以进一步扩展其应用范围至行人动作识别。这不仅依赖于高质量的数据集和模型训练,还需要合理的算法设计来提升精度。 #### 数据准备 为了有效实施基于 YOLOv8 的姿势估计并应用于人类行为分析,需收集或选用合适的多模态数据源[^1]。理想情况下,这些资料应包含丰富的标注信息,如人体关节位置及其对应的动作类别标签。例如 COCO Keypoints 或 MPII Human Pose 数据库都是不错的选择。 #### 模型构建 在原有 YOLO 架构基础上增加分支网络专门处理关键点预测任务。此部分借鉴自 OpenPose 等成熟方案的设计思路,采用卷积神经元组合作业完成特征提取工作,并最终输出各部位坐标值以及置信度得分。 ```python import ultralytics.yolo.engine.model.YOLO as yolo_model model = yolo_model('yolov8n-pose.yaml') # 加载预定义配置文件创建实例对象 ``` #### 训练过程 利用上述提及的带有关节点标记的信息作为监督信号指导学习进程;同时调整超参数以优化性能表现。值得注意的是,考虑到实际应用场景中的复杂性和多样性,建议尽可能多地积累样本量级以便更好地泛化到未知环境中去。 ```python from pathlib import Path data_dir = Path('/path/to/dataset') train_set = data_dir / 'annotations/train.json' val_set = data_dir / 'annotations/valid.json' # 设置路径和其他选项... results = model.train(data=train_set, epochs=100, imgsz=640) ``` #### 测试评估 当模型收敛后即可进入验证环节,此时可借助测试集中预留的部分案例来进行效果评测。除了常规指标外(比如 mAP@0.5),还可以考虑加入针对特定场景下的定制化考量因素,从而更全面地衡量系统的实用价值。 ```python metrics = model.val(val_set) # 执行验证操作获取各项统计结果 print(metrics.box.map) # 输出边界框匹配率等重要数值 ``` #### 应用部署 最后一步则是将经过充分调试后的版本迁移到生产环境当中投入使用。鉴于实时性需求较高的特点,推荐优先考察边缘计算设备上的运行效率,确保能够满足低延迟响应的要求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值