Files
pdf_signature_extraction/PP_OCRV5_RESEARCH_FINDINGS.md
gbanyan 21df0ff387 Complete PP-OCRv5 research and v4 vs v5 comparison
## 研究成果

### PP-OCRv5 API 測試
- 成功升級到 PaddleOCR 3.3.2 (PP-OCRv5)
- 理解新 API 結構和調用方式
- 驗證基礎檢測功能

### 關鍵發現
 PP-OCRv5 **沒有內建手寫分類功能**
- text_type 字段是語言類型,不是手寫/印刷分類
- 仍需要 OpenCV Method 3 來分離手寫和印刷文字

### 完整 Pipeline 對比測試
- v4 (2.7.3): 檢測 14 個文字 → 4 個候選區域
- v5 (3.3.2): 檢測 50 個文字 → 7 個候選區域
- 主簽名區域:兩個版本幾乎相同 (1150x511 vs 1144x511)

### 性能分析
優點:
- v5 手寫識別準確率 +13.7% (文檔承諾)
- 可能減少漏檢

缺點:
- 過度檢測(印章小字等)
- API 完全重寫,不兼容
- 仍無法替代 OpenCV Method 3

### 文件
- PP_OCRV5_RESEARCH_FINDINGS.md: 完整研究報告
- signature-comparison/: v4 vs v5 對比結果
- test_results/: v5 測試輸出
- test_*_pipeline.py: 完整測試腳本

### 建議
當前方案(v2.7.3 + OpenCV Method 3)已足夠穩定,
除非遇到大量漏檢,否則暫不升級到 v5。

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 11:21:55 +08:00

7.5 KiB
Raw Permalink Blame History

PP-OCRv5 研究發現

日期: 2025-01-27 分支: pp-ocrv5-research 狀態: 研究完成


📋 研究摘要

我們成功升級並測試了 PP-OCRv5以下是關鍵發現

成功完成

  1. PaddleOCR 升級2.7.3 → 3.3.2
  2. 新 API 理解和驗證
  3. 手寫檢測能力測試
  4. 數據結構分析

關鍵限制

PP-OCRv5 沒有內建的手寫 vs 印刷文字分類功能


🔧 技術細節

API 變更

舊 API (2.7.3):

from paddleocr import PaddleOCR
ocr = PaddleOCR(lang='ch', show_log=False)
result = ocr.ocr(image_np, cls=False)

新 API (3.3.2):

from paddleocr import PaddleOCR

ocr = PaddleOCR(
    text_detection_model_name="PP-OCRv5_server_det",
    text_recognition_model_name="PP-OCRv5_server_rec",
    use_doc_orientation_classify=False,
    use_doc_unwarping=False,
    use_textline_orientation=False
    # ❌ 不再支持: show_log, cls
)

result = ocr.predict(image_path)  # ✅ 使用 predict() 而不是 ocr()

主要 API 差異

特性 v2.7.3 v3.3.2
初始化 PaddleOCR(lang='ch') PaddleOCR(text_detection_model_name=...)
預測方法 ocr.ocr() ocr.predict()
cls 參數 支持 已移除
show_log 參數 支持 已移除
返回格式 [[[box], (text, conf)], ...] OCRResult 對象 with .json 屬性
依賴 獨立 需要 PaddleX >=3.3.0

📊 返回數據結構

v3.3.2 返回格式

result = ocr.predict(image_path)
json_data = result[0].json['res']

# 可用字段:
json_data = {
    'input_path': str,                    # 輸入圖片路徑
    'page_index': None,                   # PDF 頁碼(圖片為 None
    'model_settings': dict,               # 模型配置
    'dt_polys': list,                     # 檢測多邊形框 (N, 4, 2)
    'dt_scores': list,                    # 檢測置信度
    'rec_texts': list,                    # 識別文字
    'rec_scores': list,                   # 識別置信度
    'rec_boxes': list,                    # 矩形框 [x_min, y_min, x_max, y_max]
    'rec_polys': list,                    # 識別多邊形框
    'text_det_params': dict,              # 檢測參數
    'text_rec_score_thresh': float,       # 識別閾值
    'text_type': str,                     # ⚠️ 'general' (語言類型,不是手寫分類)
    'textline_orientation_angles': list,  # 文字方向角度
    'return_word_box': bool               # 是否返回詞級框
}

🔍 手寫檢測功能測試

測試問題

PP-OCRv5 是否能區分手寫和印刷文字?

測試結果: 不能

測試過程

  1. 發現 text_type 字段
  2. text_type = 'general'語言類型,不是書寫風格
  3. 查閱官方文檔確認
  4. 沒有任何字段標註手寫 vs 印刷

官方文檔說明

  • text_type 可能的值:'general', 'ch', 'en', 'japan', 'pinyin'
  • 這些值指的是語言/腳本類型
  • 不是手寫 (handwritten) vs 印刷 (printed) 的分類

