RapidOCR集成PP-OCRv5_det mobile模型記錄

該文章主要摘取記錄RapidOCR集成PP-OCRv5_mobile_det記錄,涉及模型轉換,模型精度測試等步驟。原文請前往官方博客:

https://rapidai.github.io/RapidOCRDocs/main/blog/2025/05/26/rapidocr%E9%9B%86%E6%88%90pp-ocrv5_det%E6%A8%A1%E5%9E%8Bmobileserver%E8%AE%B0%E5%BD%95/

引言

來自PaddleOCR官方文檔:

PP-OCRv5 是PP-OCR新一代文字識別解決方案,該方案聚焦于多場景、多文字類型的文字識別。在文字類型方面,PP-OCRv5支持簡體中文、中文拼音、繁體中文、英文、日文5大主流文字類型,在場景方面,PP-OCRv5升級了中英復雜手寫體、豎排文本、生僻字等多種挑戰性場景的識別能力。在內部多場景復雜評估集上,PP-OCRv5較PP-OCRv4端到端提升13個百分點。

以下代碼運行環境

  • OS: macOS Sequoia 15.5
  • Python: 3.10.14
  • PaddlePaddle: 3.0.0
  • paddle2onnx: 2.0.2.rc1
  • paddlex: 3.0.0
  • rapidocr: 2.1.0

1. 模型跑通

該步驟主要先基于PaddleX可以正確使用PP-OCRv5_mobile_det模型得到正確結果。

該部分主要參考文檔:docs

安裝paddlex:

pip install "paddlex[ocr]==3.0.0"

測試PP-OCRv5_mobile_det模型能否正常識別:

運行以下代碼時,模型會自動下載到 /Users/用戶名/.paddlex/official_models 下。

測試圖:link


from paddlex import create_model# mobile
model = create_model(model_name="PP-OCRv5_mobile_det")# server
model = create_model(model_name="PP-OCRv5_server_det")output = model.predict(input="images/general_ocr_001.png", batch_size=1)
for res in output:res.print()res.save_to_img(save_path="./output/")res.save_to_json(save_path="./output/res.json")

預期結果如下,表明成功運行:

在這里插入圖片描述

2. 模型轉換

該部分主要參考文檔: docs

轉換PP-OCRv5_mobile_det

PaddleX官方集成了paddle2onnx的轉換代碼:

paddlex --install paddle2onnx
pip install onnx==1.16.0paddlex --paddle2onnx --paddle_model_dir models/official_models/PP-OCRv5_mobile_det --onnx_model_dir models/PP-OCRv5_mobile_det

輸出日志如下,表明轉換成功:

Input dir: models/official_models/PP-OCRv5_mobile_det
Output dir: models/PP-OCRv5_mobile_det
Paddle2ONNX conversion starting...
[Paddle2ONNX] Start parsing the Paddle model file...
[Paddle2ONNX] Use opset_version = 14 for ONNX export.
[Paddle2ONNX] PaddlePaddle model is exported as ONNX format now.
2025-05-26 21:53:00 [INFO]      Try to perform constant folding on the ONNX model with Polygraphy.
[W] 'colored' module is not installed, will not use colors when logging. To enable colors, please install the 'colored' module: python3 -m pip install colored
[I] Folding Constants | Pass 1
[I]     Total Nodes | Original:   925, After Folding:   502 |   423 Nodes Folded
[I] Folding Constants | Pass 2
[I]     Total Nodes | Original:   502, After Folding:   502 |     0 Nodes Folded
2025-05-26 21:53:08 [INFO]      ONNX model saved in models/PP-OCRv5_mobile_det/inference.onnx.
Paddle2ONNX conversion succeeded
Copied models/official_models/PP-OCRv5_mobile_det/inference.yml to models/PP-OCRv5_mobile_det/inference.yml
Done

3. 模型推理驗證

驗證PP-OCRv5_mobile_det模型

該部分主要是在RapidOCR項目中測試能否直接使用onnx模型。要點主要是確定模型前后處理是否兼容。從PaddleOCR config文件中比較PP-OCRv4和PP-OCRv5 mobile det文件差異:
在這里插入圖片描述

從上圖中可以看出,配置基本一模一樣,因此現有rapidocr前后推理代碼可以直接使用。

from rapidocr import RapidOCRmodel_path = "models/PP-OCRv5_mobile_det/inference.onnx"
engine = RapidOCR(params={"Det.model_path": model_path})img_url = "https://img1.baidu.com/it/u=3619974146,1266987475&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=516"
result = engine(img_url)
print(result)result.vis("vis_result.jpg")

在這里插入圖片描述

4. 模型精度測試

測試集text_det_test_dataset包括卡證類、文檔類和自然場景三大類。其中卡證類有82張,文檔類有75張,自然場景類有55張。缺少手寫體、繁體、日文、古籍文本、拼音、藝術字等數據。因此,該基于該測評集的結果僅供參考。

