# 新对话交接文档 - 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改进不明显** → 保持v4,v5仅作研究记录 **如果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` - 技术细节和问题分析 **最重要**: 记录所有发现,无论成功或失败,都是宝贵经验!