Files
pdf_signature_extraction/CURRENT_STATUS.md
gbanyan 8f231da3bc Complete OpenCV Method 3 implementation with 86.5% handwriting retention
- Implemented comprehensive feature analysis based on size, stroke length, and regularity
- Size-based scoring: height >50px indicates handwriting
- Stroke length ratio: >0.4 indicates handwriting
- Irregularity metrics: low compactness/solidity indicates handwriting
- Successfully tested on sample PDF with 2 signatures (楊智惠, 張志銘)
- Created detailed documentation: CURRENT_STATUS.md and NEW_SESSION_HANDOFF.md
- Stable PaddleOCR 2.7.3 configuration documented (numpy 1.26.4, opencv 4.6.0.66)
- Prepared research plan for PP-OCRv5 upgrade investigation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 10:35:46 +08:00

5.9 KiB
Raw Permalink Blame History

项目当前状态

更新时间: 2025-10-29 分支: paddleocr-improvements PaddleOCR版本: 2.7.3 (稳定版本)


当前进度总结

已完成

  1. PaddleOCR服务器部署 (192.168.30.36:5555)

    • 版本: PaddleOCR 2.7.3
    • GPU: 启用
    • 语言: 中文
    • 状态: 稳定运行
  2. 基础Pipeline实现

    • PDF → 图像渲染 (DPI=300)
    • PaddleOCR文字检测 (26个区域/页)
    • 文本区域遮罩 (padding=25px)
    • 候选区域检测
    • 区域合并算法 (12→4 regions)
  3. OpenCV分离方法测试

    • Method 1: 笔画宽度分析 - 效果差
    • Method 2: 连通组件基础分析 - ⚠️ 中等效果
    • Method 3: 综合特征分析 - 最佳方案 (86.5%手写保留率)
  4. 测试结果

    • 测试文件: 201301_1324_AI1_page3.pdf
    • 预期签名: 2个 (楊智惠, 張志銘)
    • 检测结果: 2个签名区域成功合并
    • 保留率: 86.5% 手写内容

技术架构

PDF文档
  ↓
1. 渲染 (PyMuPDF, 300 DPI)
  ↓
2. PaddleOCR检测 (识别印刷文字)
  ↓
3. 遮罩印刷文字 (黑色填充, padding=25px)
  ↓
4. 区域检测 (OpenCV形态学)
  ↓
5. 区域合并 (距离阈值: H≤100px, V≤50px)
  ↓
6. 特征分析 (大小+笔画长度+规律性)
  ↓
7. [TODO] VLM验证
  ↓
签名提取结果

核心文件

文件 说明 状态
paddleocr_client.py PaddleOCR REST客户端 稳定
test_mask_and_detect.py 基础遮罩+检测测试 完成
test_opencv_separation.py OpenCV方法1+2测试 完成
test_opencv_advanced.py OpenCV方法3(最佳) 完成
extract_signatures_paddleocr_improved.py 完整Pipeline (Method B+E) ⚠️ Method E有问题
PADDLEOCR_STATUS.md 详细技术文档 完成

Method 3: 综合特征分析 (当前最佳方案)

判断依据

您的观察 (非常准确):

  1. 手写字比印刷字大 - height > 50px
  2. 手写笔画长度更长 - stroke_ratio > 0.4
  3. 印刷体规律,手写潦草 - compactness, solidity

评分系统

handwriting_score = 0

# 大小评分
if height > 50: score += 3
elif height > 35: score += 2

# 笔画长度评分
if stroke_ratio > 0.5: score += 2
elif stroke_ratio > 0.35: score += 1

# 规律性评分
if is_irregular: score += 1  # 不规律 = 手写
else: score -= 1              # 规律 = 印刷

# 面积评分
if area > 2000: score += 2
elif area < 500: score -= 1

# 分类: score > 0 → 手写

效果

  • 手写像素保留: 86.5%
  • 印刷像素过滤: 13.5%
  • Top 10组件全部正确分类

已识别问题

1. Method E (两阶段OCR) 失效

原因: PaddleOCR无法区分"印刷"和"手写"第二次OCR会把手写也识别并删除

解决方案:

  • 不使用Method E
  • 使用Method B (区域合并) + OpenCV Method 3

2. 印刷名字与手写签名重叠

现象: 区域包含"楊 智 惠"(印刷) + 手写签名 策略: 接受少量印刷残留,优先保证手写完整性 后续: 用VLM最终验证

3. Masking padding 矛盾

小padding (5-10px): 印刷残留多,但不伤手写 大padding (25px): 印刷删除干净,但可能遮住手写边缘 当前: 使用 25px依赖OpenCV Method 3过滤残留


下一步计划

短期 (继续当前方案)

  • 整合 Method B + OpenCV Method 3 为完整Pipeline
  • 添加VLM验证步骤
  • 在10个样本上测试
  • 调优参数 (height阈值, merge距离等)

中期 (PP-OCRv5研究)

新branch: pp-ocrv5-research

  • 研究PaddleOCR 3.3.0新API
  • 测试PP-OCRv5手写检测能力
  • 对比性能: v4 vs v5
  • 评估是否升级

服务器配置

PaddleOCR服务器 (Linux)

Host: 192.168.30.36:5555
SSH: ssh gblinux
路径: ~/Project/paddleocr-server/
版本: PaddleOCR 2.7.3, numpy 1.26.4, opencv-contrib 4.6.0.66
启动: cd ~/Project/paddleocr-server && source venv/bin/activate && python paddleocr_server.py
日志: ~/Project/paddleocr-server/server_stable.log

VLM服务器 (Ollama)

Host: 192.168.30.36:11434
模型: qwen2.5vl:32b
状态: 未在当前Pipeline中使用

测试数据

样本文件

/Volumes/NV2/PDF-Processing/signature-image-output/201301_1324_AI1_page3.pdf
- 页面: 第3页
- 预期签名: 2个 (楊智惠, 張志銘)
- 尺寸: 2481x3510 pixels

输出目录

/Volumes/NV2/PDF-Processing/signature-image-output/
├── mask_test/              # 基础遮罩测试结果
├── paddleocr_improved/     # Method B+E测试 (E失败)
├── opencv_separation_test/ # Method 1+2测试
└── opencv_advanced_test/   # Method 3测试 (最佳)

性能对比

方法 手写保留 印刷去除 总评
基础遮罩 100% ⚠️ 太多印刷残留
Method 1 (笔画宽度) 0% - 完全失败
Method 2 (连通组件) 1% 丢失太多手写
Method 3 (综合特征) 86.5% 最佳

Git状态

当前分支: paddleocr-improvements
基于: PaddleOCR-Cover
标签: paddleocr-v1-basic (基础遮罩版本)

待提交:
- OpenCV高级分离方法 (Method 3)
- 完整测试脚本和结果
- 文档更新

已知限制

  1. 参数需调优: height阈值、merge距离等在不同文档可能需要调整
  2. 依赖文档质量: 模糊、倾斜的文档可能效果变差
  3. 计算性能: OpenCV处理较快但完整Pipeline需要优化
  4. 泛化能力: 仅在1个样本测试需要更多样本验证

联系与协作

主要开发者: Claude Code 协作方式: 会话式开发 代码仓库: 本地Git仓库 测试环境: macOS (本地) + Linux (服务器)


状态: 当前方案稳定,可继续开发 建议: 先在更多样本测试Method 3再考虑PP-OCRv5升级