歡迎有興趣的小伙伴,可以和我們一起共建更加全面的測評集。

該部分主要使用TextDetMetric和測試集text_det_test_dataset來評測。

相關測試步驟請參見TextDetMetric的README,一步一步來就行。我這里簡單給出關鍵代碼:

其中,計算 pred.txt 代碼如下:(僅列出了Exp1的代碼,Exp2和Exp3的代碼請前往官方博客閱讀)

(Exp1)RapidOCR框架+ONNXRuntime格式模型:

import cv2
import numpy as np
from datasets import load_dataset
from tqdm import tqdmfrom rapidocr import EngineType, ModelType, OCRVersion, RapidOCRengine = RapidOCR(params={"Det.ocr_version": OCRVersion.PPOCRV5,"Det.engine_type": EngineType.ONNXRUNTIME,"Det.model_type": ModelType.MOBILE,}
)dataset = load_dataset("SWHL/text_det_test_dataset")
test_data = dataset["test"]content = []
for i, one_data in enumerate(tqdm(test_data)):img = np.array(one_data.get("image"))img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)ocr_results = engine(img, use_det=True, use_cls=False, use_rec=False)dt_boxes = ocr_results.boxesdt_boxes = [] if dt_boxes is None else dt_boxes.tolist()elapse = ocr_results.elapsegt_boxes = [v["points"] for v in one_data["shapes"]]content.append(f"{dt_boxes}\t{gt_boxes}\t{elapse}")with open("pred.txt", "w", encoding="utf-8") as f:for v in content:f.write(f"{v}\n")

計算指標代碼:

from text_det_metric import TextDetMetricmetric = TextDetMetric()
pred_path = "pred.txt"
metric = metric(pred_path)
print(metric)

指標匯總如下(以下指標均為CPU下計算所得):

Exp模型推理框架模型格式Precision↑Recall↑H-mean↑Elapse↓
1PP-OCRv5_mobile_detPaddleXPaddlePaddle0.78640.80180.79400.1956
2PP-OCRv5_mobile_detRapidOCRPaddlePaddle0.78610.82660.80580.5328
3PP-OCRv5_mobile_detRapidOCRONNXRuntime0.78610.82660.80580.1653
4PP-OCRv4_mobile_detRapidOCRONNXRuntime0.83010.86590.8476-
5PP-OCRv5_server_detPaddleXPaddlePaddle0.83470.85830.84632.1450
6PP-OCRv5_server_detRapidOCRPaddlePaddle
7PP-OCRv5_server_detRapidOCRONNXRuntime0.73940.84420.78832.0628
8PP-OCRv4_server_detRapidOCRONNXRuntime0.79220.81280.7691-

