树莓派NCNN环境搭建 | 异构 AI

标签: | 发表时间:2019-01-26 17:42 | 作者:
出处:https://xywang93.github.io

树莓派NCNN环境搭建

前言镜像已经做好了,传到百度网盘中了(请大家及时保存,不定期删除!)

链接: https://pan.baidu.com/s/1fhiX86L8iL8tsLbsiVa6Wg密码: e64s

SD卡要求:至少16GB,板卡型号为树莓派3B+(其他型号未知)

板卡介绍

本系列教程采用树莓派3B+开发板:

板卡特点:

  • 1.4GHz 64位4核 ARM Cortex-A53 CPU
  • 双频 802.11ac 无线网卡和蓝牙 4.2
  • 更快的以太网(千兆以太网 over USB 2.0)
  • 1G LPDDR2
  • PoE 支持(Power-over-Ethernet,with PoE HAT)
  • 改进 PXE 网络与 USB 大容量存储启动

系统安装

工具

  • SDFormatter(格式化SD卡)
  • win32diskimager(为SD卡烧写程序)
    -

    安装步骤

首先用SDFormatter将插入的SD卡格式化。
然后用win32diskimager找到对应的镜像烧写到SD卡中(原始镜像采用2018-04-18-raspbian-stretch树莓派官方系统)

更换源

一步操作

直接执行以下两步,即可替换将官方默认软件源替换为
中科大镜像源

1             
2
$ sudo sed -i's#://mirrordirector.raspbian.org#s://mirrors.ustc.edu.cn/raspbian#g'/etc/apt/sources.list             
$ sudo sed -i's#://archive.raspberrypi.org/debian#s://mirrors.ustc.edu.cn/archive.raspberrypi.org#g'/etc/apt/sources.list.d/raspi.list

或换为清华镜像源

1             
2
$ sudo sed -i's#://mirrordirector.raspbian.org#s://mirrors.tuna.tsinghua.edu.cn/raspbian#g'/etc/apt/sources.list             
$ sudo sed -i's#://archive.raspberrypi.org/debian#s://mirrors.tuna.tsinghua.edu.cn/raspberrypi#g'/etc/apt/sources.list.d/raspi.list

或手动修改源

  • 第一步:修改 sources.list
    1                
    $ sudo vim /etc/apt/sources.list                

进入之后,屏蔽掉其他的源,输入以下源:

1             
2
$ deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi             
$ deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi

  • 第二步:修改 raspi.list
    1                
    $ sudo vim /etc/apt/sources.list.d/raspi.list                

进入之后,屏蔽掉其他的源,输入以下源:

1             
2
$ deb http://mirror.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui             
$ deb-src http://mirror.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui

  • 第三部修改完源后更新升级系统
    1                
    2
    $ sudo apt-get update                
    $ sudo apt-get upgrade

安装VScode

提供了VScode ARM安装包,直接安装!

1             
$ sudo dpkg -i code-oss_1.14.0-1497990172_armhf.deb             

安装cmake工具

安装cmake

1            
sudo apt-get install cmake            

安装cmake-gui

cmake-gui是可视化的cmake工具,便于配置。

1             
$ sudo apt-get install cmake-gui             

安装 protobuf

下载 protobuf-2.6.1.tar.gz
安装

1             
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$#解压文件             
$ tar zxvf protobuf-2.6.1.tar.gz
$#进入文件
$cdprotobuf-2.6.1/
$# 配置
$ ./configure
$# 编译(编译过程尽量只用一个核 不要加 j4,j3,j2)
$ make
$# 编译检查
$ make check
$# 安装
$ sudo make install
$# 添加库路径 在/etc/ld.so.conf.d/目录下创建文件bprotobuf.conf文件
$cd/etc/ld.so.conf.d/
$ sudo touch bprotobuf.conf
$# vim打开bprotobuf.conf文件输入/usr/local/lib
$ sudo ldconfig
$# 查看版本
$ protoc –-version

安装opencv3.4

预装依赖库

1            
2
3
4
5
6
7
8
9
$ sudo apt-get install build-essential git cmake pkg-config -y            
$ sudo apt-get install libjpeg8-dev -y
$ sudo apt-get install libtiff5-dev -y
$ sudo apt-get install libjasper-dev -y
$ sudo apt-get install libpng12-dev -y
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y
$ sudo apt-get install libgtk2.0-dev -y
$ sudo apt-get install libatlas-base-dev gfortran -y
$ sudo apt-get install qt5-default -y

