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

Darknet-YOLOv3目标检测:预测结果无法保存至JSON/TXT的问题咨询

解决Darknet Demo模式下保存检测结果到JSON/TXT的问题

别担心,作为计算机视觉新手遇到这种问题太正常了,我来帮你理清问题所在,以及给出几种可行的解决方法~

你当前命令的问题

你用了 -out result.json 参数,但在Darknet的 detector demo 模式下,这个参数并不生效。-out 参数是给 detector test(批量测试图片)模式设计的,用来保存检测结果到JSON,而demo模式默认只负责实时展示或保存视频,不会处理这个参数。

解决方案

方案1:重定向控制台输出到TXT文件(最简单快捷)

你已经加了 -ext_output 参数,这会让控制台输出每帧的详细检测结果(包括目标类别、置信度、坐标)。我们可以把控制台的输出直接重定向到TXT文件:

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights -dont_show test_vid.mp4 -i 0 -out_filename output.avi -ext_output > result.txt 2>&1
  • > 表示把正常输出(检测结果)写入 result.txt
  • 2>&1 表示把错误信息也写入同一个文件,避免丢失关键日志

生成的TXT文件里,每一条检测结果会是类似这样的格式:

person: 99% (left_x: 100 top_y: 200 width: 150 height: 300)

如果之后需要转换成JSON,可以用Python写个简单的脚本解析这个TXT文件,整理成结构化的JSON格式。

方案2:修改源码实现JSON输出(适合需要原生JSON的情况)

如果一定要直接生成JSON格式的结果,需要修改Darknet的源码:

  1. 打开 darknet/src/demo.c 文件
  2. 找到处理检测结果的部分(比如在 draw_detections 函数附近,或者打印结果的 printf 语句处)
  3. 添加代码,把每个目标的信息(类别、置信度、坐标、帧号)格式化成JSON字符串,写入到指定的文件中
  4. 重新编译Darknet:在终端执行 make 命令
  5. 再次运行你的demo命令,就能生成JSON结果文件了

方案3:拆分视频为帧,用test模式批量处理(适合不需要实时预览的场景)

如果不需要实时处理视频,只是想得到检测结果和生成视频,可以先把视频拆成单帧图片,再用批量测试模式:

  1. 用ffmpeg拆分视频(需要先安装ffmpeg):
ffmpeg -i test_vid.mp4 frames/frame_%04d.jpg

(frames 是提前创建好的文件夹)
2. 生成包含所有帧路径的文本文件:

ls frames/*.jpg > frames.txt
  1. 用 detector test 批量处理并保存JSON结果:
./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights -ext_output -out result.json < frames.txt
  1. 最后如果需要把帧重新合成视频,可以用:
ffmpeg -i frames/frame_%04d.jpg -c:v libx264 -r 30 output.avi

额外注意事项

  • 建议拉取Darknet的最新代码重新编译,旧版本可能存在参数支持不全的问题
  • 如果用方案1的TXT转JSON,Python脚本可以参考遍历每一行,提取类别、置信度、坐标,然后组织成列表写入JSON文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:42:39