ios编译产物和android编译产物,GitHub - cmmclee/Paddle-Lite-Demo: lib, demo, model, data

Paddle-Lite-Demo

功能

iOS示例:

静态图像目标分类和视频流目标分类;

静态图像目标检测、相机拍照目标检测、相机视频流目标检测;

Android示例:

基于MobileNetV1的图像分类;

基于MobileNetV1-SSD的目标检测;

ARMLinux示例:

基于MobileNetV1的图像分类;

基于MobileNetV1-SSD的目标检测;

要求

iOS

Mac机器,需要有xcode环境(已验证:Xcode Version 10.1 (10B61)

对于ios 12.x版本,如果提示“xxx. which may not be supported by this version of Xcode”,请下载对应的工具包, 下载完成后解压放到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport目录,重启xcode

Android

Android Studio 3.4

Android手机或开发版,NPU功能暂时只在麒麟810和990芯片的华为手机(如Nova5系列)进行了测试,使用前请将EMUI更新到最新版本;

ARMLinux

RK3399(Ubuntu 18.04) 或 树莓派3B(Raspbian Buster with desktop),暂时验证了这两个软、硬件环境,其它平台用户可自行尝试;

支持树莓派3B摄像头采集图像,具体参考树莓派3B摄像头安装与测试

gcc g++ opencv cmake的安装(以下所有命令均在设备上操作)

$ sudo apt-get update

$ sudo apt-get install gcc g++ make wget unzip libopencv-dev pkg-config

$ wget https://www.cmake.org/files/v3.10/cmake-3.10.3.tar.gz

$ tar -zxvf cmake-3.10.3.tar.gz

$ cd cmake-3.10.3

$ ./configure

$ make

$ sudo make install

安装

iOS

下载opencv framework, 下载完成后解压到Paddle-Lite-Demo/PaddleLite-ios-demo/ios-xxx_demo/xxx_demo/目录下

wget https://paddle-inference-dist.bj.bcebos.com/PaddleLiteDemo/opencv2.framework.zip

打开xcode,点击“Open another project…”打开Paddle-Lite-Demo/PaddleLite-ios-demo/ios-xxx_demo/目录下的xcode工程;

在选中左上角“project navigator”,选择“classification_demo”,修改“General”信息;

插入ios真机(已验证:iphone8, iphonexr),选择Device为插入的真机;

点击左上角“build and run”按钮;

Android

打开Android Studio,在"Welcome to Android Studio"窗口点击"Open an existing Android Studio project",在弹出的路径选择窗口中进入"image_classification_demo"目录,然后点击右下角的"Open"按钮即可导入工程

通过USB连接Android手机或开发板;

载入工程后,点击菜单栏的Run->Run 'App'按钮,在弹出的"Select Deployment Target"窗口选择已经连接的Android设备,然后点击"OK"按钮;

由于Demo所用到的库和模型均通过app/build.gradle脚本在线下载,因此,第一次编译耗时较长(取决于网络下载速度),请耐心等待;

如果库和模型下载失败,建议手动下载并拷贝到相应目录下:1) paddle_lite_libs.tar.gz:解压后将java/PaddlePredictor.jar拷贝至Paddle-Lite-Demo/PaddleLite-android-demo/image_classification_demo/app/libs,将java/libs/armeabi-v7a/libpaddle_lite_jni.so拷贝至Paddle-Lite-Demo/PaddleLite-android-demo/image_classification_demo/app/src/main/jniLibs/armeabi-v7a/libpaddle_lite_jni.so,将java/libs/armeabi-v8a/libpaddle_lite_jni.so拷贝至Paddle-Lite-Demo/PaddleLite-android-demo/image_classification_demo/app/src/main/jniLibs/arm64-v8a/libpaddle_lite_jni.so 2)mobilenet_v1_for_cpu.tar.gz:解压至Paddle-Lite-Demo/PaddleLite-android-demo/image_classification_demo/app/src/main/assets/models/mobilenet_v1_for_cpu 3)mobilenet_v1_for_npu.tar.gz:解压至Paddle-Lite-Demo/PaddleLite-android-demo/image_classification_demo/app/src/main/assets/models/mobilenet_v1_for_npu 4)ssd_mobilenet_v1_pascalvoc_for_cpu.tar.gz:解压至Paddle-Lite-Demo/PaddleLite-android-demo/object_detection_demo/app/src/main/assets/models/ssd_mobilenet_v1_pascalvoc_for_cpu ;

在图像分类Demo中,默认会载入一张猫的图像,并会在图像下方给出CPU的预测结果,如果你使用的是麒麟810或990芯片的华为手机(如Nova5系列),可以在右上角的上下文菜单选择"Settings..."打开设置窗口切换NPU模型进行预测;

在图像分类Demo中,你还可以通过上方的"Gallery"和"Take Photo"按钮从相册或相机中加载测试图像;

ARMLinux

图像分类Demo的编译与运行(以下所有命令均在设备上操作)

$ cd Paddle-Lite-Demo/PaddleLite-armlinux-demo/image_classification_demo

$ ./run.sh armv8 # RK3399

$ ./run.sh armv7hf # 树莓派3B

在终端打印预测结果和性能数据,同时在build目录中生成result.jpg。

目标检测Demo的编译与运行(以下所有命令均在设备上操作)

$ cd Paddle-Lite-Demo/PaddleLite-armlinux-demo/object_detection_demo

