readme_en.md 11.5 KB
Newer Older
WenmuZhou's avatar
WenmuZhou committed
1
2
English | [简体中文](readme.md)

WenmuZhou's avatar
WenmuZhou committed
3
- [Service deployment based on PaddleHub Serving](#service-deployment-based-on-paddlehub-serving)
WenmuZhou's avatar
WenmuZhou committed
4
5
6
7
8
9
10
11
12
13
14
  - [1. Update](#1-update)
  - [2. Quick start service](#2-quick-start-service)
    - [2.1 Prepare the environment](#21-prepare-the-environment)
    - [2.2 Download inference model](#22-download-inference-model)
    - [2.3 Install Service Module](#23-install-service-module)
    - [2.4 Start service](#24-start-service)
      - [2.4.1 Start with command line parameters (CPU only)](#241-start-with-command-line-parameters-cpu-only)
      - [2.4.2 Start with configuration file(CPU、GPU)](#242-start-with-configuration-filecpugpu)
  - [3. Send prediction requests](#3-send-prediction-requests)
  - [4. Returned result format](#4-returned-result-format)
  - [5. User defined service module modification](#5-user-defined-service-module-modification)
WenmuZhou's avatar
WenmuZhou committed
15
16


WenmuZhou's avatar
WenmuZhou committed
17
18
PaddleOCR provides 2 service deployment methods:
- Based on **PaddleHub Serving**: Code path is "`./deploy/hubserving`". Please follow this tutorial.
LDOUBLEV's avatar
LDOUBLEV committed
19
- Based on **PaddleServing**: Code path is "`./deploy/pdserving`". Please refer to the [tutorial](../../deploy/pdserving/README.md) for usage.
WenmuZhou's avatar
WenmuZhou committed
20
21
22

# Service deployment based on PaddleHub Serving  

WenmuZhou's avatar
WenmuZhou committed
23
The hubserving service deployment directory includes six service packages: text detection, text angle class, text recognition, text detection+text angle class+text recognition three-stage series connection, table recognition and PP-Structure. Please select the corresponding service package to install and start service according to your needs. The directory is as follows:  
WenmuZhou's avatar
WenmuZhou committed
24
25
```
deploy/hubserving/
WenmuZhou's avatar
WenmuZhou committed
26
27
28
  └─  ocr_det     text detection module service package
  └─  ocr_cls     text angle class module service package
  └─  ocr_rec     text recognition module service package
WenmuZhou's avatar
WenmuZhou committed
29
  └─  ocr_system  text detection+text angle class+text recognition three-stage series connection service package
WenmuZhou's avatar
WenmuZhou committed
30
  └─  structure_table  table recognition service package
WenmuZhou's avatar
WenmuZhou committed
31
  └─  structure_system  PP-Structure service package
WenmuZhou's avatar
WenmuZhou committed
32
33
34
35
36
37
38
39
40
41
```

Each service pack contains 3 files. Take the 2-stage series connection service package as an example, the directory is as follows:  
```
deploy/hubserving/ocr_system/
  └─  __init__.py    Empty file, required
  └─  config.json    Configuration file, optional, passed in as a parameter when using configuration to start the service
  └─  module.py      Main module file, required, contains the complete logic of the service
  └─  params.py      Parameter file, required, including parameters such as model path, pre- and post-processing parameters
```
WenmuZhou's avatar
WenmuZhou committed
42
## 1. Update
WenmuZhou's avatar
WenmuZhou committed
43

andyjpaddle's avatar
andyjpaddle committed
44
* 2022.05.05 add PP-OCRv3 text detection and recognition models.
WenmuZhou's avatar
WenmuZhou committed
45
46
47
48
* 2022.03.30 add PP-Structure and table recognition services。


## 2. Quick start service
WenmuZhou's avatar
WenmuZhou committed
49
50
The following steps take the 2-stage series service as an example. If only the detection service or recognition service is needed, replace the corresponding file path.

WenmuZhou's avatar
WenmuZhou committed
51
### 2.1 Prepare the environment
WenmuZhou's avatar
WenmuZhou committed
52
53
```shell
# Install paddlehub  
WenmuZhou's avatar
opt doc  
WenmuZhou committed
54
# python>3.6.2 is required bt paddlehub
littletomatodonkey's avatar
littletomatodonkey committed
55
pip3 install paddlehub==2.1.0 --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple
WenmuZhou's avatar
WenmuZhou committed
56
57
```

WenmuZhou's avatar
WenmuZhou committed
58
### 2.2 Download inference model
andyjpaddle's avatar
andyjpaddle committed
59
Before installing the service module, you need to prepare the inference model and put it in the correct path. By default, the PP-OCRv3 models are used, and the default model path is:  
WenmuZhou's avatar
WenmuZhou committed
60
```
andyjpaddle's avatar
andyjpaddle committed
61
62
text detection model: ./inference/ch_PP-OCRv3_det_infer/
text recognition model: ./inference/ch_PP-OCRv3_rec_infer/
WenmuZhou's avatar
WenmuZhou committed
63
64
text angle classifier: ./inference/ch_ppocr_mobile_v2.0_cls_infer/
tanle recognition: ./inference/en_ppocr_mobile_v2.0_table_structure_infer/
WenmuZhou's avatar
WenmuZhou committed
65
66
67
68
```  

**The model path can be found and modified in `params.py`.** More models provided by PaddleOCR can be obtained from the [model library](../../doc/doc_en/models_list_en.md). You can also use models trained by yourself.

WenmuZhou's avatar
WenmuZhou committed
69
### 2.3 Install Service Module
WenmuZhou's avatar
WenmuZhou committed
70
PaddleOCR provides 5 kinds of service modules, install the required modules according to your needs.
WenmuZhou's avatar
WenmuZhou committed
71
72
73

* On Linux platform, the examples are as follows.
```shell
WenmuZhou's avatar
WenmuZhou committed
74
# Install the text detection service module:
WenmuZhou's avatar
WenmuZhou committed
75
76
hub install deploy/hubserving/ocr_det/

WenmuZhou's avatar
WenmuZhou committed
77
# Or, install the text angle class service module:
WenmuZhou's avatar
WenmuZhou committed
78
79
hub install deploy/hubserving/ocr_cls/

WenmuZhou's avatar
WenmuZhou committed
80
# Or, install the text recognition service module:
WenmuZhou's avatar
WenmuZhou committed
81
82
83
84
hub install deploy/hubserving/ocr_rec/

# Or, install the 2-stage series service module:
hub install deploy/hubserving/ocr_system/
WenmuZhou's avatar
WenmuZhou committed
85
86
87

# Or install table recognition service module
hub install deploy/hubserving/structure_table/
WenmuZhou's avatar
WenmuZhou committed
88
89
90

# Or install PP-Structure service module
hub install deploy/hubserving/structure_system/
WenmuZhou's avatar
WenmuZhou committed
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
```

* On Windows platform, the examples are as follows.
```shell
# Install the detection service module:
hub install deploy\hubserving\ocr_det\

# Or, install the angle class service module:
hub install deploy\hubserving\ocr_cls\

# Or, install the recognition service module:
hub install deploy\hubserving\ocr_rec\

# Or, install the 2-stage series service module:
hub install deploy\hubserving\ocr_system\
WenmuZhou's avatar
WenmuZhou committed
106
107
108

# Or install table recognition service module
hub install deploy/hubserving/structure_table/
WenmuZhou's avatar
WenmuZhou committed
109
110
111

# Or install PP-Structure service module
hub install deploy\hubserving\structure_system\
WenmuZhou's avatar
WenmuZhou committed
112
113
```

WenmuZhou's avatar
WenmuZhou committed
114
115
### 2.4 Start service
#### 2.4.1 Start with command line parameters (CPU only)
WenmuZhou's avatar
WenmuZhou committed
116
117
118
119
120
121
122
123
124
125
126

**start command:**  
```shell
$ hub serving start --modules [Module1==Version1, Module2==Version2, ...] \
                    --port XXXX \
                    --use_multiprocess \
                    --workers \
```  
**parameters:**  

|parameters|usage|  
WenmuZhou's avatar
WenmuZhou committed
127
|---|---|  
WenmuZhou's avatar
WenmuZhou committed
128
129
130
131
132
133
134
135
136
137
138
139
|--modules/-m|PaddleHub Serving pre-installed model, listed in the form of multiple Module==Version key-value pairs<br>*`When Version is not specified, the latest version is selected by default`*|
|--port/-p|Service port, default is 8866|  
|--use_multiprocess|Enable concurrent mode, the default is single-process mode, this mode is recommended for multi-core CPU machines<br>*`Windows operating system only supports single-process mode`*|
|--workers|The number of concurrent tasks specified in concurrent mode, the default is `2*cpu_count-1`, where `cpu_count` is the number of CPU cores|  

For example, start the 2-stage series service:  
```shell
hub serving start -m ocr_system
```  

This completes the deployment of a service API, using the default port number 8866.  

WenmuZhou's avatar
WenmuZhou committed
140
#### 2.4.2 Start with configuration file(CPU、GPU)
WenmuZhou's avatar
WenmuZhou committed
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
**start command:**  
```shell
hub serving start --config/-c config.json
```  
Wherein, the format of `config.json` is as follows:
```python
{
    "modules_info": {
        "ocr_system": {
            "init_args": {
                "version": "1.0.0",
                "use_gpu": true
            },
            "predict_args": {
            }
        }
    },
    "port": 8868,
    "use_multiprocess": false,
    "workers": 2
}
```
- The configurable parameters in `init_args` are consistent with the `_initialize` function interface in `module.py`. Among them, **when `use_gpu` is `true`, it means that the GPU is used to start the service**.
- The configurable parameters in `predict_args` are consistent with the `predict` function interface in `module.py`.

**Note:**  
- When using the configuration file to start the service, other parameters will be ignored.
- If you use GPU prediction (that is, `use_gpu` is set to `true`), you need to set the environment variable CUDA_VISIBLE_DEVICES before starting the service, such as: ```export CUDA_VISIBLE_DEVICES=0```, otherwise you do not need to set it.
- **`use_gpu` and `use_multiprocess` cannot be `true` at the same time.**  

For example, use GPU card No. 3 to start the 2-stage series service:
```shell
export CUDA_VISIBLE_DEVICES=3
hub serving start -c deploy/hubserving/ocr_system/config.json
```  

WenmuZhou's avatar
WenmuZhou committed
177
## 3. Send prediction requests
WenmuZhou's avatar
WenmuZhou committed
178
179
180
181
182
183
184
185
After the service starts, you can use the following command to send a prediction request to obtain the prediction result:  
```shell
python tools/test_hubserving.py server_url image_path
```  

Two parameters need to be passed to the script:
- **server_url**:service address,format of which is
`http://[ip_address]:[port]/predict/[module_name]`  
WenmuZhou's avatar
WenmuZhou committed
186
For example, if using the configuration file to start the text angle classification, text detection, text recognition, detection+classification+recognition 3 stages, table recognition and PP-Structure service, then the `server_url` to send the request will be:
WenmuZhou's avatar
WenmuZhou committed
187

WenmuZhou's avatar
WenmuZhou committed
188
189
190
191
`http://127.0.0.1:8865/predict/ocr_det`  
`http://127.0.0.1:8866/predict/ocr_cls`  
`http://127.0.0.1:8867/predict/ocr_rec`  
`http://127.0.0.1:8868/predict/ocr_system`  
WenmuZhou's avatar
WenmuZhou committed
192
`http://127.0.0.1:8869/predict/structure_table`
WenmuZhou's avatar
WenmuZhou committed
193
`http://127.0.0.1:8870/predict/structure_system`  
WenmuZhou's avatar
WenmuZhou committed
194
195
- **image_dir**:Test image path, can be a single image path or an image directory path
- **visualize**:Whether to visualize the results, the default value is False
WenmuZhou's avatar
WenmuZhou committed
196
- **output**:The floder to save Visualization result, default value is `./hubserving_result`
WenmuZhou's avatar
WenmuZhou committed
197
198
199

**Eg.**
```shell
WenmuZhou's avatar
WenmuZhou committed
200
python tools/test_hubserving.py --server_url=http://127.0.0.1:8868/predict/ocr_system --image_dir=./doc/imgs/ --visualize=false`
WenmuZhou's avatar
WenmuZhou committed
201
202
```

WenmuZhou's avatar
WenmuZhou committed
203
## 4. Returned result format
WenmuZhou's avatar
WenmuZhou committed
204
205
206
207
208
209
210
211
The returned result is a list. Each item in the list is a dict. The dict may contain three fields. The information is as follows:

|field name|data type|description|
|----|----|----|
|angle|str|angle|
|text|str|text content|
|confidence|float|text recognition confidence|
|text_region|list|text location coordinates|
WenmuZhou's avatar
WenmuZhou committed
212
|html|str|table html str|
WenmuZhou's avatar
WenmuZhou committed
213
|regions|list|The result of layout analysis + table recognition + OCR, each item is a list, including `bbox` indicating area coordinates, `type` of area type and `res` of area results|
WenmuZhou's avatar
WenmuZhou committed
214
215
216

The fields returned by different modules are different. For example, the results returned by the text recognition service module do not contain `text_region`. The details are as follows:

WenmuZhou's avatar
WenmuZhou committed
217
218
219
220
221
222
223
224
| field name/module name | ocr_det | ocr_cls | ocr_rec | ocr_system | structure_table | structure_system |
|  ---  |  ---  |  ---  |  ---  |  ---  | ---  |---  |
|angle| | ✔ | | ✔ | ||
|text| | |✔|✔| | ✔ |
|confidence| |✔ |✔| | | ✔|
|text_region| ✔| | |✔ | | ✔|
|html| | | | |✔ |✔|
|regions| | | | |✔ |✔ |
WenmuZhou's avatar
WenmuZhou committed
225
226
227

**Note:** If you need to add, delete or modify the returned fields, you can modify the file `module.py` of the corresponding module. For the complete process, refer to the user-defined modification service module in the next section.

WenmuZhou's avatar
WenmuZhou committed
228
## 5. User defined service module modification
WenmuZhou's avatar
WenmuZhou committed
229
230
231
232
233
234
235
236
If you need to modify the service logic, the following steps are generally required (take the modification of `ocr_system` for example):

- 1. Stop service
```shell
hub serving stop --port/-p XXXX
```
- 2. Modify the code in the corresponding files, like `module.py` and `params.py`, according to the actual needs.  
For example, if you need to replace the model used by the deployed service, you need to modify model path parameters `det_model_dir` and `rec_model_dir` in `params.py`. If you want to turn off the text direction classifier, set the parameter `use_angle_cls` to `False`. Of course, other related parameters may need to be modified at the same time. Please modify and debug according to the actual situation. It is suggested to run `module.py` directly for debugging after modification before starting the service test.  
andyjpaddle's avatar
andyjpaddle committed
237
**Note** The image input shape used by the PPOCR-v3 recognition model is `3, 48, 320`, so you need to modify `cfg.rec_image_shape = "3, 48, 320"` in `params.py`, if you do not use the PPOCR-v3 recognition model, then there is no need to modify this parameter.
WenmuZhou's avatar
WenmuZhou committed
238
239
240
241
242
243
244
245
246
247
248
249
- 3. Uninstall old service module
```shell
hub uninstall ocr_system
```
- 4. Install modified service module
```shell
hub install deploy/hubserving/ocr_system/
```
- 5. Restart service
```shell
hub serving start -m ocr_system
```