如何用Python将自定义数据集CSV转换为YOLOv8单图文本格式?
实现方案(Python)
假设你的CSV文件结构如下(列名可根据实际调整):
image_name,category,x_coords,y_coords
1.png,cat,10 20;30 40;50 60
1.png,dog,70 80;90 100;110 120
2.png,bird,130 140;150 160;170 180
这里用分号分隔每个坐标点,你可以根据实际存储格式调整解析逻辑。
步骤代码
import csv import os # 配置路径 csv_path = "your_dataset.csv" # 替换成你的CSV文件路径 output_dir = "image_annotations" # 输出txt的文件夹 # 创建输出文件夹(不存在则自动创建) os.makedirs(output_dir, exist_ok=True) # 用字典按图片名分组存储区域数据 image_regions = {} # 读取CSV并分组 with open(csv_path, mode='r', encoding='utf-8') as csv_file: csv_reader = csv.DictReader(csv_file) for row in csv_reader: img_name = row['image_name'] # 替换成你的CSV中图片名称的列名 # 整理当前区域的信息,格式可自定义 region_info = f"{row['category']} {' '.join(row['x_coords'].split(';'))} {' '.join(row['y_coords'].split(';'))}" # 初始化图片对应的区域列表 if img_name not in image_regions: image_regions[img_name] = [] image_regions[img_name].append(region_info) # 生成每个图片的txt文件 for img_name, regions in image_regions.items(): txt_path = os.path.join(output_dir, f"{img_name}.txt") with open(txt_path, mode='w', encoding='utf-8') as txt_file: # 每个区域占一行 txt_file.write('\n'.join(regions))
关键说明
- 替换代码中的
csv_path和output_dir为你的实际路径 - 调整
row['image_name']、row['category']等字段名,匹配你的CSV列名 - 区域信息的格式可以自定义:如果你的坐标是分散的列(如x1、y1、x2、y2),直接拼接对应字段即可
- 代码会自动将同一图片的所有区域写入对应txt文件,每个区域单独占一行
内容的提问来源于stack exchange,提问作者ebruk
相关产品推荐
相关产品推荐

