report-detect/TEST_ACCURACY_BATCH_README.md

11 KiB
Raw Blame History

test_accuracy_batch_full.py - 使用指南

📋 概述

test_accuracy_batch_full.py 是一个用于批量测试PDF报告中CMA中国计量认证标志和机构印章识别准确性的Python脚本。它使用OCR技术自动提取CMA编号和机构名称并与预期结果进行对比验证。

主要功能

  • CMA标志识别使用模板匹配和OCR技术提取CMA编号
  • 印章文字识别:检测红色印章并提取机构名称
  • 批量测试支持批量处理多个PDF文件
  • 准确率统计自动计算CMA和机构名称的识别准确率
  • 详细报告生成HTML和JSON格式的测试报告
  • 可视化输出:生成印章检测、解扭曲的可视化图像

🚀 快速开始

环境要求

# Python版本
Python 3.8+

# 必需依赖
pip install paddlepaddle
pip install paddleocr
pip install opencv-python
pip install numpy
pip install pillow

# 可选依赖用于PaddleOCR-VL高级功能
pip install paddleocr[doc-parser]

基础用法

# 运行批量测试(使用默认设置)
python test_accuracy_batch_full.py --batch

# 指定处理数量
python test_accuracy_batch_full.py --batch --batch-size 20

# 使用ppocr_v5模型推荐速度更快
python test_accuracy_batch_full.py --ocr-model ppocr_v5 --batch

📦 命令行参数

基本参数

参数 类型 默认值 说明
--pdf string - 单个PDF文件的路径桥接模式
--output-dir string bridge_output 输出目录
--ocr-model choice paddleocr_vl OCR模型选择ppocr_v5paddleocr_vl
--batch flag False 启用批量测试模式
--batch-size int 20 处理的PDF数量
--pdf-names string - 逗号分隔的PDF名称列表

高级参数

参数 类型 默认值 说明
--disable-paddleocrvl flag False 禁用PaddleOCRVL备份识别
--paddleocrvl-timeout int 60 PaddleOCRVL超时时间

🎯 使用场景

场景1快速批量测试

使用ppocr_v5模型进行快速测试

python test_accuracy_batch_full.py \
  --ocr-model ppocr_v5 \
  --batch \
  --batch-size 20

