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

如何将YOLO检测得到的类别名称保存至CSV或TXT文件

YOLOv4视频检测类别结果导出CSV/TXT实现方案

原有代码问题梳理

  • count_objects函数传入by_class = False,返回结果不是按类别维度的统计数据,无法获取单个类别的检测结果
  • 循环写入CSV时错误写入全量允许检测类别列表allowed_classes,没有写入实际检测到的类别名称/统计值
  • CSV文件未指定完整存储路径,生成文件会散落在工程根目录,不便于后续管理
  • csv模块导入放在条件分支内部,不符合Python编码规范,重复触发分支时会重复执行导入逻辑

修正后的CSV导出代码

# 所有导入放在文件头部
import os
import csv

# 原有检测逻辑保留,以下为CSV导出分支的修正代码
if FLAGS.csv:
    # 统一检测结果存储路径
    result_root = os.path.join(os.getcwd(), 'detections')
    crop_path = os.path.join(result_root, 'crop', video_name)
    csv_path = os.path.join(result_root, 'class_detections.csv')
    # 递归创建缺失目录
    os.makedirs(crop_path, exist_ok=True)
    
    # 按类别统计检测结果
    counted_classes = count_objects(pred_bbox, by_class = True, allowed_classes=allowed_classes)
    
    # 写入CSV,表头为【类别名称, 检测次数】
    with open(csv_path,'w',newline ='', encoding='utf-8') as f:
        writer = csv.writer(f)
        # 写入表头
        writer.writerow(['类别名称', '检测次数'])
        # 遍历统计结果逐行写入
        for class_name, count in counted_classes.items():
            writer.writerow([class_name, count])

代码修改说明

  • 把by_class参数改为True,获取按类别分组的检测统计结果
  • 新增CSV表头,可读性更强,指定utf-8编码避免中文类别名乱码
  • 用os.makedirs的exist_ok=True参数替代try-except判断目录是否存在,代码更简洁
  • 所有存储路径统一放在detections目录下,便于统一管理检测结果
  • 写入内容改为实际检测到的类别名称和对应的出现次数,符合后续分析需求

TXT格式导出实现

如果需要导出为TXT格式,替换CSV写入部分的代码即可:

txt_path = os.path.join(result_root, 'class_detections.txt')
with open(txt_path, 'w', encoding='utf-8') as f:
    f.write("类别名称\t检测次数\n")
    for class_name, count in counted_classes.items():
        f.write(f"{class_name}\t{count}\n")

内容的提问来源于stack exchange,提问作者AITHARAJU SAI HEMANTH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:06:00