vott标注文件csv转yolov5脚本

import os
import csv

# 定义 COCO 类别编号和类别名称映射表
CLASS_MAPPING = {
    'ziji': 0,
    'npc': 1,
    'gebulin': 2,
    'rennanyao': 3,
    'rennvyao': 4,
    'rensiqi': 5
}

# 指定一个适当的值来计算 YOLOv5 格式的bboxes
MAX_X = 1544
MAX_Y = 720

# 指向包含CSV文件的路径和输出目录的完整路径。
csv_file_path = 'data/video/biaozhu/vott-csv-export/teon-export.csv'
output_dir = 'data/video/biaozhu/2/'

with open(csv_file_path, newline='') as f:
    reader = csv.reader(f)
    next(reader, None)  # 跳过标题行
    for row in reader:
        filepath, xmin, ymin, xmax, ymax, class_name = row
        label_num = CLASS_MAPPING[class_name]  # 获取Yolov5标签编号

        x_center = ((float(xmax) + float(xmin)) / 2) / MAX_X  # 计算 bbox 中心点横坐标(x)
        y_center = ((float(ymax) + float(ymin)) / 2) / MAX_Y  # 计算 bbox 中心点纵坐标(y)
        width = (float(xmax) - float(xmin)) / MAX_X  # 计算 bboxes 宽度
        height = (float(ymax) - float(ymin)) / MAX_Y  # 计算 bboxes 高度

        label_file = os.path.join(output_dir, os.path.splitext(os.path.basename(filepath))[0] + '.txt')

        with open(label_file, mode='a') as f2:
            f2.write('{} {:.6f} {:.6f} {:.6f} {:.6f}\n'.format(label_num, x_center, y_center, width, height))

print('转换完成')