README.md 6.8 KB
Newer Older
1
# PaddleOCR
yangql's avatar
yangql committed
2
3
## 论文
PaddleOCR通过det、rec、cls三个模型分别实现字符检测、字符识别和字符方向分类的应用
yangql's avatar
yangql committed
4

yangql's avatar
yangql committed
5
6
7
8
9
10
11
12
13
14
15
det模型主要用DB算法,参考论文如下:

https://arxiv.org/pdf/1911.08947.pdf

rec模型主要用SVTR算法,参考论文如下:

https://arxiv.org/pdf/2205.00159.pdf

cls模型用mobilenetv3实现通用分类,参考论文如下:

https://arxiv.org/pdf/1905.02244.pdf
yangql's avatar
yangql committed
16
17

## 模型结构
18
PaddleOCR使用ch_PP-OCRv3_det + ch_ppocr_mobile_v2.0_cls + ch_PP-OCRv3_rec三个模型进行图像中的文本识别。
yangql's avatar
yangql committed
19
det:
yangql's avatar
yangql committed
20

yangql's avatar
yangql committed
21
![image](./Doc/images/dbnet-arc.png)
yangql's avatar
yangql committed
22

yangql's avatar
yangql committed
23
rec:
yangql's avatar
yangql committed
24

yangql's avatar
yangql committed
25
![image](./Doc/images/SVTR-arc.png)
yangql's avatar
yangql committed
26

yangql's avatar
yangql committed
27
cls:
yangql's avatar
yangql committed
28

yangql's avatar
yangql committed
29
![image](./Doc/images/mobilenetv3-arc.png)
yangql's avatar
yangql committed
30
31

## 算法原理
dcuai's avatar
dcuai committed
32
![image](./Doc/images/ocr.png)
yangql's avatar
yangql committed
33
## 环境配置
yangql's avatar
yangql committed
34
### Docker(方法一)
yangql's avatar
yangql committed
35
36
拉取镜像:
```
yangql's avatar
yangql committed
37
docker pull image.sourcefind.cn:5000/dcu/admin/base/migraphx:4.3.0-ubuntu20.04-dtk24.04.1-py3.10
yangql's avatar
yangql committed
38
```
yangql's avatar
yangql committed
39
40
创建并启动容器,安装相关依赖:
```
dcuai's avatar
dcuai committed
41
docker run --shm-size 16g --network=host --name=paddleocr_onnxruntime --privileged -v /opt/hyhal:/opt/hyhal --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v $PWD/paddleocr_onnxruntime:/home/paddleocr_onnxruntime -it <Your Image ID> /bin/bash
yangql's avatar
yangql committed
42

yangql's avatar
yangql committed
43
44
45
# 激活dtk
source /opt/dtk/env.sh
```
yangql's avatar
yangql committed
46
47
48
49
50
### Dockerfile(方法二)
```
cd ./docker
docker build --no-cache -t paddleocr_onnxruntime:2.0 .

dcuai's avatar
dcuai committed
51
docker run --shm-size 16g --network=host --name=paddleocr_onnxruntime --privileged -v /opt/hyhal:/opt/hyhal --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v $PWD/paddleocr_onnxruntime:/home/paddleocr_onnxruntime -it <Your Image ID> /bin/bash
yangql's avatar
yangql committed
52
```
yangql's avatar
yangql committed
53
54
55
56