安装numpy(命令行),第一次使用pip安装时可能会比较慢,耐心等待

1             
$ sudo pip3 install numpy             

查看numpy的安装目录并记录( 后面编译时需要PYTHON3_NUMPY_INCLUDE_DIRS路径,如果不带numpy编译可能会卡住

1             
2
3
4
$ python3             
>>importnumpy
>> numpy.__path__
>> quit()

下载并解压OpenCV

然后下载OpenCV库和Contrib库(强烈建议在其他环境下载然后拷贝过来),如果需要其他版本,就修改后面的版本号

1             
2
https://github.com/Itseez/opencv/archive/3.4.0.zip             
https://github.com/Itseez/opencv_contrib/archive/3.4.0.zip

cmake配置

解压后在opencv-3.4.0文件夹里创建build文件夹,然后在命令行里面cd到此文件夹,开始cmake,以下内容为一行

1             
2
3
4
5
6
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local-D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_LIBV4L=ON PYTHON3_EXECUTABLE=/usr/bin/python3.5 PYTHON_INCLUDE_DIR=/usr/include/python3.5 PYTHON_LIBRARY=/usr/lib/arm-linux-gnueabihf/libpython3.5m.so PYTHON3_NUMPY_INCLUDE_DIRS=/home/pi/.local/lib/python3.5/site-packages/numpy/core/include ..             

## 备选方案
sudo aptitude search libgtk2.0-dev

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local-D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_GTK=ON -D WITH_OPENGL=ON ..

编译安装

执行如下操作:

1             
2
3
# 编译(编译过程尽量只用一个核 不要加 j4,j3,j2)             
$ make
$ sudo make install

编译NCNN

下载NCNN

1            
$ gitclonehttps://github.com/Tencent/ncnn.github            

需要安装的依赖库

  • protobuf
  • opencv

编译

1            
2
3
4
5
$cdncnn            
$ mkdir build
$cdbuild
$ cmake ..
$ make

NCNN测试

修改项目根目录下的 CMakeLists.txt文件,定位到最后几行

1            
2
3
4
5
6
7
8
$cd<ncnn-root-dir>            
$cdbuild
$ cmake ..
$ make
$ cp examples/squeezenet_v1.1.param build/examples
$ cp examples/squeezenet_v1.1.bin build/examples
$cdbuild/examples
$ ./squeezenet cat.jpg

结果:

制作img系统镜像

  • 安装dcfldd工具

    1                
    sudo apt-get install dcfldd                
  • 将已经安装好软件的内存卡插到pc机上,在虚拟机中打开可移动设备。

  • 查看备份设备
    1                
    2
    cd/dev                
    ls

可以看到插入设备(整体)为sdb,其中有几个分区(sdb1、sdb2、sdb3.)

  • 备份分区
1            
sudo dcflddif=/dev/sdb of=/root/pi.img            
  • 由于我们是将整个内存卡的全部做成镜像( 启动+系统),所以输入文件为sdb,若只做系统部分的镜像,可以只选择sdb2.
  • 备份包括输入文件(if)以及被设置为/root目录下名为pi.img的输出文件(of)。

调整SD卡分区

使用工具:

Linux Ubuntu gparted分区工具

安装gparted

1            
sudo apt-get install gparted            

调整分区容量大小

参考

https://www.jianshu.com/p/67b9e6ebf8a0
http://www.rabbit8.cn/609.html
https://linux.cn/article-8477-1.html
https://www.cnblogs.com/Pyrokine/p/8921285.html
https://stackoverflow.com/questions/28776053/opencv-gtk2-x-error

相关人工智能与异构计算的知识分享,欢迎关注我的公众号 AI异构 

相关 [树莓派 ncnn 环境] 推荐:

树莓派NCNN环境搭建 | 异构 AI

- -
前言镜像已经做好了,传到百度网盘中了(请大家及时保存,不定期删除. https://pan.baidu.com/s/1fhiX86L8iL8tsLbsiVa6Wg密码: e64s. SD卡要求:至少16GB,板卡型号为树莓派3B+(其他型号未知). 本系列教程采用树莓派3B+开发板:. 1.4GHz 64位4核 ARM Cortex-A53 CPU.

MTCNN人脸及特征点检测--基于树莓派3B+及ncnn架构 - yuanlulu的博客 - CSDN博客

- -
本文尝试在树莓派3B+上用ncnn框架测试MTCNN. ncnn的基本编译和使用请参考《. 在树莓派3B+上编译ncnn并用benchmark和mobilenet_yolo测试》. mtcn-ncnn项目中下载mtcnn子目录,把这个目录放在最新的ncnn源码目录下. 修改ncnn最顶层的CMakeList.txt,增加对mtcnn的支持.

树莓派打造的家庭环境监控 | iOS开发和七七八八

- -
最近空气质量又有下降的趋势,想想手头的RPI2B,干脆拿来改造成一个环境监控系统吧,放在客厅随时可以看到,情况不对马上开净化器😊. 传感器部分都是以前就买了的,平时拿来偶尔玩一下. 主要是三个:一个空气质量检测的激光传感器,一个温湿度的DHT22,一个凑数的带光感的数模转换. 屏幕是一块5寸的HDMI破电阻屏,用来搭建本体的是两包白色塑料小积木,所有东西均购自淘宝,包括树莓派物料成本大约500+.

从零开始搭建树莓派 + intel movidius 神经元计算棒2代深度学习环境 - Mingyong_Zhuang的技术博客 - CSDN博客

- -
从零开始搭建树莓派+intel movidius 神经元计算棒2代深度学习环境. 下载OpenVINO toolkit for Raspbian安装包:. Opencv + python api调用方法:. 本文从零开始搭建,从烧写树莓派的系统开始,到最后用计算棒跑人脸检测. 本教程适用二代的计算棒,不适合一代的计算棒.

树莓派初级折腾

- - 极客范 - GeekFan.net
前些天在网上买了一个二手的树莓派 裸板子190包邮 (新品套装280 360什么的太贵了啊岂可修). 到手目测没有问题 主IC还有一个铜质散热片 不错. 电源就用买移动电源送的充电器(标称5v 1000mA输出 )和数据线. SD卡么… 把很久没玩的PSP掏出来 把马甲卡中的东西倒到记忆棒里 记忆棒插回PSP TF卡装到转接卡上 (话说还是个class10的呢).

安装树莓派 Raspberry PI

- - CSDN博客综合推荐文章
树莓派终于到货了,是这个样子的. 上面有一行日期是 Raspberry PI (c) 2011.12. 选择这个镜像: RASPBIAN Debian 2014-01-07. 780M的压缩包,很大的样子. 似乎还有个NOOBS的安装方式,完全无感. 顺便展示一下SD卡,通过查阅可用SD卡列表,似乎是支持个别的64G Class10的卡的,就像这个,编号是 Transcend SDXC 64G Class10 TS64GSDXC10.

树莓派 1602A显示屏

- - 编程语言 - ITeye博客
树莓派 1602A显示屏. 下面代码本人测试过没有问题,开始运行完屏幕上什么也没有显示出来,后来调整了下电位器可以了,所以大家如果按着下面的做出来之后运行什么也没有显示的话,记得调整下电位器. VO,液晶对比度调节,接电位器中间的引脚,电位器两边的引脚分别接5V和接地. RS,寄存器选择,接GPIO14.

GitHub - Tencent/ncnn: ncnn is a high-performance neural network inference framework optimized for the mobile platform

- -
ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架. ncnn 从设计之初深刻考虑手机端的部署和使用. 无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架. 基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖.

在树莓派上用python控制LED

- - 极客范 - GeekFan.net
初步学习RPi.GPIO模块的过程中写了一个控制8个LED的模块,基本上只是一个对RPi.GPIO的一个封装. 一个已经安装配置好了的树莓派. 连接控制树莓派所用的其他必须设备. 按照电路图所示,在面包板上进行连接. 首先得确定RPi.GPIO已安装. 最新的系统已经自带了,如果没有的可以使用命令.

PiLarm: 便携式树莓派警报器

- - 极客范 - GeekFan.net
我一直在寻找一些能给自己孩子带来教益的瞬间. 当我五岁的儿子来寻求我的帮助,别再让他的弟弟偷偷溜进他的房间的时候,我突然灵光一现,发现这是教他关于输入、输出和其他一些编程知识的绝佳时机. 而且让他在解决自己实际问题中学习这些也会相对容易. 我本来可以用很多不同的方法来建立一个简单的警报系统,但是我想要让这个系统是一体化的并且在功能上不止能满足我儿子最初的原始需求.