結論

PP-OCRv5 雖然能識別手寫文字,但不會標註某個文字區域是手寫還是印刷。


📈 性能提升(根據官方文檔)

手寫文字識別準確率

類型 PP-OCRv4 PP-OCRv5 提升
手寫中文 0.706 0.803 +13.7%
手寫英文 0.249 0.841 +237%

實測結果full_page_original.png

v3.3.2 (PP-OCRv5):

  • 檢測到 50 個文字區域
  • 平均置信度:~0.98
  • 示例:
    • "依本會計師核閱結果..." (0.9936)
    • "在所有重大方面有違反..." (0.9976)

待測試: v2.7.3 的對比結果(需要回退測試)


💡 升級影響分析

優勢

  1. 更好的手寫識別能力+13.7%
  2. 可能檢測到更多手寫區域
  3. 更高的識別置信度
  4. 統一的 Pipeline 架構

劣勢

  1. 無法區分手寫和印刷(仍需 OpenCV Method 3
  2. ⚠️ API 完全不兼容(需重寫服務器代碼)
  3. ⚠️ 依賴 PaddleX(額外的依賴)
  4. ⚠️ OpenCV 版本升級4.6 → 4.10

🎯 對我們項目的影響

當前方案v2.7.3 + OpenCV Method 3

PDF → PaddleOCR 檢測 → 遮罩印刷文字 → OpenCV Method 3 分離手寫 → VLM 驗證
                        ↑ 86.5% 手寫保留率

PP-OCRv5 方案

PDF → PP-OCRv5 檢測 → 遮罩印刷文字 → OpenCV Method 3 分離手寫 → VLM 驗證
      ↑ 可能檢測更多手寫   ↑ 仍然需要!

關鍵發現

PP-OCRv5 不能替代 OpenCV Method 3


🤔 升級建議

升級的理由

  1. 更好地檢測手寫簽名(+13.7% 準確率)
  2. 可能減少漏檢
  3. 更高的識別置信度可以幫助後續分析

不升級的理由

  1. 當前方案已經穩定86.5% 保留率)
  2. 仍然需要 OpenCV Method 3
  3. API 重寫成本高
  4. 額外的依賴和複雜度

推薦決策

階段性升級策略

  1. 短期(當前)

    • 保持 v2.7.3 穩定方案
    • 繼續使用 OpenCV Method 3
    • 在更多樣本上測試當前方案
  2. 中期(如果需要優化)

    • 對比測試 v2.7.3 vs v3.3.2 在真實簽名樣本上的性能
    • 如果 v5 明顯減少漏檢 → 升級
    • 如果差異不大 → 保持 v2.7.3
  3. 長期

    • 關注 PaddleOCR 是否會添加手寫分類功能
    • 如果有 → 重新評估升級價值

📝 技術債務記錄

如果決定升級到 v3.3.2

需要完成的工作:

  1. 服務器端

    • 重寫 paddleocr_server.py 適配新 API
    • 測試 GPU 利用率和速度
    • 處理 OpenCV 4.10 兼容性
    • 更新依賴文檔
  2. 客戶端

    • 更新 paddleocr_client.py(如果 REST 接口改變)
    • 適配新的返回格式
  3. 測試

    • 10+ 樣本對比測試
    • 性能基準測試
    • 穩定性測試
  4. 文檔

    • 更新 CURRENT_STATUS.md
    • 記錄 API 遷移指南
    • 更新部署文檔

完成的工作

  1. 升級 PaddleOCR: 2.7.3 → 3.3.2
  2. 理解新 API 結構
  3. 測試基礎功能
  4. 分析返回數據結構
  5. 測試手寫分類功能(結論:無)
  6. 查閱官方文檔驗證
  7. 記錄完整研究過程

🎓 學到的經驗

  1. API 版本升級風險:主版本升級通常有破壞性變更
  2. 功能驗證的重要性:文檔提到的「手寫支持」不等於「手寫分類」
  3. 現有方案的價值OpenCV Method 3 仍然是必需的
  4. 性能 vs 複雜度權衡:不是所有性能提升都值得立即升級

🔗 相關文檔


📌 下一步

建議用戶:

  1. 立即行動

    • 在更多 PDF 樣本上測試當前方案
    • 記錄成功率和失敗案例
  2. 評估升級

    • 如果當前方案滿意 → 保持 v2.7.3
    • 如果遇到大量漏檢 → 考慮 v3.3.2
  3. 長期監控

    • 關注 PaddleOCR GitHub Issues
    • 追蹤是否有手寫分類功能的更新

結論: PP-OCRv5 提升了手寫識別能力,但不能替代 OpenCV Method 3 來分離手寫和印刷文字。當前方案v2.7.3 + OpenCV Method 3已經足夠好除非遇到性能瓶頸否則不建議立即升級。