目录
一. 烧写Android系统
通过以上两步即完成Android系统的准备。
二. 安装Android-NDK
三. 连接Android设备和Linux主机
1. 使用TypeC-USB线分别接Android设备和Linux主机,使用 lsusb 命令查看Android设备的ID:
这里,查到设备的ID为2207. (注意:有的TypeC-USB线只能用来充电,不能传输数据,所以lsusb命令不会显示ID)
2. 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
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主
机之间传递文件。
四. 部署MobileNetSSD到Android (5. Compile and execute demo)
git clone https://github.com/xindongzhang/MNN-APPLICATIONS.git
cd MNN-APPLICATIONS/applications/mssd/tensorflow
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)