【MNN学习五】在Android上部署MobileNetSSD之一

目录

一. 烧写Android系统

二. 安装Android-NDK

三. 连接Android设备和Linux主机

四. 部署MobileNetSSD到Android (5. Compile and execute demo)


一. 烧写Android系统

    下载固件:sd_ROC-RK3399-PC_Android8.1.0_DEFAULT_181016.img.xz

    烧写固件:http://wiki.t-firefly.com/zh_CN/ROC-RK3399-PC/guidebook.html#xia-zai-he-shao-xie-gu-jian

    通过以上两步即完成Android系统的准备。

二. 安装Android-NDK

    下载链接:https://developer.android.com/ndk/downloads/older_releases.html

    参考链接:Android NDK 安装配置指南

三. 连接Android设备和Linux主机

1. 使用TypeC-USB线分别接Android设备和Linux主机,使用 lsusb 命令查看Android设备的ID:

【MNN学习五】在Android上部署MobileNetSSD之一_第1张图片

    这里,查到设备的ID为2207. (注意:有的TypeC-USB线只能用来充电,不能传输数据,所以lsusb命令不会显示ID)

2. ADB工具的使用

    参考链接:ADB的安装和使用

sudo apt-get install android-tools-adb


mkdir -p ~/.android
vi ~/.android/adb_usb.ini
# add the following line:
0x2207


sudo vi /etc/udev/rules.d/70-android.rules
# add the following line:
SUBSYSTEM=="usb", ATTR{idVendor}=="2207", MODE="0666"


sudo udevadm control --reload-rules
sudo udevadm trigger


sudo adb kill-server
adb start-server


adb devices
adb shell

【MNN学习五】在Android上部署MobileNetSSD之一_第2张图片

3. Android设备打开USB调试模式

    a. 依次进入目录 Settings/System/About table/, 鼠标连续左击 Build number 七次进入开发者选项(会有提示)

    b. 返回目录 Settings/System即可看到 Developer options, 左击进入打开 USB debuging 选项

    c. 进入目录 Settings/Connected devices, USB选项默认为 Charging this device, 这种情况下我们不能在Linux主机上浏览  

  Android系统的内容(如下图所示Unable to access “ROC RK3399 PC”);若改成 Transfer files 即可在Android设备和Linux主

  机之间传递文件。

【MNN学习五】在Android上部署MobileNetSSD之一_第3张图片

【MNN学习五】在Android上部署MobileNetSSD之一_第4张图片

四. 部署MobileNetSSD到Android (5. Compile and execute demo)

git clone https://github.com/xindongzhang/MNN-APPLICATIONS.git


cd MNN-APPLICATIONS/applications/mssd/tensorflow

【MNN学习五】在Android上部署MobileNetSSD之一_第5张图片

adb shell   
cd /data/local/tmp/tf
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/tmp/tf


ndk-build


adb push ../libs/arm64-v8a /data/local/tmp/tf
adb push tf_mssd.mnn /data/local/tmp/tf
adb push image /data/local/tmp/tf/image


adb pull /data/local/tmp/tf/output ./output

    注意:adb push ../libs/arm64-v8a/ /data/local/tmp

    下面对 tf_mssd.cpp 进行修改:

std::string image_name = "./body.jpg";
std::string model_name = "./tf_body_det.mnn";
int forward = MNN_FORWARD_CPU;
// int forward = MNN_FORWARD_OPENCL;
// int forward = MNN_FORWARD_VULKAN;

int precision = 2;
int power     = 0;
int memory    = 0;
int threads   = 1;     // single thread

int INPUT_SIZE = 300;
int OUTPUT_NUM = 1917;   // for 300x300

    下图是检测结果,单线程CPU需要200ms.(另外,int8量化后需要125ms. 量化前四线程GPU只需30ms)

【MNN学习五】在Android上部署MobileNetSSD之一_第6张图片

【MNN学习五】在Android上部署MobileNetSSD之一_第7张图片

 

【MNN学习五】在Android上部署MobileNetSSD之一_第8张图片

【MNN学习五】在Android上部署MobileNetSSD之一_第9张图片


参考链接:https://github.com/xindongzhang/MNN-APPLICATIONS

                  https://askubuntu.com/questions/518479/ubuntu-doesnt-recognize-android-devices-anymore

 

你可能感兴趣的:(MNN)