You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将LabelImg生成的YOLO格式TXT转为CSV并解决多标注行读取问题

YOLO标注TXT批量转CSV修正代码

你的问题核心是原代码仅调用了一次readline()读取单个TXT文件的首行标注,没有遍历文件内的所有标注行,同时输出列结构也没有拆分出单独的坐标字段,修正后代码如下:

import os
import glob
import pandas as pd
import numpy as np

# 配置参数
LABEL_DIR = r'D:\karami\Labeled\train1\labels'
IMG_WIDTH = 1024
IMG_HEIGHT = 1024

os.chdir(LABEL_DIR)
txt_files = glob.glob('*.txt')
final_data = []
image_id = 0

for txt_path in txt_files:
    # 同一个TXT对应同一张图,所有标注共用同一个image_id
    with open(txt_path, 'r', encoding='utf-8') as f:
        lines = f.readlines()
    for line in lines:
        line = line.strip()
        # 跳过空行
        if not line:
            continue
        parts = line.split()
        try:
            # YOLO格式:[类别id, x_center_norm, y_center_norm, width_norm, height_norm]
            x_center = float(parts[1]) * IMG_WIDTH
            y_center = float(parts[2]) * IMG_HEIGHT
            bbox_width = float(parts[3]) * IMG_WIDTH
            bbox_height = float(parts[4]) * IMG_HEIGHT
            final_data.append([
                image_id,
                IMG_WIDTH,
                IMG_HEIGHT,
                x_center,
                y_center,
                bbox_width,
                bbox_height
            ])
        except Exception as e:
            print(f"文件 {txt_path} 存在不符合YOLO格式的行:{line}")
    # 处理完当前文件所有标注后,image_id自增
    image_id += 1

# 生成CSV
df = pd.DataFrame(final_data, columns=[
    'image_id', 'img_width', 'img_height', 'x_center', 'y_center', 'width', 'height'
])
df.to_csv("yolo_annotations.csv", index=False)
核心修改点
  • 替换单行读取逻辑为遍历TXT文件的所有行,每个标注行单独生成一条CSV记录
  • 同一图片对应的所有标注复用同一个image_id,全部标注处理完成后再自增ID
  • 直接拆分输出4个独立坐标字段,符合要求的CSV结构
  • 新增空行跳过逻辑、错误日志输出具体问题文件,方便排查异常标注

内容的提问来源于stack exchange,提问作者Joju

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:57:02