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

253 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 项目当前状态
**更新时间**: 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
### 评分系统
```python
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升级