readme.md 17 KB
Newer Older
MissPenguin's avatar
MissPenguin committed
1
2
3
# Mobile deployment based on Paddle-Lite

- [1. Preparation](#1-preparation)
MissPenguin's avatar
update  
MissPenguin committed
4
5
6
    - [Preparation environment](#preparation-environment)
    - [1.1 Prepare the cross-compilation environment](#11-prepare-the-cross-compilation-environment)
    - [1.2 Prepare Paddle-Lite library](#12-prepare-paddle-lite-library)
MissPenguin's avatar
MissPenguin committed
7
- [2. Run](#2-run)
MissPenguin's avatar
update  
MissPenguin committed
8
9
    - [2.1 Inference Model Optimization](#21-inference-model-optimization)
    - [2.2 Run optimized model on Phone](#22-run-optimized-model-on-phone)
MissPenguin's avatar
MissPenguin committed
10
- [FAQ](#faq)
WenmuZhou's avatar
WenmuZhou committed
11
12


MissPenguin's avatar
MissPenguin committed
13
This tutorial will introduce how to use [Paddle-Lite](https://github.com/PaddlePaddle/Paddle-Lite) to deploy PaddleOCR ultra-lightweight Chinese and English detection models on mobile phones.
WenmuZhou's avatar
WenmuZhou committed
14

MissPenguin's avatar
MissPenguin committed
15
Paddle-Lite is a lightweight inference engine for PaddlePaddle. It provides efficient inference capabilities for mobile phones and IoT, and extensively integrates cross-platform hardware to provide lightweight deployment solutions for end-side deployment issues.
WenmuZhou's avatar
WenmuZhou committed
16

MissPenguin's avatar
update  
MissPenguin committed
17
## 1. Preparation
WenmuZhou's avatar
WenmuZhou committed
18

MissPenguin's avatar
update  
MissPenguin committed
19
### Preparation environment
WenmuZhou's avatar
WenmuZhou committed
20

MissPenguin's avatar
update  
MissPenguin committed
21
22
23
24
25
26
27
28
- Computer (for Compiling Paddle Lite)
- Mobile phone (arm7 or arm8)

### 1.1 Prepare the cross-compilation environment
The cross-compilation environment is used to compile C++ demos of Paddle Lite and PaddleOCR.
Supports multiple development environments.

For the compilation process of different development environments, please refer to the corresponding documents.
WenmuZhou's avatar
WenmuZhou committed
29
30
31
32
33

1. [Docker](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html#docker)
2. [Linux](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html#linux)
3. [MAC OS](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html#mac-os)

MissPenguin's avatar
update  
MissPenguin committed
34
### 1.2 Prepare Paddle-Lite library
WenmuZhou's avatar
WenmuZhou committed
35

MissPenguin's avatar
update  
MissPenguin committed
36
There are two ways to obtain the Paddle-Lite library:
LDOUBLEV's avatar
LDOUBLEV committed
37
- 1. [Recommended] Download directly, the download link of the Paddle-Lite library is as follows:
WenmuZhou's avatar
WenmuZhou committed
38

MissPenguin's avatar
update  
MissPenguin committed
39
      | Platform | Paddle-Lite library download link |
WenmuZhou's avatar
WenmuZhou committed
40
      |---|---|
WenmuZhou's avatar
WenmuZhou committed
41
42
      |Android|[arm7](https://github.com/PaddlePaddle/Paddle-Lite/releases/download/v2.10/inference_lite_lib.android.armv7.gcc.c++_shared.with_extra.with_cv.tar.gz) / [arm8](https://github.com/PaddlePaddle/Paddle-Lite/releases/download/v2.10/inference_lite_lib.android.armv8.gcc.c++_shared.with_extra.with_cv.tar.gz)|
      |IOS|[arm7](https://github.com/PaddlePaddle/Paddle-Lite/releases/download/v2.10/inference_lite_lib.ios.armv7.with_cv.with_extra.with_log.tiny_publish.tar.gz) / [arm8](https://github.com/PaddlePaddle/Paddle-Lite/releases/download/v2.10/inference_lite_lib.ios.armv8.with_cv.with_extra.with_log.tiny_publish.tar.gz)|
WenmuZhou's avatar
WenmuZhou committed
43

MissPenguin's avatar
update  
MissPenguin committed
44
      Note: 1. The above Paddle-Lite library is compiled from the Paddle-Lite 2.10 branch. For more information about Paddle-Lite 2.10, please refer to [link](https://github.com/PaddlePaddle/Paddle-Lite/releases/tag/v2.10).
WenmuZhou's avatar
WenmuZhou committed
45

LDOUBLEV's avatar
LDOUBLEV committed
46
47
48
    **Note: It is recommended to use paddlelite>=2.10 version of the prediction library, other prediction library versions [download link](https://github.com/PaddlePaddle/Paddle-Lite/tags)**

- 2. Compile Paddle-Lite to get the prediction library. The compilation method of Paddle-Lite is as follows:
WenmuZhou's avatar
WenmuZhou committed
49
50
51
```
git clone https://github.com/PaddlePaddle/Paddle-Lite.git
cd Paddle-Lite
MissPenguin's avatar
update  
MissPenguin committed
52
# Switch to Paddle-Lite release/v2.10 stable branch
WenmuZhou's avatar
WenmuZhou committed
53
git checkout release/v2.10
WenmuZhou's avatar
WenmuZhou committed
54
55
56
./lite/tools/build_android.sh  --arch=armv8  --with_cv=ON --with_extra=ON
```

MissPenguin's avatar
update  
MissPenguin committed
57
58
59
Note: When compiling Paddle-Lite to obtain the Paddle-Lite library, you need to turn on the two options `--with_cv=ON --with_extra=ON`, `--arch` means the `arm` version, here is designated as armv8,

More compilation commands refer to the introduction [link](https://paddle-lite.readthedocs.io/zh/release-v2.10_a/source_compile/linux_x86_compile_android.html)
WenmuZhou's avatar
WenmuZhou committed
60

MissPenguin's avatar
update  
MissPenguin committed
61
62
63
64
After directly downloading the Paddle-Lite library and decompressing it, you can get the `inference_lite_lib.android.armv8/` folder, and the Paddle-Lite library obtained by compiling Paddle-Lite is located
`Paddle-Lite/build.lite.android.armv8.gcc/inference_lite_lib.android.armv8/` folder.

The structure of the prediction library is as follows:
WenmuZhou's avatar
WenmuZhou committed
65
66
```
inference_lite_lib.android.armv8/
MissPenguin's avatar
update  
MissPenguin committed
67
68
|-- cxx                                        C++ prebuild library
|   |-- include                                C++
WenmuZhou's avatar
WenmuZhou committed
69
70
71
72
73
74
75
|   |   |-- paddle_api.h
|   |   |-- paddle_image_preprocess.h
|   |   |-- paddle_lite_factory_helper.h
|   |   |-- paddle_place.h
|   |   |-- paddle_use_kernels.h
|   |   |-- paddle_use_ops.h
|   |   `-- paddle_use_passes.h
MissPenguin's avatar
update  
MissPenguin committed
76
77
78
79
|   `-- lib                                           C++ library
|       |-- libpaddle_api_light_bundled.a             C++ static library
|       `-- libpaddle_light_api_shared.so             C++ dynamic library
|-- java                                     Java library
WenmuZhou's avatar
WenmuZhou committed
80
81
82
83
84
|   |-- jar
|   |   `-- PaddlePredictor.jar
|   |-- so
|   |   `-- libpaddle_lite_jni.so
|   `-- src
MissPenguin's avatar
update  
MissPenguin committed
85
86
87
|-- demo                                     C++ and Java demo
|   |-- cxx                                  C++ demo
|   `-- java                                 Java demo
WenmuZhou's avatar
WenmuZhou committed
88
89
```

MissPenguin's avatar
update  
MissPenguin committed
90
## 2 Run
WenmuZhou's avatar
WenmuZhou committed
91

MissPenguin's avatar
update  
MissPenguin committed
92
### 2.1 Inference Model Optimization
WenmuZhou's avatar
WenmuZhou committed
93

MissPenguin's avatar
update  
MissPenguin committed
94
Paddle Lite provides a variety of strategies to automatically optimize the original training model, including quantization, sub-graph fusion, hybrid scheduling, Kernel optimization and so on. In order to make the optimization process more convenient and easy to use, Paddle Lite provide opt tools to automatically complete the optimization steps and output a lightweight, optimal executable model.
WenmuZhou's avatar
WenmuZhou committed
95

MissPenguin's avatar
update  
MissPenguin committed
96
If you have prepared the model file ending in .nb, you can skip this step.
WenmuZhou's avatar
WenmuZhou committed
97

MissPenguin's avatar
update  
MissPenguin committed
98
The following table also provides a series of models that can be deployed on mobile phones to recognize Chinese. You can directly download the optimized model.
WenmuZhou's avatar
WenmuZhou committed
99

MissPenguin's avatar
update  
MissPenguin committed
100
|Version|Introduction|Model size|Detection model|Text Direction model|Recognition model|Paddle-Lite branch|
WenmuZhou's avatar
WenmuZhou committed
101
|---|---|---|---|---|---|---|
MissPenguin's avatar
update  
MissPenguin committed
102
103
|PP-OCRv2|extra-lightweight chinese OCR optimized model|11M|[download link](https://paddleocr.bj.bcebos.com/PP-OCRv2/lite/ch_PP-OCRv2_det_infer_opt.nb)|[download link](https://paddleocr.bj.bcebos.com/PP-OCRv2/lite/ch_ppocr_mobile_v2.0_cls_infer_opt.nb)|[download link](https://paddleocr.bj.bcebos.com/PP-OCRv2/lite/ch_PP-OCRv2_rec_infer_opt.nb)|v2.10|
|PP-OCRv2(slim)|extra-lightweight chinese OCR optimized model|4.6M|[download link](https://paddleocr.bj.bcebos.com/PP-OCRv2/lite/ch_PP-OCRv2_det_slim_opt.nb)|[download link](https://paddleocr.bj.bcebos.com/PP-OCRv2/lite/ch_ppocr_mobile_v2.0_cls_slim_opt.nb)|[download link](https://paddleocr.bj.bcebos.com/PP-OCRv2/lite/ch_PP-OCRv2_rec_slim_opt.nb)|v2.10|
WenmuZhou's avatar
WenmuZhou committed
104

MissPenguin's avatar
update  
MissPenguin committed
105
If you directly use the model in the above table for deployment, you can skip the following steps and directly read [Section 2.2](#2.2-Run-optimized-model-on-Phone).
WenmuZhou's avatar
WenmuZhou committed
106

MissPenguin's avatar
update  
MissPenguin committed
107
If the model to be deployed is not in the above table, you need to follow the steps below to obtain the optimized model.
WenmuZhou's avatar
WenmuZhou committed
108

LDOUBLEV's avatar
LDOUBLEV committed
109
- Step 1: Refer to [document](https://www.paddlepaddle.org.cn/lite/v2.10/user_guides/opt/opt_python.html) to install paddlelite, which is used to convert paddle inference model to paddlelite required for running nb model
WenmuZhou's avatar
WenmuZhou committed
110
```
LDOUBLEV's avatar
LDOUBLEV committed
111
pip install paddlelite==2.10 # The paddlelite version should be the same as the prediction library version
WenmuZhou's avatar
WenmuZhou committed
112
```
LDOUBLEV's avatar
LDOUBLEV committed
113
After installation, the following commands can view the help information
WenmuZhou's avatar
WenmuZhou committed
114
```
LDOUBLEV's avatar
LDOUBLEV committed
115
paddle_lite_opt
WenmuZhou's avatar
WenmuZhou committed
116
117
```

LDOUBLEV's avatar
LDOUBLEV committed
118
119
Introduction to paddle_lite_opt parameters:

MissPenguin's avatar
update  
MissPenguin committed
120
|Options|Description|
WenmuZhou's avatar
WenmuZhou committed
121
|---|---|
MissPenguin's avatar
update  
MissPenguin committed
122
123
124
125
126
127
128
|--model_dir|The path of the PaddlePaddle model to be optimized (non-combined form)|
|--model_file|The network structure file path of the PaddlePaddle model (combined form) to be optimized|
|--param_file|The weight file path of the PaddlePaddle model (combined form) to be optimized|
|--optimize_out_type|Output model type, currently supports two types: protobuf and naive_buffer, among which naive_buffer is a more lightweight serialization/deserialization implementation. If you need to perform model prediction on the mobile side, please set this option to naive_buffer. The default is protobuf|
|--optimize_out|The output path of the optimized model|
|--valid_targets|The executable backend of the model, the default is arm. Currently it supports x86, arm, opencl, npu, xpu, multiple backends can be specified at the same time (separated by spaces), and Model Optimize Tool will automatically select the best method. If you need to support Huawei NPU (DaVinci architecture NPU equipped with Kirin 810/990 Soc), it should be set to npu, arm|
|--record_tailoring_info|When using the function of cutting library files according to the model, set this option to true to record the kernel and OP information contained in the optimized model. The default is false|
WenmuZhou's avatar
WenmuZhou committed
129

MissPenguin's avatar
update  
MissPenguin committed
130
`--model_dir` is suitable for the non-combined mode of the model to be optimized, and the inference model of PaddleOCR is the combined mode, that is, the model structure and model parameters are stored in a single file.
WenmuZhou's avatar
WenmuZhou committed
131

LDOUBLEV's avatar
LDOUBLEV committed
132
133
- Step 2: Use paddle_lite_opt to convert the inference model to the mobile model format.

MissPenguin's avatar
update  
MissPenguin committed
134
The following takes the ultra-lightweight Chinese model of PaddleOCR as an example to introduce the use of the compiled opt file to complete the conversion of the inference model to the Paddle-Lite optimized model
WenmuZhou's avatar
WenmuZhou committed
135
136

```
MissPenguin's avatar
update  
MissPenguin committed
137
# 【[Recommendation] Download the Chinese and English inference model of PP-OCRv2
WenmuZhou's avatar
WenmuZhou committed
138
139
wget  https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_slim_quant_infer.tar && tar xf  ch_PP-OCRv2_det_slim_quant_infer.tar
wget  https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_slim_quant_infer.tar && tar xf  ch_PP-OCRv2_rec_slim_quant_infer.tar
WenmuZhou's avatar
WenmuZhou committed
140
wget  https://paddleocr.bj.bcebos.com/dygraph_v2.0/slim/ch_ppocr_mobile_v2.0_cls_slim_infer.tar && tar xf  ch_ppocr_mobile_v2.0_cls_slim_infer.tar
MissPenguin's avatar
update  
MissPenguin committed
141
# Convert detection model
WenmuZhou's avatar
WenmuZhou committed
142
./opt --model_file=./ch_PP-OCRv2_det_slim_quant_infer/inference.pdmodel  --param_file=./ch_PP-OCRv2_det_slim_quant_infer/inference.pdiparams  --optimize_out=./ch_PP-OCRv2_det_slim_opt --valid_targets=arm  --optimize_out_type=naive_buffer
MissPenguin's avatar
update  
MissPenguin committed
143
# Convert recognition model
WenmuZhou's avatar
WenmuZhou committed
144
./opt --model_file=./ch_PP-OCRv2_rec_slim_quant_infer/inference.pdmodel  --param_file=./ch_PP-OCRv2_rec_slim_quant_infer/inference.pdiparams  --optimize_out=./ch_PP-OCRv2_rec_slim_opt --valid_targets=arm  --optimize_out_type=naive_buffer
MissPenguin's avatar
update  
MissPenguin committed
145
# Convert angle classifier model
WenmuZhou's avatar
WenmuZhou committed
146
./opt --model_file=./ch_ppocr_mobile_v2.0_cls_slim_infer/inference.pdmodel  --param_file=./ch_ppocr_mobile_v2.0_cls_slim_infer/inference.pdiparams  --optimize_out=./ch_ppocr_mobile_v2.0_cls_slim_opt --valid_targets=arm  --optimize_out_type=naive_buffer
WenmuZhou's avatar
WenmuZhou committed
147

WenmuZhou's avatar
WenmuZhou committed
148
149
```

MissPenguin's avatar
update  
MissPenguin committed
150
After the conversion is successful, there will be more files ending with `.nb` in the inference model directory, which is the successfully converted model file.
WenmuZhou's avatar
WenmuZhou committed
151

MissPenguin's avatar
update  
MissPenguin committed
152
153
<a name="2.2-Run-optimized-model-on-Phone"></a>
### 2.2 Run optimized model on Phone
WenmuZhou's avatar
WenmuZhou committed
154

MissPenguin's avatar
update  
MissPenguin committed
155
156
157
158
Some preparatory work is required first.
 1. Prepare an Android phone with arm8. If the compiled prediction library and opt file are armv7, you need an arm7 phone and modify ARM_ABI = arm7 in the Makefile.
 2. Make sure the phone is connected to the computer, open the USB debugging option of the phone, and select the file transfer mode.
 3. Install the adb tool on the computer.
WenmuZhou's avatar
WenmuZhou committed
159

MissPenguin's avatar
update  
MissPenguin committed
160
    3.1. Install ADB for MAC:
WenmuZhou's avatar
WenmuZhou committed
161
162
163
    ```
    brew cask install android-platform-tools
    ```
MissPenguin's avatar
update  
MissPenguin committed
164
    3.2. Install ADB for Linux
WenmuZhou's avatar
WenmuZhou committed
165
166
167
168
    ```
    sudo apt update
    sudo apt install -y wget adb
    ```
MissPenguin's avatar
update  
MissPenguin committed
169
    3.3. Install ADB for windows
WenmuZhou's avatar
WenmuZhou committed
170

MissPenguin's avatar
update  
MissPenguin committed
171
    To install on win, you need to go to Google's Android platform to download the adb package for installation:[link](https://developer.android.com/studio)
WenmuZhou's avatar
WenmuZhou committed
172

MissPenguin's avatar
update  
MissPenguin committed
173
174
    Verify whether adb is installed successfully
     ```
WenmuZhou's avatar
WenmuZhou committed
175
176
    adb devices
    ```
MissPenguin's avatar
update  
MissPenguin committed
177
    If there is device output, it means the installation is successful。
WenmuZhou's avatar
WenmuZhou committed
178
179
180
181
182
    ```
       List of devices attached
       744be294    device
    ```

MissPenguin's avatar
update  
MissPenguin committed
183
 4. Prepare optimized models, prediction library files, test images and dictionary files used.
WenmuZhou's avatar
WenmuZhou committed
184
185
186
 ```
 git clone https://github.com/PaddlePaddle/PaddleOCR.git
 cd PaddleOCR/deploy/lite/
MissPenguin's avatar
update  
MissPenguin committed
187
 # run prepare.sh
WenmuZhou's avatar
WenmuZhou committed
188
189
 sh prepare.sh /{lite prediction library path}/inference_lite_lib.android.armv8

MissPenguin's avatar
update  
MissPenguin committed
190
 #
WenmuZhou's avatar
WenmuZhou committed
191
192
 cd /{lite prediction library path}/inference_lite_lib.android.armv8/
 cd demo/cxx/ocr/
MissPenguin's avatar
update  
MissPenguin committed
193
194
195
196
 # copy paddle-lite C++ .so file to debug/ directory
 cp ../../../cxx/lib/libpaddle_light_api_shared.so ./debug/

 cd inference_lite_lib.android.armv8/demo/cxx/ocr/
WenmuZhou's avatar
WenmuZhou committed
197
198
199
 cp ../../../cxx/lib/libpaddle_light_api_shared.so ./debug/
 ```

MissPenguin's avatar
update  
MissPenguin committed
200
Prepare the test image, taking PaddleOCR/doc/imgs/11.jpg as an example, copy the image file to the demo/cxx/ocr/debug/ folder. Prepare the model files optimized by the lite opt tool, ch_det_mv3_db_opt.nb, ch_rec_mv3_crnn_opt.nb, and place them under the demo/cxx/ocr/debug/ folder.
WenmuZhou's avatar
WenmuZhou committed
201

MissPenguin's avatar
update  
MissPenguin committed
202
The structure of the OCR demo is as follows after the above command is executed:
WenmuZhou's avatar
WenmuZhou committed
203
204
205
206

```
demo/cxx/ocr/
|-- debug/  
MissPenguin's avatar
update  
MissPenguin committed
207
208
209
210
211
212
213
214
215
|   |--ch_PP-OCRv2_det_slim_opt.nb           Detection model
|   |--ch_PP-OCRv2_rec_slim_opt.nb           Recognition model
|   |--ch_ppocr_mobile_v2.0_cls_slim_opt.nb           Text direction classification model
|   |--11.jpg                           Image for OCR
|   |--ppocr_keys_v1.txt                Dictionary file
|   |--libpaddle_light_api_shared.so    C++ .so file
|   |--config.txt                       Config file
|-- config.txt                  Config file
|-- cls_process.cc              Pre-processing and post-processing files for the angle classifier
WenmuZhou's avatar
WenmuZhou committed
216
|-- cls_process.h
MissPenguin's avatar
update  
MissPenguin committed
217
|-- crnn_process.cc             Pre-processing and post-processing files for the CRNN model
WenmuZhou's avatar
WenmuZhou committed
218
|-- crnn_process.h
MissPenguin's avatar
update  
MissPenguin committed
219
|-- db_post_process.cc          Pre-processing and post-processing files for the DB model
WenmuZhou's avatar
WenmuZhou committed
220
|-- db_post_process.h
MissPenguin's avatar
update  
MissPenguin committed
221
222
|-- Makefile  
|-- ocr_db_crnn.cc              C++ main code
WenmuZhou's avatar
WenmuZhou committed
223
224
```

225
**Note**:
MissPenguin's avatar
update  
MissPenguin committed
226
1. `ppocr_keys_v1.txt` is a Chinese dictionary file. If the nb model is used for English recognition or other language recognition, dictionary file should be replaced with a dictionary of the corresponding language. PaddleOCR provides a variety of dictionaries under ppocr/utils/, including:
WenmuZhou's avatar
WenmuZhou committed
227
```
MissPenguin's avatar
update  
MissPenguin committed
228
229
230
231
232
233
dict/french_dict.txt     # french
dict/german_dict.txt     # german
ic15_dict.txt       # english
dict/japan_dict.txt      # japan
dict/korean_dict.txt     # korean
ppocr_keys_v1.txt   # chinese
WenmuZhou's avatar
WenmuZhou committed
234
235
```

MissPenguin's avatar
update  
MissPenguin committed
236
2.  `config.txt` of the detector and classifier, as shown below:
WenmuZhou's avatar
WenmuZhou committed
237
```
MissPenguin's avatar
update  
MissPenguin committed
238
239
240
241
242
max_side_len  960         #  Limit the maximum image height and width to 960
det_db_thresh  0.3        # Used to filter the binarized image of DB prediction, setting 0.-0.3 has no obvious effect on the result
det_db_box_thresh  0.5    # DDB post-processing filter box threshold, if there is a missing box detected, it can be reduced as appropriate
det_db_unclip_ratio  1.6  # Indicates the compactness of the text box, the smaller the value, the closer the text box to the text
use_direction_classify  0  # Whether to use the direction classifier, 0 means not to use, 1 means to use
LDOUBLEV's avatar
LDOUBLEV committed
243
rec_image_height  32      # The height of the input image of the recognition model, the PP-OCRv3 model needs to be set to 48, and the PP-OCRv2 model needs to be set to 32
WenmuZhou's avatar
WenmuZhou committed
244
245
```

MissPenguin's avatar
update  
MissPenguin committed
246
 5. Run Model on phone
WenmuZhou's avatar
WenmuZhou committed
247

MissPenguin's avatar
update  
MissPenguin committed
248
After the above steps are completed, you can use adb to push the file to the phone to run, the steps are as follows:
WenmuZhou's avatar
WenmuZhou committed
249
250

 ```
MissPenguin's avatar
update  
MissPenguin committed
251
252
 # Execute the compilation and get the executable file ocr_db_crnn
 # The first execution of this command will download dependent libraries such as opencv. After the download is complete, you need to execute it again
WenmuZhou's avatar
WenmuZhou committed
253
 make -j
MissPenguin's avatar
update  
MissPenguin committed
254
 # Move the compiled executable file to the debug folder
WenmuZhou's avatar
WenmuZhou committed
255
 mv ocr_db_crnn ./debug/
MissPenguin's avatar
update  
MissPenguin committed
256
 # Push the debug folder to the phone
WenmuZhou's avatar
WenmuZhou committed
257
258
259
260
 adb push debug /data/local/tmp/
 adb shell
 cd /data/local/tmp/debug
 export LD_LIBRARY_PATH=${PWD}:$LD_LIBRARY_PATH
MissPenguin's avatar
update  
MissPenguin committed
261
 # The use of ocr_db_crnn is:
Double_V's avatar
Double_V committed
262
263
 # ./ocr_db_crnn Mode Detection model file Orientation classifier model file Recognition model file  Hardware  Precision  Threads Batchsize  Test image path Dictionary file path
 ./ocr_db_crnn system ch_PP-OCRv2_det_slim_opt.nb  ch_PP-OCRv2_rec_slim_opt.nb  ch_ppocr_mobile_v2.0_cls_slim_opt.nb  arm8 INT8 10 1  ./11.jpg  config.txt  ppocr_keys_v1.txt  True
LDOUBLEV's avatar
LDOUBLEV committed
264
# precision can be INT8 for quantitative model or FP32 for normal model.
Double_V's avatar
Double_V committed
265
266
267
268
269
270

# Only using detection model
./ocr_db_crnn  det ch_PP-OCRv2_det_slim_opt.nb arm8 INT8 10 1 ./11.jpg  config.txt

# Only using recognition model
./ocr_db_crnn  rec ch_PP-OCRv2_rec_slim_opt.nb arm8 INT8 10 1 word_1.jpg ppocr_keys_v1.txt config.txt
WenmuZhou's avatar
WenmuZhou committed
271
272
 ```

MissPenguin's avatar
update  
MissPenguin committed
273
If you modify the code, you need to recompile and push to the phone.
WenmuZhou's avatar
WenmuZhou committed
274

MissPenguin's avatar
update  
MissPenguin committed
275
The outputs are as follows:
WenmuZhou's avatar
WenmuZhou committed
276
277

<div align="center">
WenmuZhou's avatar
WenmuZhou committed
278
    <img src="imgs/lite_demo.png" width="600">
WenmuZhou's avatar
WenmuZhou committed
279
280
281
</div>

## FAQ
WenmuZhou's avatar
WenmuZhou committed
282

MissPenguin's avatar
update  
MissPenguin committed
283
284
285
Q1: What if I want to change the model, do I need to run it again according to the process?

A1: If you have performed the above steps, you only need to replace the .nb model file to complete the model replacement.
WenmuZhou's avatar
WenmuZhou committed
286

MissPenguin's avatar
update  
MissPenguin committed
287
Q2: How to test with another picture?
WenmuZhou's avatar
WenmuZhou committed
288

MissPenguin's avatar
update  
MissPenguin committed
289
A2: Replace the .jpg test image under ./debug with the image you want to test, and run adb push to push new image to the phone.
WenmuZhou's avatar
WenmuZhou committed
290

MissPenguin's avatar
update  
MissPenguin committed
291
Q3: How to package it into the mobile APP?
WenmuZhou's avatar
WenmuZhou committed
292

MissPenguin's avatar
update  
MissPenguin committed
293
A3: This demo aims to provide the core algorithm part that can run OCR on mobile phones. Further, PaddleOCR/deploy/android_demo is an example of encapsulating this demo into a mobile app for reference.
LDOUBLEV's avatar
LDOUBLEV committed
294
295
296
297

Q4: When running the demo, an error is reported `Error: This model is not supported, because kernel for 'io_copy' is not supported by Paddle-Lite.`

A4: The problem is that the installed paddlelite version does not match the downloaded prediction library version. Make sure that the paddleliteopt tool matches your prediction library version, and try to switch to the nb model again.