news 2026/7/3 16:50:28

YOLOv9输出格式解析:JSON/CSV导出可能性探讨

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLOv9输出格式解析:JSON/CSV导出可能性探讨

YOLOv9输出格式解析:JSON/CSV导出可能性探讨

1. 技术背景与问题提出

目标检测作为计算机视觉中的核心任务之一,其结果的可解释性与后续处理能力直接影响实际应用的效率。YOLOv9 作为 YOLO 系列的最新演进版本,在精度与速度之间实现了新的平衡,广泛应用于工业质检、智能安防、自动驾驶等领域。然而,尽管模型推理性能不断提升,原始输出格式的局限性逐渐显现——默认以图像标注和文本文件(如.txt)形式保存检测结果,难以直接对接数据分析、可视化或业务系统。

在工程实践中,用户往往需要将检测结果结构化存储,以便进行统计分析、生成报告或集成至后端服务。常见的需求包括:

  • 将每帧图像的检测框、类别、置信度导出为JSON 格式,便于 Web 服务调用;
  • 汇总多张图片的结果为CSV 文件,用于批量分析与可视化;
  • 实现自动化流水线中对检测结果的程序化读取与处理。

因此,本文聚焦于 YOLOv9 的输出机制,深入解析其默认输出结构,并探讨实现 JSON 与 CSV 格式导出的技术路径,结合官方镜像环境提供可落地的代码实践方案。

2. YOLOv9 默认输出结构解析

2.1 输出目录组织

当执行detect_dual.py进行推理时,YOLOv9 会自动生成一个带有时间戳或自定义名称的输出目录(如runs/detect/yolov9_s_640_detect),其内部结构如下:

runs/ └── detect/ └── yolov9_s_640_detect/ ├── horses.jpg # 原始输入图像 ├── labels/ # 每张图对应的检测结果(.txt格式) │ └── horses.txt └── result.json # (可选)若手动添加逻辑可生成