$ ./run.sh armv8 # RK3399

$ ./run.sh armv7hf # 树莓派3B

在终端打印预测结果和性能数据,同时在build目录中生成result.jpg。

更新到最新的预测库

参考 Paddle-Lite文档,编译IOS预测库或者Android预测库

编译最终产物位于 build.lite.xxx.xxx.xxx 下的 inference_lite_lib.xxx.xxx

IOS更新预测库

替换库文件:产出的lib目录替换Paddle-Lite-Demo/PaddleLite-ios-demo/ios-classification_demo/classification_demo/lib目录

替换头文件:产出的include目录下的文件替换Paddle-Lite-Demo/PaddleLite-ios-demo/ios-classification_demo/classification_demo/paddle_lite目录下的文件

Android更新预测库

仅支持CPU

替换jar文件:将PaddleLite编译生成的build.lite.android.xxx.gcc/inference_lite_lib.android.xxx/java/jar/PaddlePredictor.jar替换demo中的Paddle-Lite-Demo/PaddleLite-android-demo/image_classification_demo/app/libs/PaddlePredictor.jar

替换arm64-v8a jni库文件:将Paddle-Lite编译生成build.lite.android.armv8.gcc/inference_lite_lib.android.armv8/java/so/libpaddle_lite_jni.so库替换demo中的Paddle-Lite-Demo/PaddleLite-android-demo/image_classification_demo/app/src/main/jniLibs/arm64-v8a/libpaddle_lite_jni.so

替换armeabi-v7a jni库文件:将Paddle-Lite编译生成的build.lite.android.armv7.gcc/inference_lite_lib.android.armv7/java/so/libpaddle_lite_jni.so库替换demo中的Paddle-Lite-Demo/PaddleLite-android-demo/image_classification_demo/app/src/main/jniLibs/armeabi-v7a/libpaddle_lite_jni.so.

支持CPU和NPU

替换jar文件:将PaddleLite编译生成的build.lite.npu.android.xxx.gcc.cxx_shared.tiny_publish/inference_lite_lib.android.xxx.npu/java/jar/PaddlePredictor.jar替换demo中的Paddle-Lite-Demo/PaddleLite-android-demo/image_classification_demo/app/libs/PaddlePredictor.jar

替换arm64-v8a jni库文件:将Paddle-Lite编译生成build.lite.npu.android.armv8.gcc.cxx_shared.tiny_publish/inference_lite_lib.android.armv8.npu/java/so/libpaddle_lite_jni.so库替换demo中的Paddle-Lite-Demo/PaddleLite-android-demo/image_classification_demo/app/src/main/jniLibs/arm64-v8a/libpaddle_lite_jni.so

替换armeabi-v7a jni库文件:将Paddle-Lite编译生成的build.lite.npu.android.armv7.gcc.cxx_shared.tiny_publish/inference_lite_lib.android.armv7.npu/java/so/libpaddle_lite_jni.so库替换demo中的Paddle-Lite-Demo/PaddleLite-android-demo/image_classification_demo/app/src/main/jniLibs/armeabi-v7a/libpaddle_lite_jni.so.

编译支持NPU的jni库,需要在Paddle-Lite源码下使用$ ./lite/tools/build_npu.sh --arm_abi=armv8 tiny_publish命令编译生成armv64-v8a的libpaddle_lite_jni.so,armeabi-v7a的libpaddle_lite_jni.so请将编译命令中的--arm_abi=armv8改为--arm_abi=armv7,但由于华为最新的DDK库并没有发布,可能无法完成相关编译工作,因此,如果想使用NPU功能,强烈建议使用demo中自带的libpaddle_lite_jni.so和HIAI DDK库;

ARMLinux

替换头文件目录,将生成的cxx中的include目录替换Paddle-Lite-Demo/PaddleLite-armlinux-demo/Paddle-Lite/include目录;

替换armv8动态库,将生成的cxx/libs中的libpaddle_light_api_shared.so替换Paddle-Lite-Demo/PaddleLite-armlinux-demo/Paddle-Lite/libs/armv8/libpaddle_light_api_shared.so;

替换armv7hf动态库,将生成的cxx/libs中的libpaddle_light_api_shared.so替换Paddle-Lite-Demo/PaddleLite-armlinux-demo/Paddle-Lite/libs/armv7hf/libpaddle_light_api_shared.so;

效果展示

iOS

mobilenetv1 目标分类

3e9f9403aef79449acdadf282af14efd.png83fd9770d174b8c314242443dfb5c7e6.png

mobilenetv1-ssd 目标检测

ios-image-detection.jpgios-video-detection.jpg

Android

mobilenetv1 目标分类

CPU预测结果(测试环境:华为nova5)

a73aab46fafbe592b1c10fe1902e8f06.pngf0587fc63675b3cfc775522ff5d8ad5f.png

NPU预测结果(测试环境:华为nova5)

android_image_classification_cat_npu.jpgandroid_image_classification_keyboard_npu.jpg

mobilenetv1-ssd 目标检测

CPU预测结果(测试环境:华为nova5)

da4ff6faeedc9edf9bda5f58d92ce5d4.png

NPU预测结果(测试环境:华为nova5)

待支持

ARMLinux

mobilenetv1 目标分类

d508bfb85d243afd6f2995d339cdbedd.png

mobilenetv1-ssd 目标检测

cfa8c6a5294d4942fc675c59b7c20c1b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值