编译
首先按照PaddleLite 源码编译准备交叉编译环境,之后拉取最新PaddleLite release发布版代码。下面以Android-ARMv8架构为例,介绍编译过程,并最终在手机上跑通MobilNetv1模型。
进入 Paddle-Lite 目录,运行以下命令编译代码(需加编译选项--build_extra=ON
确保完整编译):
编译完成后 ./build.lite.android.armv8.gcc/inference_lite_lib.android.armv8/
文件夹下包含:
- cxx
- include (头文件文件夹)
- lib (库文件文件夹)
- libpaddle_api_full_bundled.a
- libpaddle_api_light_bundled.a
- libpaddle_light_api_shared.so
- libpaddle_full_api_shared.so
- demo
- cxx (C++ demo)
- mobile_light (light api demo)
- mobile_full (full api demo)
- mobile_detection (detection model api demo)
- mobile_classify (classify model api demo)
- third_party (第三方库文件夹)
准备执行环境
执行环境有两种:使用安卓手机;若没安卓手机,也可在安卓模拟器中执行。
环境一:使用安卓手机
将手机连上电脑,在手机上打开选项 -> 开启-开发者模式 -> 开启-USB调试模式。确保 adb devices
能够看到相应的设备。
环境二:使用安卓模拟器
运行下面命令,分别创建安卓armv8、armv7架构的模拟器。若需在真机测试,将模拟器换成相应架构的真机环境即可。
下载模型并运行示例
注:我们也提供了轻量级 API 的 demo、图像分类demo和目标检测demo,支持图像输入;
Light API Demo
图像分类 Demo
目标检测 Demo
Demo 程序运行结果
light API Demo 运行结果
运行成功后 ,将在控制台输出预测结果的前10个类别的预测概率:
图像分类 Demo 运行结果
运行成功后 ,将在控制台输出预测结果的前5个类别的类型索引、名字和预测概率:
目标检测 Demo 运行结果
运行成功后 ,将在控制台输出检测目标的类型、预测概率和坐标:
如何在代码中使用 API
在C++中使用PaddleLite API非常简单,不需要添加太多额外代码,具体步骤如下:
- 通过MobileConfig设置:模型文件位置(model_dir)、线程数(thread)和能耗模式( power mode )。输入数据(input),从 MobileConfig 创建 PaddlePredictor 并执行预测。 (注:Lite还支持从memory直接加载模型,可以通过MobileConfig::set_model_buffer方法实现)
代码示例:
CxxConfig案例: OCR_model的运行
- OCR 模型文件:
- 示例代码:
- 运行方法:
参考以上代码编译出可执行文件
OCR_DEMO
,模型文件夹为ocr_attention
。手机以USB调试、文件传输模式连接电脑。
简单编译出`OCR_DEMO`的方法:用以上示例代码替换编译结果中`build.lite.android.armv8.gcc/inference_lite_lib.android.armv8/demo/cxx/mobile_full/mobilenetv1_full_api.cc`文件的内容,终端进入该路径(`demo/cxx/mobile_full/`),终端中执行`make && mv mobilenetv1_full_api OCR_DEMO`即编译出了OCR模型的可执行文件`OCR_DEMO`
在终端中输入以下命令执行OCR model测试:
- 运行结果