unclip_ratio 参数说明unclip_ratio 是 OCR 文本检测中的一个重要参数,用于控制检测框的扩展比例。
unclip_ratio 使用 Vatti Clipping 算法对检测到的文字区域进行扩张(unclip)。
原始检测框(可能过紧)
┌─────────┐
│ 文本 │ ← 检测模型输出的框可能太紧,裁剪了文字边缘
└─────────┘
应用 unclip_ratio = 1.5 后
┌───────────────┐
│ │
│ 文本 │ ← 扩展后的框,包含完整的文字区域
│ │
└───────────────┘
# 计算扩展后的框尺寸
width = x2 - x1
height = y2 - y1
new_width = width * unclip_ratio
new_height = height * unclip_ratio
# 保持中心点不变,扩展框
center_x = x1 + width / 2
center_y = y1 + height / 2
new_x1 = center_x - new_width / 2
new_y1 = center_y - new_height / 2
new_x2 = center_x + new_width / 2
new_y2 = center_y + new_height / 2
unclip_ratio 值的效果| unclip_ratio | 扩展程度 | 适用场景 | 优缺点 |
|---|---|---|---|
| 1.0 | 不扩展 | 检测框已经很精确 | ✅ 精确度高 ❌ 可能裁剪文字边缘 |
| 1.3 | 轻微扩展 | 高质量扫描件 | ✅ 精确度较高 ✅ 包含完整文字 |
| 1.5 | 中等扩展 | 推荐值(PPStructureV3默认) | ✅ 平衡精确度和完整性 ✅ 适合大多数场景 |
| 1.8 | 较大扩展 | MinerU默认,质量较差的扫描件 | ✅ 确保包含完整文字 ❌ 可能包含过多背景 |
| 2.0+ | 大幅扩展 | 极低质量图像 | ✅ 最大程度包含文字 ❌ 精确度低,可能包含相邻文字 |
原始检测框(unclip_ratio=1.0)
┌────────┐
│ 货币资金 │ ← 可能裁剪了"货"字的左边
└────────┘
unclip_ratio=1.5(推荐)
┌───────────┐
│ 货币资金 │ ← 包含完整文字
└───────────┘
unclip_ratio=1.8(过大)
┌─────────────┐
│ 货币资金 │ ← 包含过多空白,可能影响识别
└─────────────┘
unclip_ratio=1.5(推荐)
┌─────┐ ┌─────┐
│ 资产 │ │ 负债 │ ← 框精确,不重叠
└─────┘ └─────┘
unclip_ratio=1.8(过大)
┌──────┐┌──────┐
│ 资产 ││ 负债 │ ← 框重叠,可能合并相邻单元格
└──────┘└──────┘
# 高质量扫描件(清晰、无倾斜)
ocr:
unclip_ratio: 1.3 # 较小扩展,保持精确
# 中等质量扫描件(推荐)
ocr:
unclip_ratio: 1.5 # 平衡精确度和完整性
# 低质量扫描件(模糊、倾斜)
ocr:
unclip_ratio: 1.8 # 较大扩展,确保包含完整文字
# 表格场景(密集文本)
ocr:
unclip_ratio: 1.5 # 较小扩展,避免框重叠
enable_merge_det_boxes: false # 不合并框
# 普通文本场景
ocr:
unclip_ratio: 1.6 # 中等扩展
enable_merge_det_boxes: true # 可以合并框
# 稀疏文本场景
ocr:
unclip_ratio: 1.8 # 较大扩展,确保包含完整文字
box_thresh 配合使用# 严格检测 + 精确扩展
ocr:
det_threshold: 0.6 # 高阈值,减少噪声框
unclip_ratio: 1.5 # 精确扩展
# 宽松检测 + 较大扩展
ocr:
det_threshold: 0.3 # 低阈值,检测更多框
unclip_ratio: 1.8 # 较大扩展,确保包含文字
| unclip_ratio | 文字完整性 | 精确度 | 相邻文字干扰 | 综合评分 |
|---|---|---|---|---|
| 1.3 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 1.5 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 1.8 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
unclip_ratio 对处理速度影响很小(< 1%)ocr:
det_threshold: 0.6
unclip_ratio: 1.5 # ✅ 推荐值
enable_merge_det_boxes: false
ocr:
det_threshold: 0.3
unclip_ratio: 1.8 # ⚠️ 可能过大,建议改为1.5
enable_merge_det_boxes: true
ocr:
det_threshold: 0.6 # 提高检测阈值
unclip_ratio: 1.5 # 降低扩展比例(从1.8改为1.5)
enable_merge_det_boxes: false # 表格场景不合并
# 在文本检测后处理中使用
def unclip_boxes(boxes, unclip_ratio):
"""
扩展检测框
Args:
boxes: 检测框列表 [(x1, y1, x2, y2), ...]
unclip_ratio: 扩展比例(如 1.5)
Returns:
扩展后的检测框列表
"""
expanded_boxes = []
for box in boxes:
x1, y1, x2, y2 = box
width = x2 - x1
height = y2 - y1
# 计算扩展后的尺寸
new_width = width * unclip_ratio
new_height = height * unclip_ratio
# 保持中心点不变
center_x = x1 + width / 2
center_y = y1 + height / 2
# 计算新的坐标
new_x1 = center_x - new_width / 2
new_y1 = center_y - new_height / 2
new_x2 = center_x + new_width / 2
new_y2 = center_y + new_height / 2
expanded_boxes.append([new_x1, new_y1, new_x2, new_y2])
return expanded_boxes
unclip_ratio 越大越好吗?A: 不是。过大的 unclip_ratio 会导致:
建议:从 1.5 开始,根据实际效果调整。
A:
建议:对于表格等密集文本,使用 1.5 更合适。
unclip_ratio 是否合适?A: 检查识别结果:
unclip_ratiounclip_ratiounclip_ratio 或关闭 enable_merge_det_boxesunclip_ratio 和 box_thresh 的关系?A:
box_thresh:控制哪些检测框被保留(过滤低置信度框)unclip_ratio:控制检测框的扩展程度(调整框的大小)两者独立,但可以配合使用:
box_thresh + 低 unclip_ratio:严格检测,精确扩展box_thresh + 高 unclip_ratio:宽松检测,较大扩展| 特性 | 说明 |
|---|---|
| 作用 | 扩展文本检测框,确保包含完整文字 |
| 算法 | Vatti Clipping 算法 |
| 推荐值 | 1.5(PPStructureV3默认) |
| 范围 | 1.0 - 2.0(通常 1.3 - 1.8) |
| 影响 | 主要影响识别准确率,对速度影响很小 |
| 调优 | 根据文档质量和类型调整 |
最佳实践:
unclip_ratio=1.5,enable_merge_det_boxes=falseunclip_ratio=1.5-1.6,enable_merge_det_boxes=trueunclip_ratio=1.8,enable_merge_det_boxes=true