@@ -199,17 +199,23 @@ for res in output:
199199
200200其中,计算 ** pred.txt** 代码如下:
201201
202- === "基于RapidOCR ONNXRuntime获得 ** pred.txt** 文本文件"
202+ === "(Exp1)基于RapidOCR框架ONNXRuntime模型获得 ** pred.txt** 文本文件"
203203
204204 ```python linenums="1"
205205 import cv2
206206 import numpy as np
207207 from datasets import load_dataset
208- from rapidocr import RapidOCR
209208 from tqdm import tqdm
210209
211- model_path = "models/PP-OCRv5_mobile_det/inference.onnx"
212- engine = RapidOCR(params={"Det.model_path": model_path})
210+ from rapidocr import EngineType, ModelType, OCRVersion, RapidOCR
211+
212+ engine = RapidOCR(
213+ params={
214+ "Det.ocr_version": OCRVersion.PPOCRV5,
215+ "Det.engine_type": EngineType.ONNXRUNTIME,
216+ "Det.model_type": ModelType.MOBILE,
217+ }
218+ )
213219
214220 dataset = load_dataset("SWHL/text_det_test_dataset")
215221 test_data = dataset["test"]
@@ -233,11 +239,47 @@ for res in output:
233239 f.write(f"{v}\n")
234240 ```
235241
236- === "基于RapidOCR Paddle格式模型获得 ** pred.txt** 文本文件"
242+ === "(Exp2)基于RapidOCR框架Paddle格式模型获得 ** pred.txt** 文本文件 → Exp2 "
237243
238- TODO
244+ ```python linenus="1"
245+ import cv2
246+ import numpy as np
247+ from datasets import load_dataset
248+ from tqdm import tqdm
249+
250+ from rapidocr import EngineType, ModelType, OCRVersion, RapidOCR
239251
240- === "基于PaddleX获得 ** pred.txt** 文本文件"
252+ engine = RapidOCR(
253+ params={
254+ "Det.ocr_version": OCRVersion.PPOCRV5,
255+ "Det.engine_type": EngineType.PADDLE,
256+ "Det.model_type": ModelType.MOBILE,
257+ }
258+ )
259+
260+ dataset = load_dataset("SWHL/text_det_test_dataset")
261+ test_data = dataset["test"]
262+
263+ content = []
264+ for i, one_data in enumerate(tqdm(test_data)):
265+ img = np.array(one_data.get("image"))
266+ img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
267+
268+ ocr_results = engine(img, use_det=True, use_cls=False, use_rec=False)
269+ dt_boxes = ocr_results.boxes
270+
271+ dt_boxes = [] if dt_boxes is None else dt_boxes.tolist()
272+ elapse = ocr_results.elapse
273+
274+ gt_boxes = [v["points"] for v in one_data["shapes"]]
275+ content.append(f"{dt_boxes}\t{gt_boxes}\t{elapse}")
276+
277+ with open("pred.txt", "w", encoding="utf-8") as f:
278+ for v in content:
279+ f.write(f"{v}\n")
280+ ```
281+
282+ === "(Exp3)基于PaddleX框架Paddle格式获得 ** pred.txt** 文本文件"
241283
242284 ```python linenums="1"
243285 import time
@@ -285,24 +327,41 @@ print(metric)
285327
286328指标汇总如下(以下指标均为CPU下计算所得):
287329
288- | 模型| 推理代码| 推理引擎| Precision↑| Recall↑| H-mean↑| Elapse↓|
289- | :---| :---| :---| :---:| :---:| :---:| :---:|
290- | PP-OCRv5_mobile_det| RapidOCR| ONNXRuntime| 0.7861| 0.8266| 0.8058| 0.1499|
291- | PP-OCRv5_mobile_det| PaddleX | PaddlePaddle| 0.7864| 0.8018| 0.794| 0.1954|
292- | PP-OCRv4_mobile_det| RapidOCR | ONNXRuntime| 0.8301| 0.8659| 0.8476| -|
293- ||||||||
294- | PP-OCRv5_server_det| RapidOCR| ONNXRuntime| 0.7394| 0.8442| 0.7883| 2.1106|
295- | PP-OCRv5_server_det| RapidOCR | PaddlePaddle|||||
296- | PP-OCRv5_server_det| PaddleX | PaddlePaddle| 0.8347| 0.8583| 0.8463| 2.1450|
297- | PP-OCRv4_server_det| RapidOCR | ONNXRuntime| 0.7922| 0.8128| 0.7691| -|
330+ | Exp| 模型| 推理代码| 推理引擎| Precision↑| Recall↑| H-mean↑| Elapse↓|
331+ | :---:| :---| :---| :---| :---:| :---:| :---:| :---:|
332+ | 1| PP-OCRv5_mobile_det| PaddleX | PaddlePaddle| 0.7864| 0.8018| 0.7940| 0.1956|
333+ | 2| PP-OCRv5_mobile_det| RapidOCR| PaddlePaddle| 0.7861| 0.8266| 0.8058| 0.5328|
334+ | 3| PP-OCRv5_mobile_det| RapidOCR| ONNXRuntime| 0.7861| 0.8266| 0.8058| 0.1653|
335+ | 4| PP-OCRv4_mobile_det| RapidOCR | ONNXRuntime| 0.8301| 0.8659| 0.8476| -|
336+ |||||||||
337+ | 5| PP-OCRv5_server_det| PaddleX | PaddlePaddle| 0.8347| 0.8583| 0.8463| 2.1450|
338+ | 6| PP-OCRv5_server_det| RapidOCR | PaddlePaddle|||||
339+ | 7| PP-OCRv5_server_det| RapidOCR| ONNXRuntime| 0.7394| 0.8442| 0.7883| 2.0628|
340+ | 8| PP-OCRv4_server_det| RapidOCR | ONNXRuntime| 0.7922| 0.8128| 0.7691| -|
298341
299342从以上结果来看,可以得到以下结论:
300343
301- 1 . mobile模型转换为ONNX格式后,指标有小幅提升,推理速度也有提升。
302- 2 . mobile整体指标弱于PP-OCRv4的,应该是测评集覆盖不全导致的。
303- 3 . v5 server模型转换为ONNX格式后,H-mean下降了5.8%。转换方式和mobile的相同,具体原因需要进一步排查。
344+ 1 . Exp1和Exp2相比,H-mean差异不大,说明文本检测 ** 前后处理代码可以共用** 。
345+ 2 . Exp2和Exp3相比,mobile模型转换为ONNX格式后,指标几乎一致,说明 ** 模型转换前后,误差较小,推理速度也有提升** 。
346+ 3 . Exp3和Exp4相比,mobile整体指标弱于PP-OCRv4的。因为测评集集中在中英文的印刷体,手写体少些,因此仅供参考。
347+ 4 . Exp6直接跑,会报以下错误,暂时没有找到原因。
348+
349+ ``` bash linenums="1"
350+ 5%| ████████▏ | 11/212 [00:42< 13:11, 3.94s/it][1] 61275 bus error python t.py
351+
352+ /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
353+ warnings.warn(' resource_tracker: There appear to be %d '
354+ ` ` `
355+
356+ 5. 因为Exp6暂时没有找到原因,粗略将Exp5和Exp7相比,可以看到PP-OCRv5 server模型转换为ONNX格式后,** H-mean下降了5.8%** ,但是转换方式和mobile的相同,具体原因需要进一步排查。
357+ 6. Exp7和Exp8相比,PP-OCRv5 server模型提升很大(H-mean提升7.72%)。不排除用到了测评集数据。
358+
359+ !!! tip
304360
305- 上述表格中基于ONNXRuntimde的结果已经更新到[ 开源OCR模型对比] ( ./model_summary.md ) 中。
361+ - 如果是单一中英文场景,建议用PP-OCRv4系列
362+ - 如果是中英日、印刷和手写体混合场景,建议用PP-OCRv5系列
363+
364+ 上述表格中基于ONNXRuntime的结果已经更新到[开源OCR模型对比](./model_summary.md)中。
306365
307366# ## 5. 集成到rapidocr中
308367
@@ -324,4 +383,6 @@ print(metric)
324383
325384# ## 写在最后
326385
327- 至此,集成工作就基本完成了。
386+ 至此,该部分集成工作就基本完成了。这部分代码会集成到` rapidocr==3.0.0` 中。版本号之所以从v2.1.0到v3.0.0,原因是:语义化版本号。
387+
388+ 我在集成过程中,发现v2.1.0中字段不太合理,于是做了一些改进,动了外部API,因此只能升大版本号。请大家在使用过程中,注意查看最新文档→ [docs](https://rapidai.github.io/RapidOCRDocs/main/install_usage/rapidocr/usage/) 。
0 commit comments