從以上結果來看,可以得到以下結論:

  1. Exp1和Exp2相比,H-mean差異不大,說明文本檢測 前后處理代碼可以共用

  2. Exp2和Exp3相比,mobile模型轉換為ONNX格式后,指標幾乎一致,說明 模型轉換前后,誤差較小,推理速度也有提升

  3. Exp3和Exp4相比,mobile整體指標弱于PP-OCRv4的。因為測評集集中在中英文的印刷體,手寫體少些,因此僅供參考。

  4. Exp6直接跑,會報以下錯誤,暫時沒有找到原因。如有知道的小伙伴,歡迎留言告知。

    5%|████████▏                                                                                                                                                     | 11/212 [00:42<13:11,  3.94s/it][1]    61275 bus error  python t.py/Users/xxxxx/miniconda3/envs/py310/lib/python3.10/multiprocessing/resource_tracker.py:224: UserWarning: resource_tracker: There appear to be 1 leaked semaphore objects to clean up at shutdown
    warnings.warn('resource_tracker: There appear to be %d '
    
  5. 因為Exp6暫時沒有找到原因,粗略將Exp5和Exp7相比,可以看到PP-OCRv5 server模型轉換為ONNX格式后,H-mean下降了5.8% ,但是轉換方式和mobile的相同,具體原因需要進一步排查。如有知道的小伙伴,歡迎留言告知。

  6. Exp7和Exp8相比,PP-OCRv5 server模型提升很大(H-mean提升7.72%)。不排除用到了測評集數據。

最終建議:

  • 如果是單一中英文場景,建議用PP-OCRv4系列
  • 如果是中英日、印刷和手寫體混合場景,建議用PP-OCRv5系列

上述表格中基于ONNXRuntime的結果已經更新到開源OCR模型對比中。

5. 集成到rapidocr中

該部分主要包括將托管模型到魔搭、更改rapidocr代碼適配等。

托管模型到魔搭

該部分主要是涉及模型上傳到對應位置,并合理命名。注意上傳完成后,需要打Tag,避免后續rapidocr whl包中找不到模型下載路徑。

我這里已經上傳到了魔搭上,詳細鏈接參見:link

更改rapidocr代碼適配

該部分主要涉及到更改default_models.yaml和paddle.py的代碼來適配。

同時,需要添加對應的單元測試,在保證之前單測成功的同時,新的針對性該模型的單測也能通過。

我這里已經做完了,小伙伴們感興趣可以去看看源碼。

寫在最后

至此,該部分集成工作就基本完成了。這部分代碼會集成到rapidocr==3.0.0中。版本號之所以從v2.1.0到v3.0.0,原因是:語義化版本號。

我在集成過程中,發現v2.1.0中字段不太合理,做了一些改進,動了外部API,因此只能升大版本號。請大家在使用過程中,注意查看最新文檔→ docs 。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83419.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83419.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83419.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spine工具入門教程2之導入

1、導入定義 從原畫轉化為Spine的環節。 &#xff08;1&#xff09;選擇路徑&#xff0c;拖動圖片導入方式 缺點&#xff1a;定位不準 【使用批量導出的方式】 在PS工具中&#xff0c;選擇所有圖層后右鍵選擇導出。 在Spine工具中&#xff0c;選擇路徑導入圖片。 然后再拖…

【03】完整開發騰訊云播放器SDK的UniApp官方UTS插件——優雅草上架插件市場-卓伊凡

【03】完整開發騰訊云播放器SDK的UniApp官方UTS插件——優雅草上架插件市場-卓伊凡 一、項目背景與轉型原因 1.1 原定計劃的變更 本系列教程最初規劃是開發即構美顏SDK的UTS插件&#xff0c;但由于甲方公司內部戰略調整&#xff0c;原項目被迫中止。考慮到&#xff1a; 技術…

戴爾AI服務器訂單激增至121億美元,但傳統業務承壓

戴爾科技121億美元的AI服務器訂單&#xff0c;不僅超過了公司整個2025財年的AI服務器出貨量&#xff0c;更讓其AI訂單積壓達到144億美元的歷史高位。 戴爾科技最新財報顯示&#xff0c;AI服務器需求的爆炸式增長正在重塑這家老牌PC制造商的業務格局&#xff0c;但同時也暴露出…

多線程和并發之線程

線程 前面講到進程&#xff1a;為了并發執行任務&#xff08;程序&#xff09;&#xff0c;現代操作系統才引進進程的概念 分析&#xff1a; 創建開銷問題&#xff1a;創建一個進程開銷&#xff1a;大 子進程需要拷貝父進程的整個地址空間 通信開銷問題&#xff1a;進程間的通…

AAAI 2025論文分享│STD-PLM:基于預訓練語言模型的時空數據預測與補全方法

本文詳細介紹了一篇發表于人工智能頂級會議AAAI 2025的論文《STD-PLM: Understanding Both Spatial and Temporal Properties of Spatial-Temporal Data with PLM》。該論文提出了一種基于預訓練語言模型&#xff08;Pre-trained Language Model?&#xff0c;PLM&#xff09;的…

前端八股 tcp 和 udp

都是傳輸層協議 udp 數據報協議 不可靠面向數據包對于應用層傳遞的報文加上UDP首部就傳給網絡層 tcp 傳輸控制協議 可靠 會將報文分段進行傳輸 區別&#xff1a; 1.tcp 可靠 udp 不可靠 2.tcp 面向連接 三握四揮 udp 無連接 3.tcp面向字節流 udp面向報文 4.效率低 效率高…

MES管理系統:Java+Vue,含源碼與文檔,實現生產過程實時監控、調度與優化,提升制造企業效能

前言&#xff1a; 在當今競爭激烈的制造業環境中&#xff0c;企業面臨著提高生產效率、降低成本、提升產品質量以及快速響應市場變化等多重挑戰。MES管理系統作為連接企業上層計劃管理系統與底層工業控制之間的橋梁&#xff0c;扮演著至關重要的角色。它能夠實時收集、分析和處…

MSTNet:用于糖尿病視網膜病變分類的多尺度空間感知 Transformer 與多實例學習方法|文獻速遞-深度學習醫療AI最新文獻

Title 題目 MSTNet: Multi-scale spatial-aware transformer with multi-instance learning for diabetic retinopathy classification MSTNet&#xff1a;用于糖尿病視網膜病變分類的多尺度空間感知 Transformer 與多實例學習方法 01 文獻速遞介紹 糖尿病視網膜病變&#…

每日八股文6.2

每日八股-6.2 Go1.GMP調度原理&#xff08;這部分多去看看golang三關加深理解&#xff09;2.GC&#xff08;同樣多去看看golang三關加深理解&#xff09;3.閉包4.go語言函數是一等公民是什么意思5.sync.Mutex和sync.RWMutex6.sync.WaitGroup7.sync.Cond8.sync.Pool9.panic和rec…

【Unity】相機 Cameras

1 前言 主要介紹官方文檔中相機模塊的內容。 關于“9動態分辨率”&#xff0c;這部分很多API文檔只是提了一下&#xff0c;具體細節還需要自己深入API才行。 2 攝像機介紹 Unity 場景在三維空間中表示游戲對象。由于觀察者的屏幕是二維屏幕&#xff0c;Unity 需要捕捉視圖并將…

SpringBoot(六)--- AOP、ThreadLocal

目錄 前言 一、AOP基礎 1.入門程序 2. AOP核心概念 3. 底層原理 二、AOP進階 1.通知類型 抽取切入點 2. 切入點表達式 2.1 execution 2.2 annoation 2.3 連接點詳解 三、ThreadLocal 前言 AOP&#xff08;面向切面編程&#xff09;&#xff0c;面向切面編程實際就…

【深度學習】 19. 生成模型:Diffusion Models

Diffusion Models Diffusion Models 簡介 Diffusion 模型是一類通過逐步添加噪聲并再逆向還原的方式進行圖像生成的深度生成模型。其基本流程包括&#xff1a; 前向過程&#xff08;Forward Process&#xff09;&#xff1a;將真實圖像逐步加噪&#xff0c;最終變為高斯噪聲…

Y1——鏈式前向星

知識點 模版——鏈表的前插法 head表示頭結點的下標 ver[i]表示結點i 的值 tot存儲當前已經用到了哪個 add用于將x插到頭結點 int head1; intt ver[N],Next[N]; int ttot-1; void add(int x){ver[tot]x;Next[tot]head;headtot; } 常見的鏈式前向星三種實現形式&#xff…

如何排查Redis單個Key命中率驟降?

問題現象 Redis整體命中率98%&#xff0c;但監控發現特定Key&#xff08;如user:1000:profile&#xff09;的命中率從99%驟降至40%&#xff0c;引發服務延遲上升。 排查步驟 1. 確認現象與定位Key // 通過Redis監控工具獲取Key指標 public void monitorKey(String key) {Je…

自定義Shell命令行解釋器

目錄 1、目標 2、顯示命令提示符 2.1 getenv 2.2 getcwd 2.3 putenv 3、獲取用戶輸入的命令 4、解析命令 5、處理內建命令 6、處理外部命令 7、完整代碼 7.1 myshell.cpp 7.2 Makefile 1、目標 實現一個Linux的myshell&#xff0c;有以下基本的功能。 顯示命令提示…

Laplace 噪聲

Laplace 噪聲是一種特定概率分布&#xff08;拉普拉斯分布&#xff09;產生的隨機擾動。它是差分隱私&#xff08;Differential Privacy, DP&#xff09;中最核心、最常用的噪聲機制之一。它的核心作用是在不泄露個體信息的前提下&#xff0c;允許從包含敏感數據的數據庫中提取…

基于空天地一體化網絡的通信系統matlab性能分析

目錄 1.引言 2.算法仿真效果演示 3.數據集格式或算法參數簡介 4.MATLAB核心程序 5.算法涉及理論知識概要 5.1 QPSK調制原理 5.2 空天地一體化網絡信道模型 5.3 空天地一體化網絡信道特性 6.參考文獻 7.完整算法代碼文件獲得 1.引言 空天地一體化網絡是一種將衛星通信…

【Delphi】接收windows文件夾中文件拖拽

本文根據EmailX45的視頻文件&#xff0c;進行了優化改進&#xff0c;原文參見&#xff1a;Delphi: Drag and Drop Files from Explorer into TPanel / TMemo - YouTube 在Windows中&#xff0c;如果將選擇的文件拖動到Delphi程序的控件上&#xff0c;有很多實現方法&#xff0c…

基于熱力學熵增原理的EM-GAN

簡介 簡介:提出基于熱力學熵增原理的EM-GAN,通過生成器熵最大化約束增強輸出多樣性。引入熵敏感激活函數與特征空間熵計算模塊,在MNIST/CelebA等數據集上實現FID分數提升23.6%,有效緩解模式崩潰問題。 論文題目:Entropy-Maximized Generative Adversarial Network (EM-G…

HashMap與ConcurrentHashMap詳解:實現原理、源碼分析與最佳實踐

引言 在Java編程中&#xff0c;集合框架是最常用的工具之一&#xff0c;而HashMap和ConcurrentHashMap則是其中使用頻率最高的兩個Map實現。它們都用于存儲鍵值對數據&#xff0c;但在實現機制、性能特點和適用場景上有著顯著差異。 HashMap作為單線程環境下的首選Map實現&am…