参考文章:
1.在Android手机上使用腾讯的ncnn实现图像分类: https://blog.csdn.net/qq_33200967/article/details/82421089
2. Ubuntu 16.04安装NVIDIA驱动:https://blog.csdn.net/u014797226/article/details/79626693
3.Ubuntu16.04 Caffe 安装步骤记录(超详尽): https://blog.csdn.net/yhaolpz/article/details/71375762
4.NanoPC-T4 / ZH友善之臂:http://wiki.friendlyarm.com/wiki/index.php/NanoPC-T4/zh#.E4.B8.B2.E5.8F.A3.E8.B0.83.E8.AF.95
5迄今最全人脸识别开源: http://itindex.net/detail/58933-人脸识别-开源-qq
6.https://github.com/moli232777144/mtcnn_ncnn
博主使用SD卡脱机烧写:
访问此处的下载地址下载SD卡脱机烧写所需的文件及工具:
详细操作步骤如下:
准备一张8G或以上容量的SDHC卡;
下载并解压固件文件rk3399-eflasher-OSNAME-YYYYMMDD.img.zip和工具win32diskimager;(osname是你要烧录的系统镜像名称)
在Windows下以管理员身份运行win32diskimager,在界面上选择你的SD卡盘符,选择- 解压后的EFlasher固件,点击写按钮烧写到SD卡; 或者在Linux下使用dd命令将rk3399-eflasher-OSNAME -YYYYMMDD.img写入SD卡;
将SD卡从电脑端弹出,插入NanoPC-T4的的microSD卡槽;
长按NanoPC-T4上的Power键直到板上的PWR灯亮,系统会从SD卡启动,并自动启动EFlasher烧写工具,你有多种途径可以操作EFlasher:
方法1:连接LCD或HDMI显示屏,在图形界面上操作EFlasher,如果屏幕不支持触摸,则需要使用USB鼠标来操作; (博主采用这个方法)
方法2:将开发板通过网线接入局域网,通过ssh登录开发板,然后输入命令eflasher,根据命令行的提示进行操作;(注:ssh登录的用户是root,密码为fa,开发板IP可查看路由器后台获得)
方法3:通过调试串口登录到串口终端,在终端上输入命令eflasher来操作;
方法4:连接一个lcd2usb配件到NanoPC-T4上,按配件上面的K1键可以选择要烧写的系统,然后按K2键确定烧写,烧写进度会在lcd2usb上显示;
烧写完成后,轻按电源键关机,从NanoPC-T4端弹出SD卡;(不拔出会进不了烧好的系统)
打开编辑配置文件: sudo gedit /etc/modprobe.d/blacklist.conf
在最后一行添加:blacklist nouveau
改好后执行命令:sudo update-initramfs -u
重启使之生效:reboot
重启后按Ctrl+Alt+F1 进入命令行界面
执行命令:lsmod | grep nouveau
禁用X服务:sudo /etc/init.d/lightdm stop (或者:sudo service lightdm stop)
给驱动run文件赋予可执行权限:sudo chmod a+x NVIDIA-Linux-x86_64-390.25.run (下载的驱动文件名)
安装:sudo ./NVIDIA-Linux-x86_64-390.25.run -no-opengl-files
开启X服务:sudo /etc/init.d/lightdm start (或者:sudo service lightdm start)
–no-opengl-files 只安装驱动文件,不安装OpenGL文件。这个参数最重要
–no-x-check 安装驱动时不检查X服务
–no-nouveau-check 安装驱动时不检查nouveau
后面两个参数可不加。
重启,没有问题,输入命令:nvidia-smi
如果出现了驱动版本就表示安装成功了。
参考:https://blog.csdn.net/yhaolpz/article/details/71375762
这篇文章写的非常详细,但是因为个人环境不同,还是出现了很多大小不同的错误,如果遇到了错误可以继续遇到此文
如果出错 确保安装好需要的工具cmake、编译caffe的工具(参考caffe github的安装教程)
参考:https://blog.csdn.net/qq_33200967/article/details/82421089
使用Ubuntu编译ncnn库
wget https://dl.google.com/android/repository/android-ndk-r17b-linux-x86_64.zip
unzip android-ndk-r17b-linux-x86_64.zip
export ANDROID_NDK="/home/test/paddlepaddle/android-ndk-r17b"
设置好之后,可以使用以下的命令查看配置情况。
root@test:/home/test/paddlepaddle# echo $NDK_ROOT
/home/test/paddlepaddle/android-ndk-r17b
下载cmake源码
wget https://cmake.org/files/v3.11/cmake-3.11.2.tar.gz
解压cmake源码
tar -zxvf cmake-3.11.2.tar.gz
进入到cmake源码根目录,并执行bootstrap。
cd cmake-3.11.2
./bootstrap
最后执行以下两条命令开始安装cmake。
make
make install
安装完成之后,可以使用cmake --version是否安装成功。
root@test:/home/test/paddlepaddle# cmake --version
cmake version 3.11.2
CMake suite maintained and supported by Kitware (kitware.com/cmake).
git clone https://github.com/Tencent/ncnn.git
进入到ncnn源码根目录下
cd ncnn
创建一个新的文件夹
mkdir -p build-android-armv7
进入到该文件夹中
cd build-android-armv7
执行编译命令
cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI="armeabi-v7a" -DANDROID_ARM_NEON=ON \
-DANDROID_PLATFORM=android-14 ..
这里使用4个行程并行编译
make -j4
make install
include 调用ncnn所需的头文件,该文件夹会存放在Android项目的src/main/cpp目录下;
lib 编译得到的ncnn库libncnn.a,之后会存放在Android项目的src/main/jniLibs/armeabi-v7a/libncnn.a
转换预测模型
git clone https://github.com/BVLC/caffe.git
之前安装caffe时已经编译好
把需要转换的模型复制到caffe/tools,并切入到该目录
cd tools
升级Caffe模型
./upgrade_net_proto_text mobilenet_v2_deploy.prototxt mobilenet_v2_deploy_new.prototxt
./upgrade_net_proto_binary mobilenet_v2.caffemodel mobilenet_v2_new.caffemodel
name: "MOBILENET_V2"
layer {
name: "input"
type: "Input"
top: "data"
input_param {
shape {
dim: 1
dim: 3
dim: 224
dim: 224
}
}
}
cd ncnn/
mkdir -p build
cd build
cmake ..
make -j4
make install
经过上一步,会生产一个tools,我们进入到以下目录
cd tools/caffe/
把已经升级的网络定义文件和权重文件复制到当目录,并执行以下命令
./caffe2ncnn mobilenet_v2_deploy_new.prototxt mobilenet_v2_new.caffemodel mobilenet_v2.param mobilenet_v2.bin
切换到上一个目录
cd ../
执行命令之后会生成mobilenet_v2.param、mobilenet_v2.id.h、mobilenet_v2.mem.h
./ncnn2mem mobilenet_v2.param mobilenet_v2.bin mobilenet_v2.id.h mobilenet_v2.mem.h
经过上面的步骤,得到的文件中,以下文件时需要的:
mobilenet_v2.param.bin 网络的模型参数;
mobilenet_v2.bin 网络的权重;
mobilenet_v2.id.h 在预测图片的时候使用到。
我们在Android Studio上创建一个NCNN1的项目,别忘了选择C++支持
(Android Studio3.0之后的新建项目时下滑可以找到c++支持的模板)
其他的可以直接默认就可以了,在这里要注意选择C++11支持。(选其他的会出错)
之后的项目搭建的步骤请参考
https://blog.csdn.net/qq_33200967/article/details/82421089
下图是mtcnn_As的项目结构
github源码地址:https://github.com/moli232777144/mtcnn_ncnn
虽然成功安装运行,但是没有检测到人脸,初步猜测是动态申请读取外部存储问题
2019.5.23 15点23分更新:后来我又检测成功了。。。。
对安卓深度学习移植感应趣的同学请移步我的另外一篇文章:https://blog.csdn.net/liaopiankun0618/article/details/90481231