inference.md 20.9 KB
Newer Older
1

dyning's avatar
dyning committed
2
# 基于Python预测引擎推理
3

licx's avatar
licx committed
4
inference 模型(`fluid.io.save_inference_model`保存的模型)
5
一般是模型训练完成后保存的固化模型,多用于预测部署。训练过程中保存的模型是checkpoints模型,保存的是模型的参数,多用于恢复训练等。
WenmuZhou's avatar
WenmuZhou committed
6
与checkpoints模型相比,inference 模型会额外保存模型的结构信息,在预测部署、加速推理上性能优越,灵活方便,适合与实际系统集成。更详细的介绍请参考文档[分类预测框架](https://github.com/PaddlePaddle/PaddleClas/blob/master/docs/zh_CN/extension/paddle_inference.md).
LDOUBLEV's avatar
LDOUBLEV committed
7
8
9

接下来首先介绍如何将训练的模型转换成inference模型,然后将依次介绍文本检测、文本识别以及两者串联基于预测引擎推理。

10
11
12

- [一、训练模型转inference模型](#训练模型转inference模型)
    - [检测模型转inference模型](#检测模型转inference模型)
licx's avatar
licx committed
13
    - [识别模型转inference模型](#识别模型转inference模型)  
WenmuZhou's avatar
WenmuZhou committed
14
15
    - [方向分类模型转inference模型](#方向分类模型转inference模型)  

16
17
18
19
- [二、文本检测模型推理](#文本检测模型推理)
    - [1. 超轻量中文检测模型推理](#超轻量中文检测模型推理)
    - [2. DB文本检测模型推理](#DB文本检测模型推理)
    - [3. EAST文本检测模型推理](#EAST文本检测模型推理)
licx's avatar
licx committed
20
    - [4. SAST文本检测模型推理](#SAST文本检测模型推理)  
WenmuZhou's avatar
WenmuZhou committed
21

22
23
24
25
- [三、文本识别模型推理](#文本识别模型推理)
    - [1. 超轻量中文识别模型推理](#超轻量中文识别模型推理)
    - [2. 基于CTC损失的识别模型推理](#基于CTC损失的识别模型推理)
    - [3. 基于Attention损失的识别模型推理](#基于Attention损失的识别模型推理)
WenmuZhou's avatar
WenmuZhou committed
26
27
28
29
30
31
32
33
    - [4. 基于SRN损失的识别模型推理](#基于SRN损失的识别模型推理)
    - [5. 自定义文本识别字典的推理](#自定义文本识别字典的推理)
    - [6. 多语言模型的推理](#多语言模型的推理)

- [四、方向分类模型推理](#方向识别模型推理)
    - [1. 方向分类模型推理](#方向分类模型推理)

- [五、文本检测、方向分类和文字识别串联推理](#文本检测、方向分类和文字识别串联推理)
34
35
    - [1. 超轻量中文OCR模型推理](#超轻量中文OCR模型推理)
    - [2. 其他模型推理](#其他模型推理)
WenmuZhou's avatar
WenmuZhou committed
36
37


38
<a name="训练模型转inference模型"></a>
dyning's avatar
dyning committed
39
## 一、训练模型转inference模型
40
<a name="检测模型转inference模型"></a>
LDOUBLEV's avatar
LDOUBLEV committed
41
42
43
44
### 检测模型转inference模型

下载超轻量级中文检测模型:
```
WenmuZhou's avatar
WenmuZhou committed
45
wget -P ./ch_lite/ https://paddleocr.bj.bcebos.com/20-09-22/mobile/det/ch_ppocr_mobile_v1.1_det_train.tar && tar xf ./ch_lite/ch_ppocr_mobile_v1.1_det_train.tar -C ./ch_lite/
LDOUBLEV's avatar
LDOUBLEV committed
46
47
48
```
上述模型是以MobileNetV3为backbone训练的DB算法,将训练好的模型转换成inference模型只需要运行如下命令:
```
dyning's avatar
dyning committed
49
50
51
52
53
# -c后面设置训练算法的yml配置文件
# -o配置可选参数
# Global.checkpoints参数设置待转换的训练模型地址,不用添加文件后缀.pdmodel,.pdopt或.pdparams。
# Global.save_inference_dir参数设置转换的模型将保存的地址。

WenmuZhou's avatar
WenmuZhou committed
54
python3 tools/export_model.py -c configs/det/det_mv3_db_v1.1.yml -o Global.checkpoints=./ch_lite/ch_ppocr_mobile_v1.1_det_train/best_accuracy Global.save_inference_dir=./inference/det_db/
LDOUBLEV's avatar
LDOUBLEV committed
55
```
56
57
58
转inference模型时,使用的配置文件和训练时使用的配置文件相同。另外,还需要设置配置文件中的`Global.checkpoints``Global.save_inference_dir`参数。
其中`Global.checkpoints`指向训练中保存的模型参数文件,`Global.save_inference_dir`是生成的inference模型要保存的目录。
转换成功后,在`save_inference_dir`目录下有两个文件:
LDOUBLEV's avatar
LDOUBLEV committed
59
```
LDOUBLEV's avatar
LDOUBLEV committed
60
inference/det_db/
LDOUBLEV's avatar
LDOUBLEV committed
61
62
63
64
  └─  model     检测inference模型的program文件
  └─  params    检测inference模型的参数文件
```

65
<a name="识别模型转inference模型"></a>
LDOUBLEV's avatar
LDOUBLEV committed
66
67
68
69
### 识别模型转inference模型

下载超轻量中文识别模型:
```
WenmuZhou's avatar
WenmuZhou committed
70
wget -P ./ch_lite/ https://paddleocr.bj.bcebos.com/20-09-22/mobile/rec/ch_ppocr_mobile_v1.1_rec_train.tar && tar xf ./ch_lite/ch_ppocr_mobile_v1.1_rec_train.tar -C ./ch_lite/
LDOUBLEV's avatar
LDOUBLEV committed
71
72
73
74
```

识别模型转inference模型与检测的方式相同,如下:
```
dyning's avatar
dyning committed
75
76
77
78
79
# -c后面设置训练算法的yml配置文件
# -o配置可选参数
# Global.checkpoints参数设置待转换的训练模型地址,不用添加文件后缀.pdmodel,.pdopt或.pdparams。
# Global.save_inference_dir参数设置转换的模型将保存的地址。

WenmuZhou's avatar
WenmuZhou committed
80
python3 tools/export_model.py -c configs/rec/ch_ppocr_v1.1/rec_chinese_lite_train_v1.1.yml -o Global.checkpoints=./ch_lite/ch_ppocr_mobile_v1.1_rec_train/best_accuracy \
LDOUBLEV's avatar
LDOUBLEV committed
81
        Global.save_inference_dir=./inference/rec_crnn/
LDOUBLEV's avatar
LDOUBLEV committed
82
```
LDOUBLEV's avatar
LDOUBLEV committed
83

84
**注意:**如果您是在自己的数据集上训练的模型,并且调整了中文字符的字典文件,请注意修改配置文件中的`character_dict_path`是否是所需要的字典文件。
LDOUBLEV's avatar
LDOUBLEV committed
85
86
87

转换成功后,在目录下有两个文件:
```
LDOUBLEV's avatar
LDOUBLEV committed
88
/inference/rec_crnn/
LDOUBLEV's avatar
LDOUBLEV committed
89
90
91
  └─  model     识别inference模型的program文件
  └─  params    识别inference模型的参数文件
```
92

WenmuZhou's avatar
WenmuZhou committed
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<a name="方向分类模型转inference模型"></a>
### 方向分类模型转inference模型

下载方向分类模型:
```
wget -P ./ch_lite/ https://paddleocr.bj.bcebos.com/20-09-22/cls/ch_ppocr_mobile_v1.1_cls_train.tar && tar xf ./ch_lite/ch_ppocr_mobile_v1.1_cls_train.tar -C ./ch_lite/
```

方向分类模型转inference模型与检测的方式相同,如下:
```
# -c后面设置训练算法的yml配置文件
# -o配置可选参数
# Global.checkpoints参数设置待转换的训练模型地址,不用添加文件后缀.pdmodel,.pdopt或.pdparams。
# Global.save_inference_dir参数设置转换的模型将保存的地址。

python3 tools/export_model.py -c configs/cls/cls_mv3.yml -o Global.checkpoints=./ch_lite/ch_ppocr_mobile_v1.1_cls_train/best_accuracy \
        Global.save_inference_dir=./inference/cls/
```

转换成功后,在目录下有两个文件:
```
/inference/cls/
  └─  model     识别inference模型的program文件
  └─  params    识别inference模型的参数文件
```

119
<a name="文本检测模型推理"></a>
dyning's avatar
dyning committed
120
## 二、文本检测模型推理
121

122
文本检测模型推理,默认使用DB模型的配置参数。当不使用DB模型时,在推理时,需要通过传入相应的参数进行算法适配,细节参考下文。
dyning's avatar
dyning committed
123

124
125
<a name="超轻量中文检测模型推理"></a>
### 1. 超轻量中文检测模型推理
dyning's avatar
dyning committed
126
127

超轻量中文检测模型推理,可以执行如下命令:
128
129

```
LDOUBLEV's avatar
LDOUBLEV committed
130
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/2.jpg" --det_model_dir="./inference/det_db/"
131
132
```

133
可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下:
dyning's avatar
dyning committed
134

tink2123's avatar
tink2123 committed
135
![](../imgs_results/det_res_2.jpg)
136

137
通过设置参数`det_max_side_len`的大小,改变检测算法中图片规范化的最大值。当图片的长宽都小于`det_max_side_len`,则使用原图预测,否则将图片等比例缩放到最大值,进行预测。该参数默认设置为`det_max_side_len=960`。 如果输入图片的分辨率比较大,而且想使用更大的分辨率预测,可以执行如下命令:
138
139

```
LDOUBLEV's avatar
LDOUBLEV committed
140
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/2.jpg" --det_model_dir="./inference/det_db/" --det_max_side_len=1200
dyning's avatar
dyning committed
141
142
```

dyning's avatar
dyning committed
143
如果想使用CPU进行预测,执行命令如下
dyning's avatar
dyning committed
144
```
LDOUBLEV's avatar
LDOUBLEV committed
145
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/2.jpg" --det_model_dir="./inference/det_db/" --use_gpu=False
dyning's avatar
dyning committed
146
147
```

148
149
<a name="DB文本检测模型推理"></a>
### 2. DB文本检测模型推理
dyning's avatar
dyning committed
150
151
152

首先将DB文本检测训练过程中保存的模型,转换成inference model。以基于Resnet50_vd骨干网络,在ICDAR2015英文数据集训练的模型为例([模型下载地址](https://paddleocr.bj.bcebos.com/det_r50_vd_db.tar)),可以使用如下命令进行转换:

153
```
dyning's avatar
dyning committed
154
155
156
157
# -c后面设置训练算法的yml配置文件
# Global.checkpoints参数设置待转换的训练模型地址,不用添加文件后缀.pdmodel,.pdopt或.pdparams。
# Global.save_inference_dir参数设置转换的模型将保存的地址。

dyning's avatar
dyning committed
158
python3 tools/export_model.py -c configs/det/det_r50_vd_db.yml -o Global.checkpoints="./models/det_r50_vd_db/best_accuracy" Global.save_inference_dir="./inference/det_db"
dyning's avatar
dyning committed
159
160
161
162
163
164
165
166
```

DB文本检测模型推理,可以执行如下命令:

```
python3 tools/infer/predict_det.py --image_dir="./doc/imgs_en/img_10.jpg" --det_model_dir="./inference/det_db/"
```

167
可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下:
dyning's avatar
dyning committed
168

169
![](../imgs_results/det_res_img_10_db.jpg)
dyning's avatar
dyning committed
170

171
**注意**:由于ICDAR2015数据集只有1000张训练图像,且主要针对英文场景,所以上述模型对中文文本图像检测效果会比较差。
dyning's avatar
dyning committed
172

173
174
<a name="EAST文本检测模型推理"></a>
### 3. EAST文本检测模型推理
dyning's avatar
dyning committed
175
176
177
178
179
180
181
182

首先将EAST文本检测训练过程中保存的模型,转换成inference model。以基于Resnet50_vd骨干网络,在ICDAR2015英文数据集训练的模型为例([模型下载地址](https://paddleocr.bj.bcebos.com/det_r50_vd_east.tar)),可以使用如下命令进行转换:

```
# -c后面设置训练算法的yml配置文件
# Global.checkpoints参数设置待转换的训练模型地址,不用添加文件后缀.pdmodel,.pdopt或.pdparams。
# Global.save_inference_dir参数设置转换的模型将保存的地址。

dyning's avatar
dyning committed
183
python3 tools/export_model.py -c configs/det/det_r50_vd_east.yml -o Global.checkpoints="./models/det_r50_vd_east/best_accuracy" Global.save_inference_dir="./inference/det_east"
dyning's avatar
dyning committed
184
185
```

licx's avatar
licx committed
186
**EAST文本检测模型推理,需要设置参数`--det_algorithm="EAST"`**,可以执行如下命令:
dyning's avatar
dyning committed
187
188

```
LDOUBLEV's avatar
LDOUBLEV committed
189
python3 tools/infer/predict_det.py --det_algorithm="EAST" --image_dir="./doc/imgs_en/img_10.jpg" --det_model_dir="./inference/det_east/"
dyning's avatar
dyning committed
190
```
191
可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下:
dyning's avatar
dyning committed
192

193
![](../imgs_results/det_res_img_10_east.jpg)
dyning's avatar
dyning committed
194

195
196
197
198
199
200
201
202
203
204
**注意**:本代码库中,EAST后处理Locality-Aware NMS有python和c++两种版本,c++版速度明显快于python版。由于c++版本nms编译版本问题,只有python3.5环境下会调用c++版nms,其他情况将调用python版nms。


<a name="SAST文本检测模型推理"></a>
### 4. SAST文本检测模型推理
#### (1). 四边形文本检测模型(ICDAR2015)  
首先将SAST文本检测训练过程中保存的模型,转换成inference model。以基于Resnet50_vd骨干网络,在ICDAR2015英文数据集训练的模型为例([模型下载地址](https://paddleocr.bj.bcebos.com/SAST/sast_r50_vd_icdar2015.tar)),可以使用如下命令进行转换:
```
python3 tools/export_model.py -c configs/det/det_r50_vd_sast_icdar15.yml -o Global.checkpoints="./models/sast_r50_vd_icdar2015/best_accuracy" Global.save_inference_dir="./inference/det_sast_ic15"
```
licx's avatar
licx committed
205
**SAST文本检测模型推理,需要设置参数`--det_algorithm="SAST"`**,可以执行如下命令:
206
207
208
209
210
211
212
213
214
```
python3 tools/infer/predict_det.py --det_algorithm="SAST" --image_dir="./doc/imgs_en/img_10.jpg" --det_model_dir="./inference/det_sast_ic15/"
```
可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下:

![](../imgs_results/det_res_img_10_sast.jpg)

#### (2). 弯曲文本检测模型(Total-Text)  
首先将SAST文本检测训练过程中保存的模型,转换成inference model。以基于Resnet50_vd骨干网络,在Total-Text英文数据集训练的模型为例([模型下载地址](https://paddleocr.bj.bcebos.com/SAST/sast_r50_vd_total_text.tar)),可以使用如下命令进行转换:
215

216
217
218
219
```
python3 tools/export_model.py -c configs/det/det_r50_vd_sast_totaltext.yml -o Global.checkpoints="./models/sast_r50_vd_total_text/best_accuracy" Global.save_inference_dir="./inference/det_sast_tt"
```

licx's avatar
licx committed
220
**SAST文本检测模型推理,需要设置参数`--det_algorithm="SAST"`,同时,还需要增加参数`--det_sast_polygon=True`,**可以执行如下命令:
221
222
223
224
```
python3 tools/infer/predict_det.py --det_algorithm="SAST" --image_dir="./doc/imgs_en/img623.jpg" --det_model_dir="./inference/det_sast_tt/" --det_sast_polygon=True
```
可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下:
225

226
227
228
229
230
231
![](../imgs_results/det_res_img623_sast.jpg)

**注意**:本代码库中,SAST后处理Locality-Aware NMS有python和c++两种版本,c++版速度明显快于python版。由于c++版本nms编译版本问题,只有python3.5环境下会调用c++版nms,其他情况将调用python版nms。


<a name="文本识别模型推理"></a>
dyning's avatar
dyning committed
232
## 三、文本识别模型推理
233

dyning's avatar
dyning committed
234
下面将介绍超轻量中文识别模型推理、基于CTC损失的识别模型推理和基于Attention损失的识别模型推理。对于中文文本识别,建议优先选择基于CTC损失的识别模型,实践中也发现基于Attention损失的效果不如基于CTC损失的识别模型。此外,如果训练时修改了文本的字典,请参考下面的自定义文本识别字典的推理。
dyning's avatar
dyning committed
235
236


237
238
<a name="超轻量中文识别模型推理"></a>
### 1. 超轻量中文识别模型推理
dyning's avatar
dyning committed
239
240
241
242

超轻量中文识别模型推理,可以执行如下命令:

```
LDOUBLEV's avatar
LDOUBLEV committed
243
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/ch/word_4.jpg" --rec_model_dir="./inference/rec_crnn/"
dyning's avatar
dyning committed
244
245
```

246
![](../imgs_words/ch/word_4.jpg)
dyning's avatar
dyning committed
247
248
249

执行命令后,上面图像的预测结果(识别的文本和得分)会打印到屏幕上,示例如下:

tink2123's avatar
tink2123 committed
250
Predicts of ./doc/imgs_words/ch/word_4.jpg:['实力活力', 0.89552695]
dyning's avatar
dyning committed
251
252


253
254
<a name="基于CTC损失的识别模型推理"></a>
### 2. 基于CTC损失的识别模型推理
dyning's avatar
dyning committed
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269

我们以STAR-Net为例,介绍基于CTC损失的识别模型推理。 CRNN和Rosetta使用方式类似,不用设置识别算法参数rec_algorithm。

首先将STAR-Net文本识别训练过程中保存的模型,转换成inference model。以基于Resnet34_vd骨干网络,使用MJSynth和SynthText两个英文文本识别合成数据集训练
的模型为例([模型下载地址](https://paddleocr.bj.bcebos.com/rec_r34_vd_tps_bilstm_ctc.tar)),可以使用如下命令进行转换:

```
# -c后面设置训练算法的yml配置文件
# Global.checkpoints参数设置待转换的训练模型地址,不用添加文件后缀.pdmodel,.pdopt或.pdparams。
# Global.save_inference_dir参数设置转换的模型将保存的地址。

python3 tools/export_model.py -c configs/rec/rec_r34_vd_tps_bilstm_ctc.yml -o Global.checkpoints="./models/rec_r34_vd_tps_bilstm_ctc/best_accuracy" Global.save_inference_dir="./inference/starnet"
```

STAR-Net文本识别模型推理,可以执行如下命令:
270
271

```
dyning's avatar
dyning committed
272
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" --rec_model_dir="./inference/starnet/" --rec_image_shape="3, 32, 100" --rec_char_type="en"
273
```
tink2123's avatar
tink2123 committed
274

275
276
<a name="基于Attention损失的识别模型推理"></a>
### 3. 基于Attention损失的识别模型推理
tink2123's avatar
tink2123 committed
277
278
279

基于Attention损失的识别模型与ctc不同,需要额外设置识别算法参数 --rec_algorithm="RARE"

tink2123's avatar
tink2123 committed
280
281
RARE 文本识别模型推理,可以执行如下命令:
```
xiaoting's avatar
xiaoting committed
282
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" --rec_model_dir="./inference/rare/" --rec_image_shape="3, 32, 100" --rec_char_type="en" --rec_algorithm="RARE"
tink2123's avatar
tink2123 committed
283
284
```

285
![](../imgs_words_en/word_336.png)
dyning's avatar
dyning committed
286
287
288

执行命令后,上面图像的识别结果如下:

dyning's avatar
dyning committed
289
Predicts of ./doc/imgs_words_en/word_336.png:['super', 0.9999555]
dyning's avatar
dyning committed
290
291

**注意**:由于上述模型是参考[DTRB](https://arxiv.org/abs/1904.01906)文本识别训练和评估流程,与超轻量级中文识别模型训练有两方面不同:
292

dyning's avatar
dyning committed
293
- 训练时采用的图像分辨率不同,训练上述模型采用的图像分辨率是[3,32,100],而中文模型训练时,为了保证长文本的识别效果,训练时采用的图像分辨率是[3, 32, 320]。预测推理程序默认的的形状参数是训练中文采用的图像分辨率,即[3, 32, 320]。因此,这里推理上述英文模型时,需要通过参数rec_image_shape设置识别图像的形状。
294

dyning's avatar
dyning committed
295
- 字符列表,DTRB论文中实验只是针对26个小写英文本母和10个数字进行实验,总共36个字符。所有大小字符都转成了小写字符,不在上面列表的字符都忽略,认为是空格。因此这里没有输入字符字典,而是通过如下命令生成字典.因此在推理时需要设置参数rec_char_type,指定为英文"en"。
296
297

```
dyning's avatar
dyning committed
298
299
self.character_str = "0123456789abcdefghijklmnopqrstuvwxyz"
dict_character = list(self.character_str)
300
```
WenmuZhou's avatar
WenmuZhou committed
301
302
303
304
305
306
307
308
309
310
311
312
<a name="基于SRN损失的识别模型推理"></a>
### 4. 基于SRN损失的识别模型推理

基于SRN损失的识别模型,需要额外设置识别算法参数 --rec_algorithm="SRN"。 同时需要保证预测shape与训练时一致,如: --rec_image_shape="1, 64, 256"

```
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" \
                                   --rec_model_dir="./inference/srn/" \
                                   --rec_image_shape="1, 64, 256" \
                                   --rec_char_type="en" \
                                   --rec_algorithm="SRN"
```
313

314
<a name="自定义文本识别字典的推理"></a>
WenmuZhou's avatar
WenmuZhou committed
315
### 5. 自定义文本识别字典的推理
LDOUBLEV's avatar
LDOUBLEV committed
316
317
318
319
320
321
如果训练时修改了文本的字典,在使用inference模型预测时,需要通过`--rec_char_dict_path`指定使用的字典路径

```
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" --rec_model_dir="./your inference model" --rec_image_shape="3, 32, 100" --rec_char_type="en" --rec_char_dict_path="your text dict path"
```

WenmuZhou's avatar
WenmuZhou committed
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
<a name="多语言模型的推理"></a>
### 6. 多语言模型的推理
如果您需要预测的是其他语言模型,在使用inference模型预测时,需要通过`--rec_char_dict_path`指定使用的字典路径, 同时为了得到正确的可视化结果,
需要通过 `--vis_font_path` 指定可视化的字体路径,`doc/` 路径下有默认提供的小语种字体,例如韩文识别:

```
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/korean/1.jpg" --rec_model_dir="./your inference model" --rec_char_type="korean" --rec_char_dict_path="ppocr/utils/dict/korean_dict.txt" --vis_font_path="doc/korean.ttf"
```
![](../imgs_words/korean/1.jpg)

执行命令后,上图的预测结果为:
``` text
2020-09-19 16:15:05,076-INFO: 	 index: [205 206  38  39]
2020-09-19 16:15:05,077-INFO: 	 word : 바탕으로
2020-09-19 16:15:05,077-INFO: 	 score: 0.9171358942985535
```

<a name="方向分类模型推理"></a>
## 四、方向分类模型推理

下面将介绍方向分类模型推理。

<a name="方向分类模型推理"></a>
### 1. 方向分类模型推理

方向分类模型推理,可以执行如下命令:

```
python3 tools/infer/predict_cls.py --image_dir="./doc/imgs_words/ch/word_4.jpg" --cls_model_dir="./inference/cls/"
```

![](../imgs_words/ch/word_4.jpg)

执行命令后,上面图像的预测结果(分类的方向和得分)会打印到屏幕上,示例如下:

Predicts of ./doc/imgs_words/ch/word_4.jpg:['0', 0.9999963]

<a name="文本检测、方向分类和文字识别串联推理"></a>
## 五、文本检测、方向分类和文字识别串联推理
361
362
<a name="超轻量中文OCR模型推理"></a>
### 1. 超轻量中文OCR模型推理
dyning's avatar
dyning committed
363

WenmuZhou's avatar
WenmuZhou committed
364
在执行预测时,需要通过参数`image_dir`指定单张图像或者图像集合的路径、参数`det_model_dir`,`cls_model_dir``rec_model_dir`分别指定检测,方向分类和识别的inference模型路径。参数`use_angle_cls`用于控制是否启用方向分类模型。可视化识别结果默认保存到 ./inference_results 文件夹里面。
dyning's avatar
dyning committed
365

366
```
WenmuZhou's avatar
WenmuZhou committed
367
368
369
370
371
# 使用方向分类器
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/2.jpg" --det_model_dir="./inference/det_db/" --cls_model_dir="./inference/cls/" --rec_model_dir="./inference/rec_crnn/" --use_angle_cls=true

# 不使用方向分类器
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/2.jpg" --det_model_dir="./inference/det_db/" --rec_model_dir="./inference/rec_crnn/" --use_angle_cls=false
372
373
```

WenmuZhou's avatar
WenmuZhou committed
374
375
376
377




dyning's avatar
dyning committed
378
379
执行命令后,识别结果图像如下:

380
![](../imgs_results/2.jpg)
dyning's avatar
dyning committed
381

382
383
<a name="其他模型推理"></a>
### 2. 其他模型推理
dyning's avatar
dyning committed
384

385
386
如果想尝试使用其他检测算法或者识别算法,请参考上述文本检测模型推理和文本识别模型推理,更新相应配置和模型。

licx's avatar
licx committed
387
**注意:由于检测框矫正逻辑的局限性,暂不支持使用SAST弯曲文本检测模型(即,使用参数`--det_sast_polygon=True`时)进行模型串联。**
388
389

下面给出基于EAST文本检测和STAR-Net文本识别执行命令:
390
391

```
dyning's avatar
dyning committed
392
python3 tools/infer/predict_system.py --image_dir="./doc/imgs_en/img_10.jpg" --det_model_dir="./inference/det_east/" --det_algorithm="EAST" --rec_model_dir="./inference/starnet/" --rec_image_shape="3, 32, 100" --rec_char_type="en"
393
```
dyning's avatar
dyning committed
394
395
396

执行命令后,识别结果图像如下:

397
![](../imgs_results/img_10.jpg)