检测结果不保存?cv_resnet18_ocr-detection输出路径解析
1. 问题本质:不是“不保存”,而是“你没找到它”
很多用户第一次使用 cv_resnet18_ocr-detection WebUI 时,点完“开始检测”或“批量检测”,看到界面上显示了带框的图片和识别文本,却怎么也找不到生成的文件——既没弹出下载窗口,也没在项目目录里看到新文件。于是发问:“检测结果不保存?”
其实,模型本身完全支持自动保存,只是它的输出路径设计得非常“工程化”:不依赖浏览器下载弹窗,也不默认放在桌面或根目录,而是严格遵循时间戳+结构化子目录的规则,存放在项目内部一个固定但容易被忽略的位置。这既是为多任务并发处理做准备,也是为了方便后续自动化调用和结果归档。
本篇就带你彻底搞懂:结果到底存在哪?为什么你看不见?如何快速定位、批量提取、甚至自定义路径?所有答案,都藏在outputs/这个看似安静的文件夹里。
2. 输出路径全解析:从时间戳到文件名,一一分解
2.1 根目录与动态时间戳目录
所有检测结果统一存放在项目根目录下的outputs/文件夹中。这不是一个静态目录,而是一个按执行时间自动生成的嵌套结构:
outputs/ └── outputs_20260105143022/ ← 关键!这是每次运行生成的唯一时间戳目录 ├── visualization/ │ └── detection_result.png └── json/ └── result.json- 时间戳格式:
outputs_YYYYMMDDHHMMSS(年月日时分秒),例如outputs_20260105143022表示 2026 年 1 月 5 日 14 点 30 分 22 秒启动的检测任务。 - 为什么用时间戳?
避免多次运行结果互相覆盖;支持并行任务隔离;便于按时间回溯历史结果;天然适配日志分析与定时清理脚本。
注意:WebUI 界面中不会主动提示这个路径,也不会在终端打印完整路径。你需要自己进入服务器,用
ls -lt outputs/查看最新生成的目录。
2.2 两大核心子目录:visualization 与 json
每个时间戳目录下,固定包含两个子目录,分工明确:
| 子目录 | 存放内容 | 特点 |
|---|---|---|
visualization/ | 带检测框的可视化图片(PNG 格式) | 文件名为detection_result.png(单图模式)或{原文件名}_result.png(批量模式) |
json/ | 结构化检测数据(JSON 格式) | 文件名为result.json,含坐标、文本、置信度、耗时等全部元信息 |
关键确认点:只要 WebUI 界面右下角显示“检测完成!”或画廊中能看到预览图,就说明这两个子目录一定已成功写入,不存在“不保存”的情况。
2.3 批量检测的命名逻辑:不再叫detection_result.png
当你上传多张图片(如invoice.jpg,receipt.png,idcard.bmp)并点击“批量检测”时,系统会为每张图单独生成一对结果文件,命名严格关联原始文件名:
outputs/outputs_20260105143022/ ├── visualization/ │ ├── invoice_result.png ← 对应 invoice.jpg │ ├── receipt_result.png ← 对应 receipt.png │ └── idcard_result.png ← 对应 idcard.bmp └── json/ ├── invoice_result.json ├── receipt_result.json └── idcard_result.json- 好处:结果与源图一一对应,避免混淆;
- ❌ 坑点:如果你只搜索
detection_result.png,在批量模式下将一无所获。
3. 实操指南:三步定位 + 一键提取结果文件
3.1 第一步:快速进入最新结果目录(Linux 终端)
无需记忆长路径,用一条命令直达:
cd /root/cv_resnet18_ocr-detection && cd "$(ls -td outputs/outputs_* | head -n1)"这条命令做了三件事:
cd /root/cv_resnet18_ocr-detection:进入项目根目录;ls -td outputs/outputs_*:列出outputs/下所有以outputs_开头的目录,并按修改时间倒序;head -n1:取第一个(即最新);cd:直接跳转进去。
执行后,你的终端当前路径就是类似/root/cv_resnet18_ocr-detection/outputs/outputs_20260105143022的目录。
3.2 第二步:查看并验证结果文件是否存在
在该目录下,执行:
ls -R你会清晰看到:
.: json/ visualization/ ./json: idcard_result.json invoice_result.json receipt_result.json result.json ./visualization: idcard_result.png invoice_result.png receipt_result.png detection_result.png提示:
result.json和detection_result.png是单图模式的产物;批量模式下它们依然存在,但仅作为第一张图的副本,主结果在带_result后缀的文件中。
3.3 第三步:批量复制所有可视化结果到指定位置(高效导出)
假设你想把本次所有带框图片集中拷贝到/home/user/ocr_results方便查看,执行:
mkdir -p /home/user/ocr_results cp visualization/*.png /home/user/ocr_results/如果只想导出 JSON 数据用于程序解析:
cp json/*.json /home/user/ocr_results/效果:几秒钟内,所有结果已脱离 WebUI 目录,任你编辑、分享、导入数据库。
4. 进阶技巧:自定义输出路径与自动化归档
4.1 修改默认输出根目录(永久生效)
虽然 WebUI 默认写入outputs/,但你可通过修改配置文件实现路径重定向。打开项目根目录下的config.py(或webui_config.py):
# config.py OUTPUT_ROOT = "/data/ocr_outputs" # ← 将这一行改为你的目标路径然后重启服务:
bash stop_app.sh && bash start_app.sh重启后,所有新生成的结果将自动落盘到/data/ocr_outputs/下,且仍保持时间戳子目录结构。适合:
- 将结果存到大容量挂载盘;
- 与 NAS 或对象存储同步;
- 配合定时脚本自动压缩归档。
4.2 用 Python 脚本自动提取最新结果(免手动 cd)
把下面这段代码保存为fetch_latest_result.py,放在项目根目录下,每次运行即可自动打包最新结果:
#!/usr/bin/env python3 import os import glob import shutil from datetime import datetime # 定位 outputs 目录 output_dir = "outputs" latest_dir = max(glob.glob(os.path.join(output_dir, "outputs_*")), key=os.path.getmtime) # 创建打包目录 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") zip_name = f"ocr_results_{timestamp}.zip" shutil.make_archive(zip_name.replace(".zip", ""), 'zip', latest_dir) print(f" 已打包最新结果:{zip_name}") print(f" 来源目录:{latest_dir}")运行方式:
python fetch_latest_result.py输出:ocr_results_20260105_143022.zip—— 双击即可在 Windows/Mac 上解压查看。
5. 常见误区与避坑指南
5.1 误区一:“下载结果”按钮没反应 = 没保存?
WebUI 界面中的“下载结果”按钮,仅对单图模式有效,且只下载visualization/detection_result.png。它不会触发批量结果下载,也不会生成 ZIP 包。如果你在批量模式下点击它,界面可能无反馈——这不是 Bug,是设计如此。 正确做法:始终通过终端cp或脚本提取。
5.2 误区二:JSON 文件里没有原始图片名?
打开result.json,你会发现"image_path": "/tmp/test_ocr.jpg"这样的路径。这是临时上传路径,不代表源文件名。真正对应的原始文件名,记录在json/目录下同名的_result.json文件中。例如invoice_result.json的开头会有:
{ "original_filename": "invoice.jpg", "texts": [...], "boxes": [...] }所以,要关联源图与结果,请认准xxx_result.json,而非顶层result.json。
5.3 误区三:训练微调的模型也存在outputs/里?
不。训练输出路径是独立的:workdirs/。outputs/只负责推理结果(检测+识别),workdirs/负责训练产物(权重、日志、评估报告)。两者绝不混用,避免误删。
6. 总结:掌握路径逻辑,告别“找不到结果”的焦虑
cv_resnet18_ocr-detection 的结果保存机制,不是缺陷,而是面向生产环境的严谨设计。它用时间戳保证可追溯性,用结构化目录保障可维护性,用分离式存储(visualization/json)支撑多用途消费。
你只需要记住三个关键动作:
- 找:
cd "$(ls -td outputs/outputs_* | head -n1)"—— 一秒进入最新结果; - 看:
ls -R—— 确认文件真实存在; - 取:
cp visualization/*.png /your/path/—— 按需提取,干净利落。
从此,“检测结果不保存”将不再是问题,而是一个你已完全掌控的确定性流程。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。