## 数据集
## 推理
### Python版本推理
dcuai's avatar
dcuai committed
57
本次采用PaddleOCR模型基于ONNXRuntime推理框架进行图像文本识别,模型文件ch_PP-OCRv3_det_infer.onnx、ch_ppocr_mobile_v2.0_cls_infer.onnx、ch_PP-OCRv3_rec_infer.onnx模型文件保存在Resource/Models文件夹下。下面介绍如何运行python代码示例,Python示例的详细说明见Doc目录下的Tutorial_Python.md。
yangql's avatar
yangql committed
58
#### 设置Python环境变量
yangql's avatar
yangql committed
59
60
61
```
export PYTHONPATH=/opt/dtk/lib:$PYTHONPATH
```
yangql's avatar
yangql committed
62
#### 运行示例
yangql's avatar
yangql committed
63
```python
yangql's avatar
yangql committed
64
65
# 进入paddleocr onnxruntime工程根目录
cd <path_to_paddleocr_onnxruntime> 
yangql's avatar
yangql committed
66
67
68
69
70

# 进入示例程序目录
cd Python/

# 安装依赖
dcuai's avatar
dcuai committed
71
pip install -r requirements.txt
yangql's avatar
yangql committed
72
73

### 运行示例
74
python paddleocr.py
yangql's avatar
yangql committed
75
76
```

yangql's avatar
yangql committed
77
### C++版本推理
dcuai's avatar
dcuai committed
78
本次采用PaddleOCR模型基于ONNXRuntime推理框架进行图像文本识别,模型文件ch_PP-OCRv3_det_infer.onnx、ch_ppocr_mobile_v2.0_cls_infer.onnx、ch_PP-OCRv3_rec_infer.onnx模型文件保存在Resource/Models文件夹下。下面介绍如何运行python代码示例,Python示例的详细说明见Doc目录下的Tutorial_Cpp.md。
yangql's avatar
yangql committed
79
#### 构建工程
yangql's avatar
yangql committed
80
```
yangql's avatar
yangql committed
81
82
83
84
85
source /opt/dtk/env.sh

# 安装Opencv依赖
cd <path_to_resnet50_onnxruntime>

yangql's avatar
yangql committed
86
87
rbuild build -d depend
```
yangql's avatar
yangql committed
88
#### 设置环境变量
yangql's avatar
yangql committed
89
90
将依赖库依赖加入环境变量LD_LIBRARY_PATH,在~/.bashrc中添加如下语句:
```
yangql's avatar
yangql committed
91
export LD_LIBRARY_PATH=<path_to_paddleocr_onnxruntime>/depend/lib64/:$LD_LIBRARY_PATH
yangql's avatar
yangql committed
92
93
94
95
96
97
```
然后执行:
```
source ~/.bashrc
```
### 运行示例
yangql's avatar
yangql committed
98
```
yangql's avatar
yangql committed
99
100
# 进入paddleocr onnxruntime工程根目录
cd <path_to_paddleocr_onnxruntime> 
yangql's avatar
yangql committed
101
102
103
104
105

# 进入build目录
cd build/

# 执行示例程序
106
./PaddleOCR
yangql's avatar
yangql committed
107
108
```

yangql's avatar
yangql committed
109
110
111
112
113
## result
### python版本
```
[[[[245.0, 9.0], [554.0, 8.0], [554.0, 27.0], [245.0, 28.0]], '人生活的真实写照:善有善报,恶有恶报。', '0.9306996673345566'], [[[9.0, 49.0], [522.0, 50.0], [522.0, 69.0], [9.0, 68.0]], '我们中国人有一句俗语说:“种瓜得瓜,种豆得豆。”而这就是每个', '0.9294075581335253'], [[[84.0, 105.0], [555.0, 104.0], [555.0, 125.0], [85.0, 127.0]], "every man's life: good begets good, and evil leads to evil.", '0.8932319914301237'], [[[28.0, 147.0], [556.0, 146.0], [556.0, 168.0], [28.0, 169.0]], 'melons; if he sows beans, he will reap beans." And this is true of', '0.900923888185131'], [[[0.0, 185.0], [524.0, 188.0], [524.0, 212.0], [0.0, 209.0]], 'We Chinese have a saying:"If a man plants melons, he will reap', '0.9216671202863965'], [[[295.0, 248.0], [553.0, 248.0], [553.0, 264.0], [295.0, 264.0]], '它不仅适用于今生,也适用于来世。', '0.927988795673146'], [[[14.0, 289.0], [554.0, 290.0], [554.0, 307.0], [14.0, 306.0]], '一每一个行为都有一种结果。在我看来,这种想法是全宇宙的道德基础;', '0.88565122719967'], [[[9.0, 330.0], [521.0, 330.0], [521.0, 349.0], [9.0, 349.0]], '假如说过去的日子曾经教给我们一些什么的话,那就是有因必有果一', '0.9162070232052957'], [[[343.0, 388.0], [555.0, 388.0], [555.0, 405.0], [343.0, 405.0]], 'in this world and the next.', '0.8764956444501877'], [[[15.0, 426.0], [554.0, 426.0], [554.0, 448.0], [15.0, 448.0]], 'opinion, is the moral foundation of the universe; it applies equally', '0.9183026262815448'], [[[62.0, 466.0], [556.0, 468.0], [556.0, 492.0], [62.0, 490.0]], 'effect - every action has a consequence. This thought, in my', '0.9308378403304053']]
```
yangql's avatar
yangql committed
114

