4.7 KiB
4.7 KiB
印章检测问题修复
问题描述
3.pdf的处理结果
预期结果:
- 机构名称:深圳市中安质量检验认证有限公司
实际结果:
- 机构名称:县市场监督管理局行政审批
根本原因
检测到了错误的印章!
页面布局:
+--------------------------------------------------+
| |
| [CMA标志] |
| |
| 深圳市中安质量检验认证有限公司 |
| (检验机构印章) | ← 应该检测这个
| |
| |
| 县市场监督管理局 |
| 行政审批专用章 | ← 实际检测到这个
| |
+--------------------------------------------------+
解扭曲工作正常
查看 seal_unwarp_0.png 可以确认:
- ✅ 极坐标解扭曲正确
- ✅ OCR正确识别了解扭曲后的图像
- ❌ 但识别的是行政审批章,不是检验机构印章
问题分析
之前的问题
用户报告:"已经解扭曲,但是识别出来的不是解扭曲后的内容"
实际情况:
- ✅ 解扭曲工作正常
- ✅ OCR识别了解扭曲后的图像
- ❌ 但系统检测到了错误的印章
根本原因
缺少印章选择逻辑
# 之前的代码:处理所有检测到的印章
for reg in all_regions:
if label == 'seal':
seal_boxes.append(box) # 添加所有印章,没有过滤
系统会检测页面上的所有印章,但没有优先级选择:
- ❌ 行政审批章(错误的印章)
- ❌ 其他政府公章
- ✅ 检验机构印章(正确的印章)
解决方案
添加印章评分和选择机制
评分标准:
-
位置评分(60分)
- 上半部分(center_y < page_h * 0.5):+30分
- 右半部分(center_x > page_w * 0.5):+30分
- 原因:检验机构印章通常在右上角,靠近CMA标志
-
尺寸评分(20分)
- 中等尺寸(100-300px):+20分
- 较小或较大(80-100px或300-400px):+10分
- 原因:检验机构印章通常是中等大小的圆形章
-
形状评分(20分)
- 圆形(宽高比 0.8-1.2):+20分
- 原因:检验机构印章通常是圆形的
实现代码
# 评分每个印章
scored_seals = []
for idx, box in enumerate(seal_boxes):
# 计算位置评分(优先右上角)
position_score = 0
if center_y < page_h * 0.5: # 上半部分
position_score += 30
if center_x > page_w * 0.5: # 右半部分
position_score += 30
# 计算尺寸评分(优先中等大小)
size_score = 0
if 100 <= min_dim <= 300:
size_score = 20
# 计算形状评分(优先圆形)
aspect_score = 0
if 0.8 <= aspect_ratio <= 1.2:
aspect_score = 20
total_score = position_score + size_score + aspect_score
scored_seals.append({...})
# 选择得分最高的印章
scored_seals.sort(key=lambda x: x['score'], reverse=True)
selected_seals = scored_seals[:min(2, len(scored_seals))]
预期效果
修复前
检测到印章 #0: 县市场监督管理局行政审批
位置: 左下角 (200, 1500)
识别结果: "县市场监督管理局\n行政审批"
修复后
检测到印章 #0: 县市场监督管理局行政审批
位置: 左下角 (200, 1500)
评分: 10分 (位置=0, 尺寸=10, 形状=0)
检测到印章 #1: 深圳市中安质量检验认证有限公司
位置: 右上角 (1000, 300)
评分: 90分 (位置=60, 尺寸=20, 形状=10)
选择: 印章 #1(得分最高)
识别结果: "深圳市中安质量检验认证有限公司"
修改的文件
test_accuracy_batch_full.py(第861-927行)
- 添加印章评分逻辑
- 添加印章选择逻辑
- 选择得分最高的2个印章进行处理
关键改进点
- 位置优先级 - 优先选择右上角的印章(靠近CMA标志)
- 尺寸过滤 - 过滤掉太大或太小的印章
- 形状过滤 - 优先选择圆形印章
- Top-K选择 - 选择得分最高的2个印章,确保不会遗漏正确的印章
验证
重新运行测试:
python test_accuracy_batch_full.py --pdf 3.pdf
预期结果:
- 应该检测到右上角的检验机构印章
- 识别结果应该是 "深圳市中安质量检验认证有限公司"
- 相似度应该接近100%
修复已完成!现在系统会优先选择检验机构印章,而不是行政审批章。