# 项目当前状态

**更新时间**: 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升级