yangql's avatar
yangql committed
115
### C++版本
yangql's avatar
yangql committed
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
```
TextBox[0](+padding)[score(0.711119),[x: 293, y: 58], [x: 604, y: 58], [x: 604, y: 79], [x: 293, y: 79]]
...
TextBox[11](+padding)[score(0.605026),[x: 92, y: 554], [x: 610, y: 557], [x: 609, y: 585], [x: 92, y: 582]]
---------- step: drawTextBoxes ----------
---------- step: angleNet getAngles ----------
angle[0][index(1), score(1.000000), time(57.276707ms)]
...
angle[11][index(1), score(0.930842), time(2.952602ms)]
---------- step: crnnNet getTextLine ----------
textLine[0](人生活的真实写照:善有善报,恶有恶报。)
textScores[0]{0.576271 ,0.99956 ,0.999475 ,0.99967 ,0.998779 ,0.999525 ,0.805865 ,0.999865 ,0.988233 ,0.999061 ,0.999581 ,0.999483 ,0.999324 ,0.995648 ,0.561861 ,0.961845 ,0.995993 ,0.998593 ,0.994963}
crnnTime[0](58.019418ms)
...
textLine[11](If the past has taught us anything, it is that every cause brings)
textScores[11]{0.996653 ,0.625094 ,0.97989 ,0.999761 ,0.816289 ,0.99883 ,0.963821 ,0.999222 ,0.999725 ,0.999588 ,0.542554 ,0.998707 ,0.911063 ,0.603935 ,0.99833 ,0.994734 ,0.998606 ,0.999571 ,0.9995 ,0.99971 ,0.983833 ,0.941867 ,0.989647 ,0.999145 ,0.998365 ,0.995752 ,0.999369 ,0.999424 ,0.976135 ,0.998815 ,0.999755 ,0.67898 ,0.999837 ,0.999205 ,0.982815 ,0.991013 ,0.999252 ,0.818822 ,0.996863 ,0.998451 ,0.999198 ,0.812635 ,0.999701 ,0.567811 ,0.999545 ,0.815998 ,0.996471 ,0.998722 ,0.999546 ,0.999121 ,0.999202 ,0.99971 ,0.980306 ,0.999399 ,0.635116 ,0.99954 ,0.998961 ,0.600432 ,0.990555 ,0.999872 ,0.998974 ,0.999687 ,0.56602 ,0.999607 ,0.999343}
crnnTime[11](38.051758ms)
```
yangql's avatar
yangql committed
134
135
### 精度

yangql's avatar
yangql committed
136
137
138
139
## 应用场景
### 算法类别
`ocr`
### 热点应用行业
dcuai's avatar
dcuai committed
140
`制造,金融,交通,教育,医疗`
yangql's avatar
yangql committed
141
142

## 源码仓库及问题反馈
yangql's avatar
yangql committed
143
https://developer.hpccube.com/codes/modelzoo/paddleocr_onnxruntime
yangql's avatar
yangql committed
144

yangql's avatar
yangql committed
145
## 参考资料
yangql's avatar
yangql committed
146
147
https://github.com/RapidAI/RapidOCR

148
https://github.com/RapidAI/RapidOcrOnnx