特点

  • 速度快(~18秒/PDF
  • 🎯 CMA准确率85-100%
  • 📊 机构准确率27-100%

场景2高精度识别

使用paddleocr_vl模型获得更高准确率

python test_accuracy_batch_full.py \
  --ocr-model paddleocr_vl \
  --batch \
  --batch-size 20 \
  --paddleocrvl-timeout 300

特点

  • 🎯 识别准确率更高
  • ⏱️ 处理时间较长每个印章最多5分钟
  • 💪 需要更多内存至少3GB可用

场景3禁用PaddleOCRVL最快

完全禁用PaddleOCRVL以获得最快速度

python test_accuracy_batch_full.py \
  --ocr-model ppocr_v5 \
  --batch \
  --batch-size 20 \
  --disable-paddleocrvl

特点

  • 最快速度
  • 💾 内存占用最小
  • ⚠️ 识别准确率可能略低

场景4处理单个PDF

使用桥接模式处理单个PDF

python test_accuracy_batch_full.py \
  --pdf path/to/report.pdf \
  --output-dir my_output

📂 文件结构

输入文件

src/test/resources/data/pdfs/
├── 1.pdf
├── 2.pdf
├── WTS2025-21283.pdf
└── ... (测试PDF文件)

src/test/resources/data/results.json
└── 包含每个PDF的预期CMA编号和机构名称

输出文件

test_reports_full/
├── summary.html              # 测试总结报告
├── test_report.json          # JSON格式详细结果
│
├── 1.pdf/
│   ├── doc_page.png          # 原始页面图像
│   ├── doc_layout_viz.png    # 版面分析可视化
│   ├── cma_roi.png           # CMA标志区域
│   ├── seal_crop_0.png       # 印章裁剪
│   ├── seal_unwarp_0.png     # 印章解扭曲
│   ├── seal_polar_viz_0.png  # 极坐标可视化
│   ├── seal_marked_0.png     # 页面标记
│   └── index.html            # 单个PDF详细报告
│
└── ... (其他PDF的输出)

🔍 配置文件

ground truth (results.json)

{
  "1.pdf": {
    "cma": "20211901583",
    "institution": "深圳市中安质量检验认证有限公司"
  },
  "WTS2025-21283.pdf": {
    "cma": "220020349627",
    "institution": "威凯检测技术有限公司"
  }
}

CMA模板

脚本会自动从CMA模板文件加载

  • src/main/resources/models/cma_logo_template.png(主模板)
  • cma_extraction_template_primary.py(主模板提取逻辑)

📊 结果解读

测试报告示例

================================================================================
BATCH TEST COMPLETED - FINAL RESULTS
================================================================================
Total Processed: 20

CMA Code Results:
  Exact Match: 17/20 (85.0%)
  Partial Match: 1/20 (5.0%)
  Acceptable Match: 0/20 (0.0%)
  No Match: 2/20 (10.0%)
  ** CMA Accuracy: 85.0% **

Institution Name Results:
  Exact Match: 5/18 (27.8%)
  Partial Match: 1/18 (5.6%)
  Acceptable Match: 3/18 (16.7%)
  No Match: 9/18 (50.0%)
  ** Institution Accuracy: 50.0% (including acceptable) **

匹配类型说明

匹配类型 说明 相似度要求
exact 完全匹配 100%
partial 部分匹配 >= 80%
acceptable 可接受匹配 >= 60%
no_match 不匹配 < 60%

性能指标

Performance:
  Total Time: 385.2s (6.4min)
  Average Time: 19.3s per PDF
  CMA Time: 9.7s per PDF
  Seal Time: 9.3s per PDF

🐛 故障排除

问题1内存不足

错误信息

Insufficient memory for PaddleOCRVL (2.6 GB < 3.0 GB)

解决方案

# 关闭其他应用程序
# 或使用--disable-paddleocrvl参数
python test_accuracy_batch_full.py --batch --disable-paddleocrvl

问题2PaddleOCRVL超时

错误信息

PaddleOCRVL recognition timeout (60s) for seal_crop_0.png

解决方案

# 增加超时时间到5分钟
python test_accuracy_batch_full.py --batch --paddleocrvl-timeout 300

问题3OCR识别率低

可能原因

  • PDF质量不佳
  • 印章模糊或变形
  • CMA标志不清晰

解决方案

  • 尝试不同的OCR模型
  • 增加--paddleocrvl-timeout时间
  • 手动检查PDF图像质量

问题4找不到results.json

错误信息

Ground truth file not found: src/test/resources/data/results.json

解决方案

# 检查文件路径
ls -la src/test/resources/data/results.json

# 如果不存在,需要创建该文件

⚙️ 高级配置

自定义CMA模板

  1. 准备CMA标志图像PNG格式白色背景
  2. 放置在:src/main/resources/models/cma_logo_template.png
  3. 脚本会自动加载并使用

调整匹配阈值

编辑脚本中的以下参数:

# 机构名称匹配阈值
INSTITUTION_MATCH_THRESHOLDS = {
    'exact': 100.0,      # 100%相似度
    'partial': 80.0,     # 80%相似度
    'acceptable': 60.0   # 60%相似度
}

# CMA编号正则表达式
CMA_PATTERNS = [
    r'2\d{10}',      # 11位以2开头
    r'\d{11,12}'     # 11-12位数字
]

印章检测参数

# 红色印章检测
RED_COLOR_LOWER = [0, 100, 100]   # HSV下界
RED_COLOR_UPPER = [10, 255, 255]  # HSV上界

# 最小印章尺寸
MIN_SEAL_SIZE = 50  # 像素

📈 性能优化建议

1. 选择合适的OCR模型

模型 速度 准确率 内存 推荐场景
ppocr_v5 中等 快速测试、大批量
paddleocr_vl 精确验证、小批量

2. 调整超时时间

# 快速测试(可能超时)
--paddleocrvl-timeout 30

# 标准测试(推荐)
--paddleocrvl-timeout 60

# 高准确率测试
--paddleocrvl-timeout 300

3. 批量处理

# 分批处理大量PDF
for batch in 1 2 3 4 5; do
  python test_accuracy_batch_full.py \
    --batch \
    --batch-size 20 \
    --pdf-names $(get_pdf_names_for_batch $batch)
done

🔗 相关文档

🛠️ 开发指南

添加新的OCR模型

  1. 在脚本中添加模型初始化代码
  2. 实现OCR识别函数
  3. 在主流程中集成新模型
  4. 更新命令行参数

调试技巧

# 启用详细日志
export PYTHONUNBUFFERED=1
python test_accuracy_batch_full.py --batch --batch-size 1

# 查看中间结果
ls -la test_reports_full/1.pdf/

# 检查日志
grep "WARNING\|ERROR" test_reports_full/test_report.json

测试单个功能

# 测试CMA提取
from test_accuracy_batch_full import extract_cma_from_page
result = extract_cma_from_page(page_img, ocr_engine)

# 测试印章检测
from test_accuracy_batch_full import detect_red_seals
seals = detect_red_seals(page_img, output_dir)

📝 更新日志

v1.2.0 (2026-03-03)

  • 添加PaddleOCRVL超时保护机制
  • 添加--paddleocrvl-timeout参数
  • 添加--disable-paddleocrvl参数
  • 🐛 修复PaddleOCRVL无限期挂起问题
  • 🐛 修复OCR结果解析的IndexError
  • 🎨 改进CMA模板匹配算法
  • 📚 完善文档和测试报告

v1.1.0

  • 支持批量测试
  • 支持多种OCR模型
  • 生成HTML可视化报告
  • 🎨 添加印章解扭曲可视化

v1.0.0

  • 🎉 初始版本
  • CMA标志识别
  • 印章文字提取
  • 准确率统计

💡 最佳实践

  1. 首次使用:先用小批量测试(--batch-size 5
  2. 模型选择速度优先用ppocr_v5准确率优先用paddleocr_vl
  3. 超时设置:根据实际网络和硬件情况调整--paddleocrvl-timeout
  4. 结果验证:检查test_report.json和HTML报告
  5. 错误处理关注WARNING和ERROR日志

🤝 贡献指南

  1. Fork项目
  2. 创建特性分支:git checkout -b feature/new-feature
  3. 提交更改:git commit -am 'Add new feature'
  4. 推送分支:git push origin feature/new-feature
  5. 创建Pull Request

📄 许可证

本项目采用内部许可证,仅供公司内部使用。

📞 联系方式

  • 项目维护:开发团队
  • 问题反馈通过项目Issue提交
  • 技术支持:联系技术负责人

最后更新2026-03-03 版本v1.2.0 维护者Claude Sonnet 4.6 & 开发团队