其中,labels/*.txt是核心检测结果文件,采用 YOLO 标注格式,每一行代表一个检测框:

<class_id> <center_x> <center_y> <width> <height> <confidence>

所有坐标均为归一化值(0~1 范围),confidence表示该预测的置信度。

2.2 数据结构本质分析

从数据角度看,每个.txt文件对应一张图像的所有检测实例,本质上是一个二维表格数据,包含字段:

  • 图像名(隐含于文件名)
  • 检测对象类别 ID 与名称
  • 边界框参数(归一化或像素级)
  • 置信度分数

这种扁平化的文本格式适合训练阶段的数据加载,但不利于跨图像聚合分析或系统集成。例如,无法直接使用 Pandas 加载多个.txt文件进行整体统计,也无法被前端框架轻松解析。


3. JSON/CSV 导出的技术实现路径

3.1 扩展 detect_dual.py 实现结构化输出

为了支持 JSON 和 CSV 导出,我们需要修改 YOLOv9 的推理脚本detect_dual.py,在检测完成后收集所有结果并统一写入结构化文件。

修改思路:
  1. 在推理循环中捕获每张图像的检测结果(pred张量);
  2. 将张量解码为 Python 字典列表,包含类别、坐标、置信度等信息;
  3. 汇总所有图像结果,分别导出为 JSON 和 CSV。
核心代码实现:
# 新增:导入依赖库 import json import pandas as pd import os from pathlib import Path # === 在 detect_dual.py 中找到推理主循环附近插入以下逻辑 === # 初始化结果容器 all_results = [] # 假设在 run() 函数内,img, path, im 等变量已定义 for i, (path, img, im, vid_cap, s) in enumerate(dataset): # ...原有前向推理代码... pred = model(im) pred = non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms) for det in pred: # detections per image if len(det): # 获取图像尺寸 h, w = im.shape[2:] result_item = { "image_path": str(Path(path).name), "detections": [] } for *xyxy, conf, cls in det: # 转换为 xywh 归一化格式 xywh = (torch.tensor(xyxy).view(1, 4)).xyxy2xywh / torch.tensor([w, h, w, h]) xywh = [round(x.item(), 4) for x in xywh[0]] detection = { "class_id": int(cls.item()), "class_name": names[int(cls)], "confidence": round(conf.item(), 4), "bbox": { "x_center": xywh[0], "y_center": xywh[1], "width": xywh[2], "height": xywh[3] } } result_item["detections"].append(detection) all_results.append(result_item)
导出为 JSON 与 CSV:
# 推理结束后导出 save_dir = Path('runs/detect/yolov9_s_640_detect') # 导出 JSON json_path = save_dir / 'detection_results.json' with open(json_path, 'w', encoding='utf-8') as f: json.dump(all_results, f, indent=2, ensure_ascii=False) print(f"✅ JSON 结果已保存至: {json_path}") # 导出 CSV(展平为表格) rows = [] for res in all_results: img_name = res["image_path"] for det in res["detections"]: row = { "image": img_name, "class_id": det["class_id"], "class_name": det["class_name"], "confidence": det["confidence"], "x_center": det["bbox"]["x_center"], "y_center": det["bbox"]["y_center"], "width": det["bbox"]["width"], "height": det["bbox"]["height"] } rows.append(row) df = pd.DataFrame(rows) csv_path = save_dir / 'detection_results.csv' df.to_csv(csv_path, index=False) print(f"✅ CSV 结果已保存至: {csv_path}")

3.2 使用建议与注意事项

  • 性能影响:对于大规模图像集,建议限制单次推理数量或启用分批导出。
  • 路径兼容性:确保save_dir存在,可通过save_dir.mkdir(parents=True, exist_ok=True)创建。
  • 编码问题:中文类名需设置ensure_ascii=False避免乱码。
  • 字段扩展:可根据需求增加timestampmodel_version等元信息。

4. 工程优化与最佳实践

4.1 封装为独立模块

为提升复用性,可将导出功能封装为独立模块export_utils.py

# export_utils.py import json import pandas as pd from pathlib import Path def save_detection_results(results, save_dir): save_dir = Path(save_dir) save_dir.mkdir(parents=True, exist_ok=True) # JSON 导出 with open(save_dir / 'results.json', 'w') as f: json.dump(results, f, indent=2, ensure_ascii=False) # CSV 导出 rows = [] for res in results: for det in res.get("detections", []): row = { "image": res["image_path"], "class_id": det["class_id"], "class_name": det["class_name"], "confidence": det["confidence"], **det["bbox"] } rows.append(row) pd.DataFrame(rows).to_csv(save_dir / 'results.csv', index=False)

detect_dual.py中只需导入并调用:

from export_utils import save_detection_results # ... save_detection_results(all_results, save_dir)

4.2 支持命令行参数控制导出行为

通过argparse添加开关参数,实现灵活控制:

parser.add_argument('--export-json', action='store_true', help='export results to JSON') parser.add_argument('--export-csv', action='store_true', help='export results to CSV') # 使用方式 if opt.export_json or opt.export_csv: save_detection_results(all_results, save_dir)

调用命令示例:

python detect_dual.py \ --source './data/images/' \ --weights './yolov9-s.pt' \ --name test_output \ --export-json \ --export-csv

5. 总结

5.1 技术价值总结

YOLOv9 虽未原生支持 JSON/CSV 输出,但其开放的代码架构允许开发者轻松扩展输出能力。通过对detect_dual.py的合理改造,我们实现了:

  • 结构化数据导出:将分散的.txt检测结果整合为统一的 JSON 与 CSV 文件;
  • 工程可用性强:支持批量处理、命令行控制、错误容错;
  • 无缝集成现有生态:CSV 可供 Excel/Pandas 分析,JSON 可被 REST API 直接返回。

5.2 实践建议

  1. 优先使用模块化设计:将导出逻辑抽离,避免污染主推理流程;
  2. 按需启用导出功能:大型部署场景下应通过参数控制是否生成结构化文件;
  3. 结合日志系统记录元数据:如模型版本、输入源、运行时间等,增强可追溯性。

通过上述方法,YOLOv9 不仅可用于高效推理,还能成为智能系统中数据驱动闭环的关键一环。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 10:52:06

科哥FST ITN-ZH二次开发揭秘:5大实用功能解析

科哥FST ITN-ZH二次开发揭秘&#xff1a;5大实用功能解析 你是不是也刷到过那个界面清爽、操作丝滑的科哥FST WebUI&#xff1f;不少技术爱好者都在问&#xff1a;这到底是怎么改出来的&#xff1f;为什么比原版好用这么多&#xff1f;今天我就带你深入拆解——科哥FST ITN-ZH…

作者头像 李华
网站建设 2026/7/1 22:02:39

5分钟快速解密网易云ncm文件:从加密到MP3的完整转换指南

5分钟快速解密网易云ncm文件&#xff1a;从加密到MP3的完整转换指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的歌曲无法在其他播放器播放而烦恼吗&#xff1f;ncm格式的加密限制让你的音乐收藏被困在单一…

作者头像 李华
网站建设 2026/7/2 3:05:11

零基础入门:用云端GPU运行你的第一个人脸检测模型

零基础入门&#xff1a;用云端GPU运行你的第一个人脸检测模型 你是不是也经常在刷短视频、拍照App时&#xff0c;看到人脸自动打码、美颜贴纸跟着脸动、照片自动识别人物——这些功能背后其实都离不开一个关键技术&#xff1a;人脸检测。听起来很高大上&#xff1f;好像需要懂…

作者头像 李华
网站建设 2026/6/13 16:32:12

终极指南:如何彻底解决Krita-AI-Diffusion插件模型缺失问题

终极指南&#xff1a;如何彻底解决Krita-AI-Diffusion插件模型缺失问题 【免费下载链接】krita-ai-diffusion Streamlined interface for generating images with AI in Krita. Inpaint and outpaint with optional text prompt, no tweaking required. 项目地址: https://gi…

作者头像 李华
网站建设 2026/6/26 4:38:28

一键启动通义千问2.5-7B:AI结构化数据处理实战

一键启动通义千问2.5-7B&#xff1a;AI结构化数据处理实战 1. 引言 随着大语言模型在企业级应用中的深入落地&#xff0c;如何高效部署并利用其处理复杂业务场景下的结构化数据&#xff0c;成为工程实践中的关键挑战。通义千问Qwen2.5系列作为阿里云最新推出的大型语言模型&a…

作者头像 李华
网站建设 2026/6/12 22:17:22

CefFlashBrowser:专业级Flash兼容性解决方案完整指南

CefFlashBrowser&#xff1a;专业级Flash兼容性解决方案完整指南 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 在当今主流浏览器全面弃用Flash技术的背景下&#xff0c;CefFlashBrowser…

作者头像 李华