inference.md 20.3 KB
Newer Older
L
LDOUBLEV 已提交
1

D
dyning 已提交
2
# 基于Python预测引擎推理
L
LDOUBLEV 已提交
3

W
WenmuZhou 已提交
4
inference 模型(`paddle.jit.save`保存的模型)
5
一般是模型训练完成后保存的固化模型,多用于预测部署。训练过程中保存的模型是checkpoints模型,保存的是模型的参数,多用于恢复训练等。
W
WenmuZhou 已提交
6
与checkpoints模型相比,inference 模型会额外保存模型的结构信息,在预测部署、加速推理上性能优越,灵活方便,适合与实际系统集成。
L
LDOUBLEV 已提交
7

W
WenmuZhou 已提交
8
接下来首先介绍如何将训练的模型转换成inference模型,然后将依次介绍文本检测、文本角度分类器、文本识别以及三者串联基于预测引擎推理。
L
LDOUBLEV 已提交
9

10 11 12

- [一、训练模型转inference模型](#训练模型转inference模型)
    - [检测模型转inference模型](#检测模型转inference模型)
L
licx 已提交
13
    - [识别模型转inference模型](#识别模型转inference模型)  
W
WenmuZhou 已提交
14 15
    - [方向分类模型转inference模型](#方向分类模型转inference模型)  

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

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

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

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


38
<a name="训练模型转inference模型"></a>
D
dyning 已提交
39
## 一、训练模型转inference模型
40
<a name="检测模型转inference模型"></a>
L
LDOUBLEV 已提交
41 42 43 44
### 检测模型转inference模型

下载超轻量级中文检测模型:
```
W
WenmuZhou 已提交
45
wget -P ./ch_lite/ {link} && tar xf ./ch_lite/{file} -C ./ch_lite/
L
LDOUBLEV 已提交
46 47 48
```
上述模型是以MobileNetV3为backbone训练的DB算法,将训练好的模型转换成inference模型只需要运行如下命令:
```
W
WenmuZhou 已提交
49 50
# -c 后面设置训练算法的yml配置文件,需将待转换的训练模型地址写入配置文件里的Global.checkpoints字段下, 不用添加文件后缀.pdmodel,.pdopt或.pdparams。
# -o 后面设置转换的模型将保存的地址。
D
dyning 已提交
51

W
WenmuZhou 已提交
52
python3 tools/export_model.py -c configs/det/det_mv3_db_v1.1.yml -o ./inference/det_db/
L
LDOUBLEV 已提交
53
```
W
WenmuZhou 已提交
54 55
转inference模型时,使用的配置文件和训练时使用的配置文件相同。另外,还需要设置配置文件中的`Global.checkpoints`参数,其指向训练中保存的模型参数文件。
转换成功后,在模型保存目录下有三个文件:
L
LDOUBLEV 已提交
56
```
L
LDOUBLEV 已提交
57
inference/det_db/
W
WenmuZhou 已提交
58 59 60
    ├── det.pdiparams         # 检测inference模型的参数文件,需要重命名为params
    ├── det.pdiparams.info    # 检测inference模型的参数信息,可忽略
    └── det.pdmodel           # 检测inference模型的program文件,需要重命名为model
L
LDOUBLEV 已提交
61 62
```

63
<a name="识别模型转inference模型"></a>
L
LDOUBLEV 已提交
64 65 66 67
### 识别模型转inference模型

下载超轻量中文识别模型:
```
W
WenmuZhou 已提交
68
wget -P ./ch_lite/ {link} && tar xf ./ch_lite/{file} -C ./ch_lite/
L
LDOUBLEV 已提交
69 70 71 72
```

识别模型转inference模型与检测的方式相同,如下:
```
W
WenmuZhou 已提交
73 74 75
# -c 后面设置训练算法的yml配置文件,需将待转换的训练模型地址写入配置文件里的Global.checkpoints字段下,不用添加文件后缀.pdmodel,.pdopt或.pdparams。
# -o 后面设置转换的模型将保存的地址。
python3 tools/export_model.py -c configs/rec/ch_ppocr_v1.1/rec_chinese_lite_train_v1.1.yml -o ./inference/rec_crnn/
L
LDOUBLEV 已提交
76
```
L
LDOUBLEV 已提交
77

78
**注意:**如果您是在自己的数据集上训练的模型,并且调整了中文字符的字典文件,请注意修改配置文件中的`character_dict_path`是否是所需要的字典文件。
L
LDOUBLEV 已提交
79

W
WenmuZhou 已提交
80
转换成功后,在目录下有三个文件:
L
LDOUBLEV 已提交
81
```
L
LDOUBLEV 已提交
82
/inference/rec_crnn/
W
WenmuZhou 已提交
83 84 85
    ├── rec.pdiparams         # 识别inference模型的参数文件,需要重命名为params
    ├── rec.pdiparams.info    # 识别inference模型的参数信息,可忽略
    └── rec.pdmodel           # 识别inference模型的program文件,需要重命名为model
L
LDOUBLEV 已提交
86
```
L
LDOUBLEV 已提交
87

W
WenmuZhou 已提交
88 89 90 91 92
<a name="方向分类模型转inference模型"></a>
### 方向分类模型转inference模型

下载方向分类模型:
```
W
WenmuZhou 已提交
93
wget -P ./ch_lite/ {link} && tar xf ./ch_lite/{file} -C ./ch_lite/
W
WenmuZhou 已提交
94 95 96 97
```

方向分类模型转inference模型与检测的方式相同,如下:
```
W
WenmuZhou 已提交
98 99
# -c 后面设置训练算法的yml配置文件,需将待转换的训练模型地址写入配置文件里的Global.checkpoints字段下,不用添加文件后缀.pdmodel,.pdopt或.pdparams。
# -o 后面设置转换的模型将保存的地址。
W
WenmuZhou 已提交
100

W
WenmuZhou 已提交
101
python3 tools/export_model.py -c configs/cls/cls_mv3.yml -o ./inference/cls/
W
WenmuZhou 已提交
102 103
```

W
WenmuZhou 已提交
104
转换成功后,在目录下有三个文件:
W
WenmuZhou 已提交
105 106
```
/inference/cls/
W
WenmuZhou 已提交
107 108 109
    ├── cls.pdiparams         # 分类inference模型的参数文件,需要重命名为params
    ├── cls.pdiparams.info    # 分类inference模型的参数信息,可忽略
    └── cls.pdmodel           # 分类inference模型的program文件,需要重命名为model
W
WenmuZhou 已提交
110 111
```

112
<a name="文本检测模型推理"></a>
D
dyning 已提交
113
## 二、文本检测模型推理
L
LDOUBLEV 已提交
114

115
文本检测模型推理,默认使用DB模型的配置参数。当不使用DB模型时,在推理时,需要通过传入相应的参数进行算法适配,细节参考下文。
D
dyning 已提交
116

117 118
<a name="超轻量中文检测模型推理"></a>
### 1. 超轻量中文检测模型推理
D
dyning 已提交
119 120

超轻量中文检测模型推理,可以执行如下命令:
L
LDOUBLEV 已提交
121 122

```
L
LDOUBLEV 已提交
123
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/2.jpg" --det_model_dir="./inference/det_db/"
L
LDOUBLEV 已提交
124 125
```

126
可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下:
D
dyning 已提交
127

T
tink2123 已提交
128
![](../imgs_results/det_res_2.jpg)
L
LDOUBLEV 已提交
129

W
WenmuZhou 已提交
130 131
通过参数`limit_type``det_limit_side_len`来对图片的尺寸进行限制限,`limit_type=max`为限制长边长度<`det_limit_side_len`,`limit_type=min`为限制短边长度>`det_limit_side_len`, 
图片不满足限制条件时(`limit_type=max`时长边长度>`det_limit_side_len``limit_type=min`时短边长度<`det_limit_side_len`),将对图片进行等比例缩放。
W
WenmuZhou 已提交
132
该参数默认设置为`limit_type='max',det_max_side_len=960`。 如果输入图片的分辨率比较大,而且想使用更大的分辨率预测,可以执行如下命令:
L
LDOUBLEV 已提交
133 134

```
W
WenmuZhou 已提交
135
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/2.jpg" --det_model_dir="./inference/det_db/" --det_limit_type=max --det_limit_side_len=1200
D
dyning 已提交
136 137
```

D
dyning 已提交
138
如果想使用CPU进行预测,执行命令如下
D
dyning 已提交
139
```
L
LDOUBLEV 已提交
140
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/2.jpg" --det_model_dir="./inference/det_db/" --use_gpu=False
D
dyning 已提交
141 142
```

143 144
<a name="DB文本检测模型推理"></a>
### 2. DB文本检测模型推理
D
dyning 已提交
145

W
WenmuZhou 已提交
146
首先将DB文本检测训练过程中保存的模型,转换成inference model。以基于Resnet50_vd骨干网络,在ICDAR2015英文数据集训练的模型为例([模型下载地址](地址)),可以使用如下命令进行转换:
D
dyning 已提交
147

L
LDOUBLEV 已提交
148
```
W
WenmuZhou 已提交
149 150
# -c 后面设置训练算法的yml配置文件,需将待转换的训练模型地址写入配置文件里的Global.checkpoints字段下,不用添加文件后缀.pdmodel,.pdopt或.pdparams。
# -o 后面设置转换的模型将保存的地址。
D
dyning 已提交
151

W
WenmuZhou 已提交
152
python3 tools/export_model.py -c configs/det/det_r50_vd_db.yml -o "./inference/det_db"
D
dyning 已提交
153 154 155 156 157 158 159 160
```

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

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

161
可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下:
D
dyning 已提交
162

163
![](../imgs_results/det_res_img_10_db.jpg)
D
dyning 已提交
164

165
**注意**:由于ICDAR2015数据集只有1000张训练图像,且主要针对英文场景,所以上述模型对中文文本图像检测效果会比较差。
D
dyning 已提交
166

167 168
<a name="EAST文本检测模型推理"></a>
### 3. EAST文本检测模型推理
D
dyning 已提交
169

W
WenmuZhou 已提交
170
首先将EAST文本检测训练过程中保存的模型,转换成inference model。以基于Resnet50_vd骨干网络,在ICDAR2015英文数据集训练的模型为例([模型下载地址](地址)),可以使用如下命令进行转换:
D
dyning 已提交
171 172

```
W
WenmuZhou 已提交
173 174
# -c 后面设置训练算法的yml配置文件,需将待转换的训练模型地址写入配置文件里的Global.checkpoints字段下,不用添加文件后缀.pdmodel,.pdopt或.pdparams。
# -o 后面设置转换的模型将保存的地址。
D
dyning 已提交
175

D
dyning 已提交
176
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"
D
dyning 已提交
177 178
```

L
licx 已提交
179
**EAST文本检测模型推理,需要设置参数`--det_algorithm="EAST"`**,可以执行如下命令:
D
dyning 已提交
180 181

```
L
LDOUBLEV 已提交
182
python3 tools/infer/predict_det.py --det_algorithm="EAST" --image_dir="./doc/imgs_en/img_10.jpg" --det_model_dir="./inference/det_east/"
D
dyning 已提交
183
```
184
可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下:
D
dyning 已提交
185

186
![](../imgs_results/det_res_img_10_east.jpg)
D
dyning 已提交
187

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


<a name="SAST文本检测模型推理"></a>
### 4. SAST文本检测模型推理
#### (1). 四边形文本检测模型(ICDAR2015)  
W
WenmuZhou 已提交
194
首先将SAST文本检测训练过程中保存的模型,转换成inference model。以基于Resnet50_vd骨干网络,在ICDAR2015英文数据集训练的模型为例([模型下载地址](地址)),可以使用如下命令进行转换:
195
```
W
WenmuZhou 已提交
196 197 198 199
# -c 后面设置训练算法的yml配置文件,需将待转换的训练模型地址写入配置文件里的Global.checkpoints字段下,不用添加文件后缀.pdmodel,.pdopt或.pdparams。
# -o 后面设置转换的模型将保存的地址。

python3 tools/export_model.py -c configs/det/det_r50_vd_sast_icdar15.yml -o "./inference/det_sast_ic15"
200
```
L
licx 已提交
201
**SAST文本检测模型推理,需要设置参数`--det_algorithm="SAST"`**,可以执行如下命令:
202 203 204 205 206 207 208 209
```
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)  
W
WenmuZhou 已提交
210
首先将SAST文本检测训练过程中保存的模型,转换成inference model。以基于Resnet50_vd骨干网络,在Total-Text英文数据集训练的模型为例([模型下载地址](地址)),可以使用如下命令进行转换:
L
LDOUBLEV 已提交
211

212
```
W
WenmuZhou 已提交
213 214 215 216
# -c 后面设置训练算法的yml配置文件,需将待转换的训练模型地址写入配置文件里的Global.checkpoints字段下,不用添加文件后缀.pdmodel,.pdopt或.pdparams。
# -o 后面设置转换的模型将保存的地址。

python3 tools/export_model.py -c configs/det/det_r50_vd_sast_totaltext.yml -o "./inference/det_sast_tt"
217 218
```

L
licx 已提交
219
**SAST文本检测模型推理,需要设置参数`--det_algorithm="SAST"`,同时,还需要增加参数`--det_sast_polygon=True`,**可以执行如下命令:
220 221 222 223
```
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'。结果示例如下:
L
LDOUBLEV 已提交
224

225 226 227 228 229 230
![](../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>
D
dyning 已提交
231
## 三、文本识别模型推理
L
LDOUBLEV 已提交
232

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


236 237
<a name="超轻量中文识别模型推理"></a>
### 1. 超轻量中文识别模型推理
D
dyning 已提交
238 239 240 241

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

```
L
LDOUBLEV 已提交
242
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/ch/word_4.jpg" --rec_model_dir="./inference/rec_crnn/"
D
dyning 已提交
243 244
```

245
![](../imgs_words/ch/word_4.jpg)
D
dyning 已提交
246 247 248

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

T
tink2123 已提交
249
Predicts of ./doc/imgs_words/ch/word_4.jpg:['实力活力', 0.89552695]
D
dyning 已提交
250 251


252 253
<a name="基于CTC损失的识别模型推理"></a>
### 2. 基于CTC损失的识别模型推理
D
dyning 已提交
254 255 256 257

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

首先将STAR-Net文本识别训练过程中保存的模型,转换成inference model。以基于Resnet34_vd骨干网络,使用MJSynth和SynthText两个英文文本识别合成数据集训练
W
WenmuZhou 已提交
258
的模型为例([模型下载地址](地址)),可以使用如下命令进行转换:
D
dyning 已提交
259 260

```
W
WenmuZhou 已提交
261 262
# -c 后面设置训练算法的yml配置文件,需将待转换的训练模型地址写入配置文件里的Global.checkpoints字段下,不用添加文件后缀.pdmodel,.pdopt或.pdparams。
# -o 后面设置转换的模型将保存的地址。
D
dyning 已提交
263

W
WenmuZhou 已提交
264
python3 tools/export_model.py -c configs/rec/rec_r34_vd_tps_bilstm_ctc.yml -o "./inference/starnet"
D
dyning 已提交
265 266 267
```

STAR-Net文本识别模型推理,可以执行如下命令:
L
LDOUBLEV 已提交
268 269

```
D
dyning 已提交
270
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"
L
LDOUBLEV 已提交
271
```
T
tink2123 已提交
272

273 274
<a name="基于Attention损失的识别模型推理"></a>
### 3. 基于Attention损失的识别模型推理
T
tink2123 已提交
275

T
tink2123 已提交
276 277
RARE 文本识别模型推理,可以执行如下命令:
```
W
WenmuZhou 已提交
278
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"
T
tink2123 已提交
279 280
```

281
![](../imgs_words_en/word_336.png)
D
dyning 已提交
282 283 284

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

D
dyning 已提交
285
Predicts of ./doc/imgs_words_en/word_336.png:['super', 0.9999555]
D
dyning 已提交
286 287

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

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

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

```
D
dyning 已提交
294 295
self.character_str = "0123456789abcdefghijklmnopqrstuvwxyz"
dict_character = list(self.character_str)
L
LDOUBLEV 已提交
296
```
W
WenmuZhou 已提交
297

W
WenmuZhou 已提交
298 299 300
<a name="基于SRN损失的识别模型推理"></a>
### 4. 基于SRN损失的识别模型推理

W
WenmuZhou 已提交
301
基于SRN损失的识别模型需要保证预测shape与训练时一致,如: --rec_image_shape="1, 64, 256"
W
WenmuZhou 已提交
302 303 304 305 306

```
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" \
W
WenmuZhou 已提交
307
                                   --rec_char_type="en" 
W
WenmuZhou 已提交
308
```
L
LDOUBLEV 已提交
309

310
<a name="自定义文本识别字典的推理"></a>
W
WenmuZhou 已提交
311
### 5. 自定义文本识别字典的推理
L
LDOUBLEV 已提交
312 313 314 315 316 317
如果训练时修改了文本的字典,在使用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"
```

W
WenmuZhou 已提交
318 319 320 321 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
<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/"
```

W
WenmuZhou 已提交
349
![](../imgs_words/ch/word_1.jpg)
W
WenmuZhou 已提交
350 351 352

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

W
WenmuZhou 已提交
353 354 355 356
```
infer_img: doc/imgs_words/ch/word_1.jpg
     result: ('0', 0.9998784)
```
W
WenmuZhou 已提交
357 358 359

<a name="文本检测、方向分类和文字识别串联推理"></a>
## 五、文本检测、方向分类和文字识别串联推理
360 361
<a name="超轻量中文OCR模型推理"></a>
### 1. 超轻量中文OCR模型推理
D
dyning 已提交
362

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

L
LDOUBLEV 已提交
365
```
W
WenmuZhou 已提交
366 367 368 369 370
# 使用方向分类器
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
L
LDOUBLEV 已提交
371 372
```

W
WenmuZhou 已提交
373 374 375 376




D
dyning 已提交
377 378
执行命令后,识别结果图像如下:

379
![](../imgs_results/2.jpg)
D
dyning 已提交
380

381 382
<a name="其他模型推理"></a>
### 2. 其他模型推理
D
dyning 已提交
383

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

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

下面给出基于EAST文本检测和STAR-Net文本识别执行命令:
L
LDOUBLEV 已提交
389 390

```
D
dyning 已提交
391
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"
L
LDOUBLEV 已提交
392
```
D
dyning 已提交
393 394 395

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

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