yolov5数据集json转txt(yolo格式)一对多

新手分享学习过程

一个 JSON 文件包含了多张图片以及对应的标注信息

如下图这种

在yolov5的虚拟环境下直接复制代码可用

需要更改的有四处地方均已在如下代码中标注

import json
import os
import shutil
from PIL import Image

# 读取 JSON 文件11111111111
json_file = r'D:\yolov5-7.0\03_2499_0962-2461\IR_label.json'  # 替换为你的 JSON 文件路径
with open(json_file, 'r') as f:
    data = json.load(f)

# 获取图片数量
# 假设每个 gt_rect 对应一张图片,根据你的数据结构调整
num_images = len(data['gt_rect'])

# 创建 YOLO 标签文件夹(如果不存在)2222222222222
labels_dir = 'yolo_dataset1/labels'
os.makedirs(labels_dir, exist_ok=True)

# 创建 YOLO 图片文件夹(如果不存在)3333333333333
images_dir = 'yolo_dataset1/images'
os.makedirs(images_dir, exist_ok=True)

# 确定类别 ID
# 这里假设只有一个类别,类别 ID 是 0,如果有多个类别,需要根据类别名称分配对应的 ID
category_id = 0

# 假设 JSON 数据中包含图片的文件路径
#image_paths = data['image_path']  # 请根据你的 JSON 数据结构调整
# 如果 JSON 文件中没有图片路径,手动设置图片路径
image_dir = r'D:\yolov5-7.0\03_2499_0962-2461'  # 图片所在的目录444444444444
image_names = [f"{i+1:06d}.jpg" for i in range(num_images)]  # 假设图片文件名是 "000001.jpg", "000002.jpg", 等等

image_paths = [os.path.join(image_dir, name) for name in image_names]

# 遍历每张图片的标注信息并生成 YOLO 格式的标签文件
for i in range(num_images):
    # 获取边界框信息
    gt_rect = data['gt_rect'][i]
    x_min = gt_rect[0]
    y_min = gt_rect[1]
    width = gt_rect[2]
    height = gt_rect[3]

    # 获取图片路径并加载图片
    image_path = image_paths[i]
    img = Image.open(image_path)
    img_width = img.width
    img_height = img.height

    # 计算中心坐标、宽度和高度(YOLO 格式要求归一化到 0-1 范围)
    x_center = (x_min + width / 2) / img_width
    y_center = (y_min + height / 2) / img_height
    normalized_width = width / img_width
    normalized_height = height / img_height

    # 创建 YOLO 格式的标签内容
    yolo_label = f"{category_id} {x_center:.6f} {y_center:.6f} {normalized_width:.6f} {normalized_height:.6f}"

    # 写入标签文件
    label_file = os.path.join(labels_dir, f"{i+1:06d}.txt")
    with open(label_file, 'w') as f:
        f.write(yolo_label)

    # 将图片复制到 YOLO 图片文件夹(如果需要)
    shutil.copy(image_path, os.path.join(images_dir, os.path.basename(image_path)))

代码运行后

 

 一张图片对应一个标注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值