README.md 8.9 KB
Newer Older
Y
Yan Chunwei 已提交
1
# C++ Demo
2 3 4

> 欢迎加入PaddleLite百度官方QQ群(696965088),会有专业同学解答您的疑问与困惑。

Y
yiicy 已提交
5
1. 环境准备
6
   - 一台可以编译PaddleLite的电脑
Y
yiicy 已提交
7
   - 一台armv7或armv8架构的安卓手机
8

9
2. 人脸识别和佩戴口罩判断的Demo
10

11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
目前,PaddleLite提供了shell端的人脸识别和佩戴口罩判断的Demo,首先基于已经准备好的Demo进行演示,然后介绍如何基于代码编译Demo并执行。

**下载Demo并执行**

下载压缩包[mask_detection_files](https://paddle-inference-dist.cdn.bcebos.com/PaddleLiteDemo/mask_detection_files.tgz),解压到本地,其中包括编译好的可执行文件、模型文件、测试图片、PaddleLite 2.3版本动态库。

电脑连接安卓手机,在电脑shell端执行如下命令,将mask_detection_files文件夹push到安卓手机上。
```
adb push mask_detection_files /data/local/tmp/
```

在电脑shell端执行如下命令,进入安卓手机,执行demo。
```
adb shell
cd /data/local/tmp/mask_detection_files
export LD_LIBRARY_PATH=/data/local/tmp/mask_detection_files:$LD_LIBRARY_PATH 
./mask_detection face_detection mask_classification test.jpg
```

回到电脑端,将结果图片(test_mask_detection_result.jpg)取出,查看检测结果。
```
exit
adb pull /data/local/tmp/mask_detection_files/test_mask_detection_result.jpg ./
```


**编译Demo并执行**

39 40
参考[源码编译](https://paddlepaddle.github.io/Paddle-Lite/v2.2.0/source_compile/)准备编译环境。

41
执行下面命令,下载PaddleLite代码,切换到2.3版本分支。
42 43 44
```shell
git clone https://github.com/PaddlePaddle/Paddle-Lite.git
cd Paddle-Lite
45 46
git fetch origin release/v2.3:release/v2.3 
git checkout release/v2.3
47 48
```

49
进入PaddleLite根目录,编译预测库。
50 51 52 53 54 55 56 57
```shell
./lite/tools/build.sh \
    --arm_os=android \
    --arm_abi=armv8 \
    --arm_lang=gcc \
    --android_stl=c++_static \
    --build_extra=ON \
    --shutdown_log=OFF \
58
    full_publish
59 60
```

61
进入编译目录,下载模型和图片的压缩包,编译可执行文件。
62
```shell
63
cd build.lite.android.armv8.gcc/inference_lite_lib.android.armv8/demo/cxx/mask_detection
64 65 66
wget https://paddle-inference-dist.bj.bcebos.com/mask_detection.tar.gz
tar zxvf mask_detection.tar.gz
make
67 68
```

69 70 71 72
当然,大家也可以通过PaddleHub下载人脸检测模型和口罩佩戴判断模型。
```
# 下载paddlehub以后,通过python执行以下代码
import paddlehub as hub
73
pyramidbox_lite_mobile_mask = hub.Module(name="pyramidbox_lite_mobile_mask")
74
# 将模型保存在test_program文件夹之中
75 76 77
pyramidbox_lite_mobile_mask.processor.save_inference_model(dirname="test_program") 
# 通过以上命令,可以获得人脸检测和口罩佩戴判断模型,分别存储在pyramidbox_lite和mask_detector之中。文件夹中的__model__是模型结构文件,__param__文件是权重文件。
# 从PaddleHub下载的是预测模型,需要使用PaddleLite提供的model_optimize_tools对预测模型进行转换,请参考[模型转换文档](https://paddlepaddle.github.io/Paddle-Lite/v2.2.0/model_optimize_tool/)。
78 79
```

80 81
电脑连接安卓手机,将可执行文件、测试图片、模型文件、预测库push到安卓手机上。
```
82 83 84 85 86 87 88 89
adb push mask_detection /data/local/tmp/
adb push test.jpg /data/local/tmp/
adb push face_detection /data/local/tmp
adb push mask_classification /data/local/tmp
adb push ../../../cxx/lib/libpaddle_light_api_shared.so /data/local/tmp/
adb shell chmod +x /data/local/tmp/mask_detection
```

90 91 92 93 94
进入安卓手机,执行demo。
```
adb shell
cd /data/local/tmp
export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH 
95
./mask_detection face_detection mask_classification test.jpg
96 97 98 99 100 101
```

回到电脑端,将结果取出,查看如下效果图。
```
adb pull /data/local/tmp/test_mask_detection_result.jpg ./
```
102

103 104 105 106 107
![test_mask_detection_result](https://user-images.githubusercontent.com/7383104/75131866-bae64300-570f-11ea-9cad-17acfaea1cfc.jpg)

注:mask_detetion.cc 中的缩放因子shrink, 检测阈值detect_threshold, 可供自由配置:
   - 缩放因子越大,模型运行速度越慢,检测准确率越高。
   - 检测阈值越高,人脸筛选越严格,检测出的人脸框可能越少。
108 109

3. 编译并运行全量api的demo(注:当编译模式为tiny_pubish时将不存在该demo)
Y
Yan Chunwei 已提交
110 111 112 113 114
```shell
cd inference_lite_lib.android.armv8/demo/cxx/mobile_full
wget http://paddle-inference-dist.bj.bcebos.com/mobilenet_v1.tar.gz
tar zxvf mobilenet_v1.tar.gz
make
Y
yiicy 已提交
115 116 117 118 119
adb push mobilenet_v1 /data/local/tmp/
adb push mobilenetv1_full_api /data/local/tmp/
adb push ../../../cxx/lib/libpaddle_full_api_shared.so /data/local/tmp/
adb shell chmod +x /data/local/tmp/mobilenetv1_full_api
adb shell "export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH && 
120
/data/local/tmp/mobilenetv1_full_api --model_dir=/data/local/tmp/mobilenet_v1 --optimized_model_dir=/data/local/tmp/mobilenet_v1.opt"
Y
Yan Chunwei 已提交
121 122 123
```
运行成功将在控制台输出预测结果的前10个类别的预测概率

124
4. 编译并运行轻量级api的demo
Y
Yan Chunwei 已提交
125 126 127
```shell
cd ../mobile_light
make
Y
yiicy 已提交
128 129 130 131
adb push mobilenetv1_light_api /data/local/tmp/
adb push ../../../cxx/lib/libpaddle_light_api_shared.so /data/local/tmp/
adb shell chmod +x /data/local/tmp/mobilenetv1_light_api
adb shell "export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH && 
132
/data/local/tmp/mobilenetv1_light_api /data/local/tmp/mobilenet_v1.opt"
Y
Yan Chunwei 已提交
133
```
Y
yiicy 已提交
134
运行成功将在控制台输出预测结果的前10个类别的预测概率
135

136
5. 编译并运行ssd目标检测的demo
137
```shell
Y
yiicy 已提交
138
cd ../ssd_detection
139 140 141
wget https://paddle-inference-dist.bj.bcebos.com/mobilenetv1-ssd.tar.gz
tar zxvf mobilenetv1-ssd.tar.gz
make
Y
yiicy 已提交
142 143 144 145 146 147 148 149 150 151 152
adb push ssd_detection /data/local/tmp/
adb push test.jpg /data/local/tmp/
adb push mobilenetv1-ssd /data/local/tmp
adb push ../../../cxx/lib/libpaddle_light_api_shared.so /data/local/tmp/
adb shell chmod +x /data/local/tmp/ssd_detection
adb shell "export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH && 
/data/local/tmp/ssd_detection /data/local/tmp/mobilenetv1-ssd /data/local/tmp/test.jpg"
adb pull /data/local/tmp/test_ssd_detection_result.jpg ./
```
运行成功将在ssd_detection目录下看到生成的目标检测结果图像: test_ssd_detection_result.jpg

153
6. 编译并运行yolov3目标检测的demo
Y
yiicy 已提交
154 155 156 157 158 159 160 161 162 163 164 165 166
```shell
cd ../yolov3_detection
wget https://paddle-inference-dist.bj.bcebos.com/mobilenetv1-yolov3.tar.gz
tar zxvf mobilenetv1-yolov3.tar.gz
make
adb push yolov3_detection /data/local/tmp/
adb push test.jpg /data/local/tmp/
adb push mobilenetv1-yolov3 /data/local/tmp
adb push ../../../cxx/lib/libpaddle_light_api_shared.so /data/local/tmp/
adb shell chmod +x /data/local/tmp/yolov3_detection
adb shell "export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH && 
/data/local/tmp/yolov3_detection /data/local/tmp/mobilenetv1-yolov3 /data/local/tmp/test.jpg"
adb pull /data/local/tmp/test_yolov3_detection_result.jpg ./
167
```
Y
yiicy 已提交
168
运行成功将在yolov3_detection目录下看到生成的目标检测结果图像: test_yolov3_detection_result.jpg
169

170
7. 编译并运行物体分类的demo
171 172 173 174
```shell
cd ../mobile_classify
wget http://paddle-inference-dist.bj.bcebos.com/mobilenet_v1.tar.gz
tar zxvf mobilenet_v1.tar.gz
H
HappyAngel 已提交
175
./model_optimize_tool optimize model
176
make
H
HappyAngel 已提交
177

178 179 180 181 182 183
adb push mobile_classify /data/local/tmp/
adb push test.jpg /data/local/tmp/
adb push labels.txt /data/local/tmp/
adb push ../../../cxx/lib/libpaddle_light_api_shared.so /data/local/tmp/
adb shell chmod +x /data/local/tmp/mobile_classify
adb shell "export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH && 
H
HappyAngel 已提交
184
/data/local/tmp/mobile_classify /data/local/tmp/mobilenetv1opt2 /data/local/tmp/test.jpg /data/local/tmp/labels.txt"
185 186 187 188 189
```
运行成功将在控制台输出预测结果的前5个类别的预测概率
- 如若想看前10个类别的预测概率,在运行命令输入topk的值即可
    eg:
    ```shell
190
    adb shell "export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH && 
H
HappyAngel 已提交
191
    /data/local/tmp/mobile_classify /data/local/tmp/mobilenetv1opt2/ /data/local/tmp/test.jpg /data/local/tmp/labels.txt 10"
192 193 194 195
    ```
- 如若想看其他模型的分类结果, 在运行命令输入model_dir 及其model的输入大小即可
    eg:
    ```shell
196
    adb shell "export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH && 
H
HappyAngel 已提交
197
    /data/local/tmp/mobile_classify /data/local/tmp/mobilenetv2opt2/ /data/local/tmp/test.jpg /data/local/tmp/labels.txt 10 224 224"
198 199
    ```
    
200
8. 编译含CV预处理库模型单测demo 
H
HappyAngel 已提交
201 202 203 204 205 206
```shell
cd ../test_cv
wget http://paddle-inference-dist.bj.bcebos.com/mobilenet_v1.tar.gz
tar zxvf mobilenet_v1.tar.gz
./model_optimize_tool optimize model
make
207 208 209 210 211 212
adb push test_model_cv /data/local/tmp/
adb push test.jpg /data/local/tmp/
adb push labels.txt /data/local/tmp/
adb push ../../../cxx/lib/libpaddle_full_api_shared.so /data/local/tmp/
adb shell chmod +x /data/local/tmp/test_model_cv
adb shell "export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH && 
H
HappyAngel 已提交
213 214 215
/data/local/tmp/test_model_cv /data/local/tmp/mobilenetv1opt2 /data/local/tmp/test.jpg /data/local/tmp/labels.txt"
```
运行成功将在控制台输出预测结果的前10个类别的预测概率