report-detect/archive/docs/3PDF_SEAL_INVESTIGATION_REP...

5.9 KiB
Raw Blame History

3.pdf 印章识别问题调查报告

问题描述

用户疑问为什么3.pdf识别出来的机构名称是"县市场监督管理局行政审批",而不是解扭曲后印章中的实际文字?

期望识别:印章中应该包含"深圳市中安质量检验认证有限公司"相关的文字

调查结果

1. 当前OCR识别结果

解扭曲印章图像 (seal_unwarp_0.png)

  • 识别文字'naotoeeeeeeeiee'
  • 状态 完全乱码
  • 置信度0.0000(所有字符)

裁剪印章图像 (seal_crop_0.png)

  • 识别文字'naotoeeeeeeeiee'
  • 状态 完全乱码
  • 置信度0.0000(所有字符)

2. HTML报告显示

HTML报告中显示的内容

  • 提取的机构县市场监督管理局\n行政审批
  • 印章识别文字县市场监督管理局\n行政审批专用章

结论HTML报告显示的是之前某次测试的旧结果,不是当前识别的结果。

根本原因分析

问题1OCR识别完全失败

当前使用的PaddleOCR (PP-OCRv5) 对这个印章的识别完全失败,输出无意义字符。

可能原因

  1. 解扭曲质量问题

    • 虽然视觉上印章图像看起来还可以
    • 但解扭曲过程可能引入了OCR无法处理的伪影
    • 或者文字的曲率、角度仍然不适合OCR
  2. OCR模型限制

    • PP-OCRv5可能不适合识别这种类型的印章文字
    • 印章文字可能过于艺术化或变形
    • 文字与背景的对比度不够
  3. 图像预处理不当

    • 可能需要额外的预处理步骤(二值化、去噪等)
    • 当前的预处理流程可能不适合这个印章

问题2HTML报告显示旧数据

HTML报告显示的不是当前的识别结果说明报告生成逻辑可能有问题或者测试运行时覆盖了旧的报告文件。

详细分析

解扭曲参数(从之前的测试结果)

{
  "center": [133, 133],
  "radius": 123,
  "start_theta_deg": 2.7006293373952883,
  "extent_deg": 350.0,
  "num_polygons": 7,
  "crop_size": [266, 266],
  "unwarp_size": [751, 128]
}

识别失败的具体表现

  1. 所有字符都是英文字母n, a, o, t, e, i
  2. 置信度全部为0说明OCR非常不确定
  3. 重复的'e'字符这是典型的OCR幻觉hallucination

建议解决方案

短期解决方案

  1. 使用不同的OCR模型

    • 尝试PaddleOCR-VL如果内存足够
    • 或者其他OCR引擎
  2. 改进图像预处理

    • 添加图像增强步骤
    • 调整二值化阈值
    • 去除噪声
  3. 调整解扭曲参数

    • 尝试不同的起始角度
    • 调整极坐标展开的范围

中期解决方案

  1. 添加OCR结果验证

    • 检查识别结果是否包含中文字符
    • 如果识别出的是英文字母/乱码,应该标记为失败
  2. 使用多个OCR方法

    • 主要方法:解扭曲 + OCR
    • 备份方法1直接裁剪图像OCR
    • 备份方法2PaddleOCR-VL
    • 备份方法3全页OCR提取机构名称
  3. 改进错误处理

    • 当OCR识别失败时不应该使用乱码结果
    • 应该回退到其他方法

长期解决方案

  1. 训练专门的印章识别模型

    • 针对中国圆形印章进行训练
    • 处理弧形文字排列
  2. 改进解扭曲算法

    • 使用更先进的极坐标展开方法
    • 添加文字矫正步骤
  3. 添加人工审核机制

    • 对于识别置信度低的结果
    • 自动标记需要人工审核的案例

当前代码问题

问题1使用乱码结果

当前代码没有检查OCR结果的有效性即使识别出的是乱码'naotoeeeeeeeiee',也会被当作机构名称使用。

问题2缺少验证逻辑

应该添加验证逻辑:

def is_valid_chinese_text(text):
    """检查文本是否包含有效的中文内容"""
    if not text or len(text.strip()) == 0:
        return False

    # 检查是否包含中文字符
    chinese_char_count = sum(1 for c in text if '\u4e00' <= c <= '\u9fff')

    # 中文字符应该占主要部分
    return chinese_char_count >= len(text) * 0.5

# 在使用OCR结果前验证
if not is_valid_chinese_text(ocr_result['text']):
    logger.warning(f"OCR结果无效非中文: '{ocr_result['text']}'")
    # 使用其他方法或标记为失败

测试建议

立即测试

  1. 验证印章图像质量

    • 手动查看seal_unwarp_0.png
    • 确认图像是否清晰可读
  2. 测试其他OCR引擎

    • 尝试PaddleOCR-VL
    • 尝试Tesseract OCR
  3. 测试不同的预处理

    • 二值化
    • 对比度增强
    • 去噪

长期测试

  1. 批量测试所有印章

    • 统计有多少印章识别失败
    • 分析失败模式
  2. 收集失败案例

    • 建立失败案例数据库
    • 用于改进算法

总结

当前状态

  • 印章检测成功(找到了印章)
  • 解扭曲处理完成生成了seal_unwarp_0.png
  • OCR识别完全失败(输出乱码)
  • 没有使用验证逻辑(使用了乱码结果)
  • ⚠️ HTML报告显示旧数据(需要重新测试)

关键问题

为什么OCR识别失败

  • 解扭曲后的图像质量可能不够好
  • OCR模型不适合这种类型的印章文字
  • 缺少适当的图像预处理

下一步行动

  1. 手动检查seal_unwarp_0.png的图像质量
  2. 尝试不同的OCR方法和参数
  3. 添加OCR结果验证逻辑
  4. 重新运行测试并检查新的HTML报告

相关文件

  • test_reports_full/3.pdf/seal_unwarp_0.png - 解扭曲后的印章图像
  • test_reports_full/3.pdf/seal_crop_0.png - 原始裁剪印章
  • test_reports_full/3.pdf/index.html - 测试报告(可能显示旧数据)

预期效果

修复后应该能够:

  1. 正确识别印章中的"深圳市中安质量检验认证有限公司"
  2. 或者至少识别出相关的关键词(如"检验认证"
  3. 如果识别失败,应该标记为失败而不是使用乱码