Files
pdf_signature_extraction/NEW_SESSION_HANDOFF.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

433 lines
9.4 KiB
Markdown
Raw Permalink 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.
# 新对话交接文档 - PP-OCRv5研究
**日期**: 2025-10-29
**前序对话**: PaddleOCR-Cover分支开发
**当前分支**: `paddleocr-improvements` (稳定)
**新分支**: `pp-ocrv5-research` (待创建)
---
## 🎯 任务目标
研究和实现 **PP-OCRv5** 的手写签名检测功能
---
## 📋 背景信息
### 当前状况
**已有稳定方案** (`paddleocr-improvements` 分支):
- PaddleOCR 2.7.3 + OpenCV Method 3
- 86.5%手写保留率
- 区域合并算法工作良好
- 测试: 1个PDF成功检测2个签名
⚠️ **PP-OCRv5升级遇到问题**:
- PaddleOCR 3.3.0 API完全改变
- 旧服务器代码不兼容
- 需要深入研究新API
### 为什么要研究PP-OCRv5
**文档显示**: https://www.paddleocr.ai/main/en/version3.x/algorithm/PP-OCRv5/PP-OCRv5.html
PP-OCRv5性能提升:
- 手写中文检测: **0.706 → 0.803** (+13.7%)
- 手写英文检测: **0.249 → 0.841** (+237%)
- 可能支持直接输出手写区域坐标
**潜在优势**:
1. 更好的手写识别能力
2. 可能内置手写/印刷分类
3. 更准确的坐标输出
4. 减少复杂的后处理
---
## 🔧 技术栈
### 服务器环境
```
Host: 192.168.30.36 (Linux GPU服务器)
SSH: ssh gblinux
目录: ~/Project/paddleocr-server/
```
**当前稳定版本**:
- PaddleOCR: 2.7.3
- numpy: 1.26.4
- opencv-contrib-python: 4.6.0.66
- 服务器文件: `paddleocr_server.py`
**已安装但未使用**:
- PaddleOCR 3.3.0 (PP-OCRv5)
- 临时服务器: `paddleocr_server_v5.py` (未完成)
### 本地环境
```
macOS
Python: 3.14
虚拟环境: venv/
客户端: paddleocr_client.py
```
---
## 📝 核心问题
### 1. API变更
**旧API (2.7.3)**:
```python
from paddleocr import PaddleOCR
ocr = PaddleOCR(lang='ch')
result = ocr.ocr(image_np, cls=False)
# 返回格式:
# [[[box], (text, confidence)], ...]
```
**新API (3.3.0)** - ⚠️ 未完全理解:
```python
# 方式1: 传统方式 (Deprecated)
result = ocr.ocr(image_np) # 警告: Please use predict instead
# 方式2: 新方式
from paddlex import create_model
model = create_model("???") # 模型名未知
result = model.predict(image_np)
# 返回格式: ???
```
### 2. 遇到的错误
**错误1**: `cls` 参数不再支持
```python
# 错误: PaddleOCR.predict() got an unexpected keyword argument 'cls'
result = ocr.ocr(image_np, cls=False) # ❌
```
**错误2**: 返回格式改变
```python
# 旧代码解析失败:
text = item[1][0] # ❌ IndexError
confidence = item[1][1] # ❌ IndexError
```
**错误3**: 模型名称错误
```python
model = create_model("PP-OCRv5_server") # ❌ Model not supported
```
---
## 🎯 研究任务清单
### Phase 1: API研究 (优先级高)
- [ ] **阅读官方文档**
- PP-OCRv5完整文档
- PaddleX API文档
- 迁移指南 (如果有)
- [ ] **理解新API**
```python
# 需要搞清楚:
1. 正确的导入方式
2. 模型初始化方法
3. predict()参数和返回格式
4. 如何区分手写/印刷
5. 是否有手写检测专用功能
```
- [ ] **编写测试脚本**
- `test_pp_ocrv5_api.py` - 测试基础API调用
- 打印完整的result数据结构
- 对比v4和v5的返回差异
### Phase 2: 服务器适配
- [ ] **重写服务器代码**
- 适配新API
- 正确解析返回数据
- 保持REST接口兼容
- [ ] **测试稳定性**
- 测试10个PDF样本
- 检查GPU利用率
- 对比v4性能
### Phase 3: 手写检测功能
- [ ] **查找手写检测能力**
```python
# 可能的方式:
1. result中是否有 text_type 字段?
2. 是否有专门的 handwriting_detection 模型?
3. 是否有置信度差异可以利用?
4. PP-Structure 的 layout 分析?
```
- [ ] **对比测试**
- v4 (当前方案) vs v5
- 准确率、召回率、速度
- 手写检测能力
### Phase 4: 集成决策
- [ ] **性能评估**
- 如果v5更好 → 升级
- 如果改进不明显 → 保持v4
- [ ] **文档更新**
- 记录v5使用方法
- 更新PADDLEOCR_STATUS.md
---
## 🔍 调试技巧
### 1. 查看完整返回数据
```python
import pprint
result = model.predict(image)
pprint.pprint(result) # 完整输出所有字段
# 或者
import json
print(json.dumps(result, indent=2, ensure_ascii=False))
```
### 2. 查找官方示例
```bash
# 在服务器上查找PaddleOCR安装示例
find ~/Project/paddleocr-server/venv/lib/python3.12/site-packages/paddleocr -name "*.py" | grep example
# 查看源码
less ~/Project/paddleocr-server/venv/lib/python3.12/site-packages/paddleocr/paddleocr.py
```
### 3. 查看可用模型
```python
from paddlex.inference.models import OFFICIAL_MODELS
print(OFFICIAL_MODELS) # 列出所有支持的模型名
```
### 4. Web文档搜索
重点查看:
- https://github.com/PaddlePaddle/PaddleOCR
- https://www.paddleocr.ai
- https://github.com/PaddlePaddle/PaddleX
---
## 📂 文件结构
```
/Volumes/NV2/pdf_recognize/
├── CURRENT_STATUS.md # 当前状态文档 ✅
├── NEW_SESSION_HANDOFF.md # 本文件 ✅
├── PADDLEOCR_STATUS.md # 详细技术文档 ✅
├── SESSION_INIT.md # 初始会话信息
├── paddleocr_client.py # 稳定客户端 (v2.7.3) ✅
├── paddleocr_server_v5.py # v5服务器 (未完成) ⚠️
├── test_paddleocr_client.py # 基础测试
├── test_mask_and_detect.py # 遮罩+检测
├── test_opencv_separation.py # Method 1+2
├── test_opencv_advanced.py # Method 3 (最佳) ✅
├── extract_signatures_paddleocr_improved.py # 完整Pipeline
└── check_rejected_for_missing.py # 诊断脚本
```
**服务器端** (`ssh gblinux`):
```
~/Project/paddleocr-server/
├── paddleocr_server.py # v2.7.3稳定版 ✅
├── paddleocr_server_v5.py # v5版本 (待完成) ⚠️
├── paddleocr_server_backup.py # 备份
├── server_stable.log # 当前运行日志
└── venv/ # 虚拟环境
```
---
## ⚡ 快速启动
### 启动稳定服务器 (v2.7.3)
```bash
ssh gblinux
cd ~/Project/paddleocr-server
source venv/bin/activate
python paddleocr_server.py
```
### 测试连接
```bash
# 本地Mac
cd /Volumes/NV2/pdf_recognize
source venv/bin/activate
python test_paddleocr_client.py
```
### 创建新研究分支
```bash
cd /Volumes/NV2/pdf_recognize
git checkout -b pp-ocrv5-research
```
---
## 🚨 注意事项
### 1. 不要破坏稳定版本
- `paddleocr-improvements` 分支保持稳定
- 所有v5实验在新分支 `pp-ocrv5-research`
- 服务器保留 `paddleocr_server.py` (v2.7.3)
- 新代码命名: `paddleocr_server_v5.py`
### 2. 环境隔离
- 服务器虚拟环境可能需要重建
- 或者用Docker隔离v4和v5
- 避免版本冲突
### 3. 性能测试
- 记录v4和v5的具体指标
- 至少测试10个样本
- 包括速度、准确率、召回率
### 4. 文档驱动
- 每个发现记录到文档
- API用法写清楚
- 便于未来维护
---
## 📊 成功标准
### 最低目标
- [ ] 成功运行PP-OCRv5基础OCR
- [ ] 理解新API调用方式
- [ ] 服务器稳定运行
- [ ] 记录完整文档
### 理想目标
- [ ] 发现手写检测功能
- [ ] 性能超过v4方案
- [ ] 简化Pipeline复杂度
- [ ] 提升准确率 > 90%
### 决策点
**如果v5明显更好** → 升级到v5废弃v4
**如果v5改进不明显** → 保持v4v5仅作研究记录
**如果v5有bug** → 等待官方修复暂用v4
---
## 📞 问题排查
### 遇到问题时
1. **先查日志**: `tail -f ~/Project/paddleocr-server/server_stable.log`
2. **查看源码**: 在venv里找PaddleOCR代码
3. **搜索Issues**: https://github.com/PaddlePaddle/PaddleOCR/issues
4. **降级测试**: 确认v2.7.3是否还能用
### 常见问题
**Q: 服务器启动失败?**
A: 检查numpy版本 (需要 < 2.0)
**Q: 找不到模型?**
A: 模型名可能变化查看OFFICIAL_MODELS
**Q: API调用失败?**
A: 对比官方文档,可能参数格式变化
---
## 🎓 学习资源
### 官方文档
1. **PP-OCRv5**: https://www.paddleocr.ai/main/en/version3.x/algorithm/PP-OCRv5/PP-OCRv5.html
2. **PaddleOCR GitHub**: https://github.com/PaddlePaddle/PaddleOCR
3. **PaddleX**: https://github.com/PaddlePaddle/PaddleX
### 相关技术
- PaddlePaddle深度学习框架
- PP-Structure文档结构分析
- 手写识别 (Handwriting Recognition)
- 版面分析 (Layout Analysis)
---
## 💡 提示
### 如果发现内置手写检测
可能的用法:
```python
# 猜测1: 返回结果包含类型
for item in result:
text_type = item.get('type') # 'printed' or 'handwritten'?
# 猜测2: 专门的layout模型
from paddlex import create_model
layout_model = create_model("PP-Structure")
layout_result = layout_model.predict(image)
# 可能返回: text, handwriting, figure, table...
# 猜测3: 置信度差异
# 手写文字置信度可能更低
```
### 如果没有内置手写检测
那么当前OpenCV Method 3仍然是最佳方案v5仅提供更好的OCR准确度。
---
## ✅ 完成检查清单
研究完成后,确保:
- [ ] 新API用法完全理解并文档化
- [ ] 服务器代码重写并测试通过
- [ ] 性能对比数据记录
- [ ] 决策文档 (升级 vs 保持v4)
- [ ] 代码提交到 `pp-ocrv5-research` 分支
- [ ] 更新 `CURRENT_STATUS.md`
- [ ] 如果升级: 合并到main分支
---
**祝研究顺利!** 🚀
有问题随时查阅:
- `CURRENT_STATUS.md` - 当前方案详情
- `PADDLEOCR_STATUS.md` - 技术细节和问题分析
**最重要**: 记录所有发现,无论成功或失败,都是宝贵经验!