AI树莓派——构建树莓派大脑(NCNN环境搭建)
前言
镜像已经做好了,传到百度网盘中了(请大家及时保存,不定期删除!)
https://pan.baidu.com/s/1fhiX86L8iL8tsLbsiVa6Wg 密码: e64s
SD卡要求:至少16GB,板卡型号为树莓派3B+(其他型号未知)
镜像使用说明:
- root 密码 111
- 依赖库编译在Dowloads文件夹下
- 编译好的NCNN项目在work目录下
板卡介绍
本系列教程采用树莓派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树莓派官方系统)
更换源
一步操作
直接执行以下两步,即可替换将官方默认软件源替换为 中科大镜像源
$ 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
或换为清华镜像源
$ 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
$ sudo vim /etc/apt/sources.list
进入之后,屏蔽掉其他的源,输入以下源:
$ 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
$ sudo vim /etc/apt/sources.list.d/raspi.list
进入之后,屏蔽掉其他的源,输入以下源:
$ deb http://mirror.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui
$ deb-src http://mirror.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui
- 第三步:修改完源后更新升级系统
$ sudo apt-get update
$ sudo apt-get upgrade
安装cmake工具
安装cmake
sudo apt-get install cmake
安装cmake-gui
cmake-gui是可视化的cmake工具,便于配置。
$ sudo apt-get install cmake-gui
安装 protobuf
下载 protobuf-2.6.1.tar.gz 安装
$ #解压文件
$ tar zxvf protobuf-2.6.1.tar.gz
$ #进入文件
$ cd protobuf-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
预装依赖库
$ 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安装时可能会比较慢,耐心等待
$ sudo pip3 install numpy
查看numpy的安装目录并记录(后面编译时需要PYTHON3_NUMPY_INCLUDE_DIRS路径,如果不带numpy编译可能会卡住)
$ python3
>> import numpy
>> numpy.__path__
>> quit()
下载并解压OpenCV
然后下载OpenCV库和Contrib库(强烈建议在其他环境下载然后拷贝过来),如果需要其他版本,就修改后面的版本号
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,以下内容为一行
$ 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 ..
编译安装
执行如下操作:
# 编译(编译过程尽量只用一个核 不要加 j4,j3,j2)
$ make
$ sudo make install
编译NCNN
下载NCNN
$ git clone https://github.com/Tencent/ncnn.github
需要安装的依赖库
- protobuf
- opencv
编译
$ cd ncnn
$ mkdir build
$ cd build
$ cmake ..
$ make
NCNN测试
修改项目根目录下的CMakeLists.txt
文件,定位到最后几行
$ cd <ncnn-root-dir>
$ cd build
$ cmake ..
$ make
$ cp examples/squeezenet_v1.1.param build/examples
$ cp examples/squeezenet_v1.1.bin build/examples
$ cd build/examples
$ ./squeezenet cat.jpg
结果:
调整SD卡分区
使用工具:
Linux Ubuntu gparted分区工具
安装gparted
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
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- laravel 之 Eloquent 模型修改器和序列化示例
- TP5框架请求响应参数实例分析
- laravel 模型查询按照whereIn排序的示例
- 解决在laravel中auth建立时候遇到的问题
- php array 转json及java 转换 json数据格式操作示例
- Thinkphp5 如何隐藏入口文件index.php(URL重写)
- 在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
- thinkphp5使html5实现动态跳转的例子
- php 自定义函数实现将数据 以excel 表格形式导出示例
- 解决tp5在nginx下修改配置访问的问题
- 在PHP中实现使用Guzzle执行POST和GET请求
- c 语言函数指针之回调函数
- 解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
- php和js实现根据子网掩码和ip计算子网功能示例
- php ZipArchive实现多文件打包下载实例