- 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>
5.9 KiB
5.9 KiB
项目当前状态
更新时间: 2025-10-29
分支: paddleocr-improvements
PaddleOCR版本: 2.7.3 (稳定版本)
当前进度总结
✅ 已完成
-
PaddleOCR服务器部署 (192.168.30.36:5555)
- 版本: PaddleOCR 2.7.3
- GPU: 启用
- 语言: 中文
- 状态: 稳定运行
-
基础Pipeline实现
- ✅ PDF → 图像渲染 (DPI=300)
- ✅ PaddleOCR文字检测 (26个区域/页)
- ✅ 文本区域遮罩 (padding=25px)
- ✅ 候选区域检测
- ✅ 区域合并算法 (12→4 regions)
-
OpenCV分离方法测试
- Method 1: 笔画宽度分析 - ❌ 效果差
- Method 2: 连通组件基础分析 - ⚠️ 中等效果
- Method 3: 综合特征分析 - ✅ 最佳方案 (86.5%手写保留率)
-
测试结果
- 测试文件:
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: 综合特征分析 (当前最佳方案)
判断依据
您的观察 (非常准确):
- ✅ 手写字比印刷字大 - height > 50px
- ✅ 手写笔画长度更长 - stroke_ratio > 0.4
- ✅ 印刷体规律,手写潦草 - 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)
- 完整测试脚本和结果
- 文档更新
已知限制
- 参数需调优: height阈值、merge距离等在不同文档可能需要调整
- 依赖文档质量: 模糊、倾斜的文档可能效果变差
- 计算性能: OpenCV处理较快,但完整Pipeline需要优化
- 泛化能力: 仅在1个样本测试,需要更多样本验证
联系与协作
主要开发者: Claude Code 协作方式: 会话式开发 代码仓库: 本地Git仓库 测试环境: macOS (本地) + Linux (服务器)
状态: ✅ 当前方案稳定,可继续开发 建议: 先在更多样本测试Method 3,再考虑PP-OCRv5升级