Skip to content

Commit e09a428

Browse files
committed
chore: update files
1 parent 42656c4 commit e09a428

File tree

1 file changed

+83
-22
lines changed

1 file changed

+83
-22
lines changed

docs/blog/posts/about_model/adapt_PP-OCRv5_det.md

Lines changed: 83 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)