文章目录
一、树莓派系统烧录
对于树莓派而言我们自然需要一个SD卡并且烧录系统,SD卡大多推荐32G或者64G的(我是用的是16G貌似也可以),也可以搞更大的,系统我选择的是树莓派官网的Lite32位系统(毕竟树莓派内存就那么小,带UI界面的系统会卡成PPT,论坛上有人对比64位系统性能更好,但是目前64位系统还只是测试版,而且后续的加速棒OpenVINO只支持32位,所以安装32位系统)。
64位系统下载地址
64位系统安装参考
烧录软件是BalenaEtcher,也可以选择树莓派官方的Respberry Pi Imager或者Win32DiskImager都可以。其中Win32DiskImager也可以读取制作好的sd卡的镜像。制作过程也比较简单,本次我是用的是BalenaEtcher。
依次选择镜像文件,sd卡设备,等待烧写就好了。
制作完毕后插入启动卡,启动树莓派,约30s就可启动成功。
二、更换源
后续安装一系列依赖库和工具都需要下载文件,因此更换系统源为国内镜像源,更新前先设置root登录密码,解锁root登录
2.1、设置root登录密码
执行命令:
sudo passwd root
输入root 登录密码。
sudo passwd --unlock root
即可解锁。
2.2、更换apt 源
2.2.1、先备份源文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak
2.2.2、编辑系统源文件
sudo nano /etc/apt/sources.list
将初始的源使用#注释掉,添加如下两行清华的镜像源
【注意】这里的树莓派系统是Raspbian-buster系统,在写系统源链接时要注意是buster,网上很多教程都是之前stretch版本,容易出错!
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
2.2.3、更改系统源
sudo nano /etc/apt/sources.list.d/raspi.list
用#注释掉原文件内容,用以下内容取代:
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
2.2.4、更新索引
保存执行如下命令完成源的更新软件包索引。
sudo apt-get update -y
sudo apt-get upgrade -y
2.3、更换pip源
安装python
包管理器pip
wget https://bootstrap.pypa.io/get-pip.pysudo python3 get-pip.py
或者
sudo apt-get install python-pip python3-pip python3-dev -y
pip更换为国内源,可以大大的提高安装成功率和速度。不管你用的是pip3还是pip,方法都是一样的,
这里举例换清华源(网上多推荐豆瓣源,看个人选择,我是用清华源还是比较快的 )打脸了,最近又安装TensorFlow用清华的源报错,换豆瓣就正常,还是用豆瓣吧!
先创建文件夹,再创建这个文件
sudo mkdir -p ~/.pip
sudo touch ~/.pip/pip.conf
sudo nano ~/.pip/pip.conf
在里面添加如下内容:
[global]
timeout =6000
index-url = http://pypi.douban.com/simple/
[install]
use-mirrors =true
mirrors =http://pypi.douban.com/simple/
trusted-host =pypi.douban.com
保存退出执行
sudo pip3 install --upgrade pip
就行了!
国内源列表:
树莓派镜像源列表:
阿里云
中国科技大学
豆瓣
Python官方
v2ex
中国科学院
清华大学
2.4、参考文章
https://mirror.tuna.tsinghua.edu.cn/help/raspbian/
https://blog.csdn.net/qq_40584960/article/details/86080904
https://blog.csdn.net/zqxdsy/article/details/102574239
三、树莓派设置
3.1、设置静态IP地址
sudo apt-get install vim -y
安装vim编译器,实测树莓派下vim也不好用,可以使用winscp软件在windows下编辑好文档再上传到树莓派下。
sudo nano /etc/dhcpcd.conf
修改这个文件如下:
#以太网有线配置
interface eth0
static ip_address=192.168.x.x/24
static routers=192.168.x.1
static domain_name_servers=114.114.114.114
#无线接口配置
interface wlan0
static ip_address=192.168.x.x/24
static routers=192.168.x.1
static domain_name_servers=114.114.114.114
或者修改interface文件
sudo apt install resolvconf -y
sudo systemctl disable dhcpcd.service
sudo nano /etc/network/interfaces
添加以下内容:
auto eth0
iface eth0 inet static
address 192.168.137.155
netmask 255.255.255.0
gateway 192.168.137.1
dns-nameservers 192.168.137.1
3.2、开启ssh远程登录
sudo vim /etc/ssh/sshd_config +32
#将第32行注释取消并改成
PermitRootLogin yes
保存退出vim编辑器输入。
开启ssh远程登录服务,开机自启动ssh服务
sudo service ssh startsudo systemctl enable ssh
这样开启远程登录后就可通过xshell或者SecureCRT等第三方终端工具以root用户身份ssh访问树莓派了,如果只需user身份访问,只需
sudo raspi-config
将“Interface Options”->“P2 SSH” 设置Enable即可,或者在BOOT分区新建一个SSH文件夹即可;
3.3、修改原始pi账号、密码
树莓派默认的用户名和密码是pi/ raspberry,如无需修改可以略过不看。
使用root账号登录,才可修改。
#修改用户密码
sudo passwd pi
#修改user
sudo usermod -l zkzy pi
#修改group
sudo groupmod -n zkzy pi
#修改home 目录
sudo mv /home/pi /home/zkzy
#设置home 目录
sudo usermod -d /home/zkzy zkzy
修改后,pi用户名就变成“新用户名”。
切记:修改用户名和密码后,使用SSH及xrdp访问时,要用新的用户名和密码登录访问。
3.4、配置无线网络
ifconfig看一下无线网卡有没有开启,没有开启输入ifconifg wlan0 up开启无线网卡(wlan0换成自己的无线网卡名称),如果能够看到无线网卡说明已经开启,直接下一步。
nano /etc/wpa_supplicant/wpa_supplicant.conf
填入以下内容
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CN
network={
ssid="Your_SSID" # 你的无线网名称
psk="Your_PassWord" # 你的无线网密码
priority=2 # 网络登入优先级,有多个网络的时候优先连接数字大的
}
# 第二个可以不写
network={
ssid="Your_SSID2"
psk="Your_PassWord2"
priority=1
}
重启即可(没有验证过)。
3.5、设置时区
树莓派默认采用UTC时间,因此需修改为北京时间。
#安装ntp
sudo apt-get install ntpdate -y
#启动NTP
sudo timedatectl set-ntp true
#修改本地时区
sudo dpkg-reconfigure tzdata
选择“asia/shanghai”
上海时区即可。
3.6、windows或Ubuntu通过samba访问树莓派
3.6.1、安装samba服务
sudo apt-get install samba -y
在安装过程,是否自动修改smb.conf,如果是dhcp地址选择yes,否则也可以选择No。然后
sudo nano /etc/samba/smb.conf
修改配置文件,在文件末尾添加如下内容:
[share]
comment = zkzy share
path = /home/zkzy
available = yes
browseable = yes
public = yes
writable = yes
read only = no
directory mask = 0777
create mask = 0777
保存退出后通过以下命令重启samba服务即可。
sudo /etc/init.d/smbd restart
sudo /etc/init.d/nmbd restart
3.6.2、访问samba共享目录
windows下访问samba目录比较简单,在运行窗口输入\ip地址即可。
Ubuntu下麻烦一些,也可能是我没找到合适的方法,我是通过mount将samba共享目录挂载到Ubuntu下的一个目录来访问的,挂载命令如下:
sudo mount -t cifs -o username=xxx,password=xxx,iocharset=utf8,dir_mode=0777,file_mode=0777 //192.168.110.224/share /home/user/raspberry
username
和password
是登录树莓派的用户名和密码,//
后面是树莓派的IP地址,dir_mode
和file_mode
设置为0777
可以保证在Ubuntu
下非root
用户也能修改树莓派文件。
如此之后就可在windows
或Ubuntu
下通过vscode编辑树莓派代码,通过ssh远程登录树莓派测试运行了。
3.7、安装locate工具
locate
工具很好用,默认没有安装,通过以下命令安装,更新索引,就可以通过locate
查找文件位置了。
sudo apt-get install locate -y
sudo updatedb
3.8、安装wqy中文字体库
sudo apt-get install ttf-wqy-zenhei -y
安装文泉驿黑体字库主要用于后续一些中文osd的显示。
3.9、禁用蓝牙和wifi、使能usb
修改config.txt
sudo nano /boot/config.txt
在末尾追加以下内容:
dtoverlay=dwc2,dr_mode=host
dtoverlay=disable-wifi
dtoverlay=disable-bt
四、安装tensorflow环境
4.1、安装TensorFlow
安装前请通过uname -a查看系统版本比如我的是armv7的版本
所以下载whl文件选择armv7的。
通过python3 -V
查看python3版本,选择whl文件时cp指代python版本号,因为我的是python3.7,所以最终选择的whl文件为tensorflow-2.4.0-cp37-none-linux_armv7l.whl
。
(1)更新源,升级软件
sudo apt-get update -y
sudo apt-get upgrade -y
(2)安装pip和pip3
sudo apt-get install python-pip python3-pip python3-dev -y
(3)卸载旧版本
sudo pip uninstall tensorflow
sudo pip3 uninstall tensorflow
(4)安装依赖库(可能大部分已安装)
sudo apt-get install gfortran -y
sudo apt-get install libhdf5-dev libc-ares-dev libeigen3-dev -y
sudo apt-get install libatlas-base-dev libopenblas-dev libblas-dev -y
sudo apt-get install liblapack-dev -y
(5)升级setuptools
sudo -H pip3 install --upgrade setuptools
sudo -H pip3 install pybind11
sudo -H pip3 install Cython==0.29.21
(6)使用 Cython 版本 0.29.21安装 h5py
sudo -H pip3 install h5py==2.10.0
(7)通过gdown下载whl文件
已有whl文件可以跳过,没有试过使用gdown下载whl文件。
# install gdown to download from Google drive
pip3 install gdown
# copy binairy
sudo cp ~/.local/bin/gdown /usr/local/bin/gdown
# download the wheel
gdown https://drive.google.com/uc?id=1x2nxbi8rLvF7WzYkuwt9SOuDvsOUytjE
(8)安装TensorFlow
sudo -H pip3 install tensorflow-2.4.0-cp37-none-linux_armv7l.whl
4.2 、验证
python3
import tensorflow as tf
tf .__version__
自此tensorflow环境搭建完毕。
4.3、参考文献
树莓派4安装TensorFlow参考文章
此参考链接还提供64位环境安装TensorFlow,以及python3.5环境安装。
五、opencv环境安装
因OpenVINO安装默认已安装opencv,所以先安装opencv4环境。安装opencv4参考文章。
5.1、 扩展树莓派文件系统
按照文档说明扩展文件系统以包含micro-SD
卡上的所有可用空间,Raspberry Pi
的“扩展文件系统”菜单允许我们利用整个闪存卡。这将为我们提供安装 OpenCV 4
和其他软件包所需的空间。
执行配置命令:sudo raspi-config
然后选择<6 Advanced Options>
然后选择<A1 Expand Filesystem>
如下图所示:完成后退出时会自动选择重启。
完成后退出时会提示选择重启,等待系统重启完成,可以通过df -h命令来验证空间扩展成功,如下图所示可用空间位9.7G,扩展成功。
因为安装的是精简版系统,所以无需通过sudo apt-get autoremove -y
卸载空间精简空间,进行下一步安装opencv4
依赖项。
5.2、安装opencv4依赖项
5.2.1、安装CMake等开发工具
sudo apt-get install build-essential cmake unzip pkg-config -y
5.2.2 、安装一系列图像和视频库
这些对于处理图像和视频文件至关重要,这一步下载安装的内容较大,使用国内镜像源会快很多。
sudo apt-get install libjpeg-dev libpng-dev libtiff-dev -y #安装图片I/0包,用于加载各种格式图片
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y #安装视频I/o包,用于加载各种格式视频
sudo apt-get install libxvidcore-dev libx264-dev -y
5.2.3、安装gtk开发库
sudo apt-get install libgtk-3-dev -y #用于编译opencv子模块highgui
sudo apt-get install libcanberra-gtk* -y #减少GTK警告的包
5.2.4、安装优化库
sudo apt-get install libatlas-base-dev gfortran -y #用于优化矩阵操作
5.3、下载opencv4.2.0源码
#下载opencv4.2.0和opencv_contrib4.2.0
cd ~
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.2.0.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.2.0.zip
在树莓派环境上下载github代码可能比较慢,建议更新hosts文件下载文件后再拷贝到树莓派下。
解压两个opencv文件
unzip opencv.zipunzip opencv_contrib.zip
为了便于后续编译等工作,将解压后的opencv文件夹重命名,也可不重命名。
mv opencv-4.2.0 opencvmv opencv_contrib-4.2.0 opencv_contrib
5.4 、编译opencv源码
5.4.1 、执行CMake
没有按照原文的Step4
安装python
虚拟环境,但是我执行了pip安装和
sudo pip3 install numpy
sudo apt-get install python-numpy -y
在opencv目录下执行以下命令:
sudo mkdir build
cd build
执行CMake操作
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF \
-D ENABLE_NEON=ON \
-D WITH_LIBV4L=ON \
-D BUILD_TESTS=OFF \
-D ENABLE_VFPV3=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D PYTHON3_EXECUTABLE=/usr/bin/python3.7 \
-D PYTHON_INCLUDE_DIR=/usr/include/python3.7 \
-D PYTHON_LIBRARY=/usr/lib/arm-linux-gnueabihf/libpython3.7m.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include \
..
编译时如果不添加build_examples=off
和build_tests=off
两个选项,编译时会报错,查看报错信息是缺少一些依赖库,因为只是编译库,所以不在这上面花费时间和精力,故将这两项置为off。
此步骤约需10分钟左右,执行完毕后出现如下画面:
5.4.2、调整树莓派交换区大小
如果树莓派内存小于4G请调整swap大小。
sudo nano /etc/dphys-swapfile
修改如下:
# 将大小设置为绝对值,留空(默认)然后使用计算值
# 你很可能不想要这个,除非你有特殊的磁盘情况
# CONF_SWAPSIZE=100
CONF_SWAPSIZE = 2048
修改完毕后执行以下命令:
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
注意:增加交换大小会缩短 Raspberry Pi microSD 卡的寿命。基于闪存的存储卡可以执行的写入次数有限,直到卡基本上无法再保存 1 和 0 为止。我们只会在短时间内启用大交换,所以这影响不大。但是以防意外请提前份镜像文件,另外编译安装完毕后一定要修改回来。
5.4.3 、解决boostdesc_bgm.i文件错误
如果直接编译会提出缺少boostdesc_bgm.i
等文件错误,解决方法从网上下载这些文件拷贝到opencv_contrib/modules/xfeatures2d/src/
目录下。
百度云链接:https://pan.baidu.com/s/1BeYF8kqEZLAJYQj-MvxpmA
提取码:e1wc
5.4.4、编译和安装
执行sudo make -j4
静静等待编译完成,约需两小时,编译完成后执行sudo make install
执行安装。
我将编译后的opencv.tgz
和opencv_contrib.tgz
上传到百度网盘,可以避免下次长时间编译。
5.5、验证
python3
>>>import cv2
>>>cv2.__version__
输出opencv
版本号则证明安装成功。
六、英特尔神经棒2代 Openvino安装
可参考英特尔官方文档:
安装比较简单,下载l_openvino_toolkit_runtime_raspbian_p_2021.4.582.tgz
,通过scp工具拷贝到树莓派目录下。
(1) 安装依赖
sudo pip3 install imutils picamera pyserial crcmod pillow glog
(2) 创建安装目录
sudo mkdir -p /opt/intel/openvino
(3) 解压缩文件
sudo tar -xf l_openvino_toolkit_runtime_raspbian_p_2021.4.582.tgz --strip 1 -C /opt/intel/openvino
(4) 安装外部依赖CMake
在安装opencv时已经安装过了。
(5) 设定环境变量
source /opt/intel/openvino/bin/setupvars.sh
也可通过以下方式永久生效环境变量
echo "source /opt/intel/openvino/bin/setupvars.sh" >> ~/.bashrc
(5) 将当前用户添加到users群组
sudo usermod -a -G users "$(whoami)"
(6) 安装USB规则
要在英特尔® 神经计算棒 2 上执行推理,请运行install_NCS_udev_rules.sh脚本安装 USB 规则。
sh /opt/intel/openvino/install_dependencies/install_NCS_udev_rules.sh
自此Openvino安装完毕。
七、运行测试代码
从github
上下载了一份代码,代码源码详见附录的百度网盘,因为使用了中文字体需先安装依赖
sudo pip3 install pillow
在树莓派下运行
python3 mobilenetv2ssdlite.py
得到如下效果:
八、在Ubuntu下搭建树莓派交叉编译环境
即使安装了samba共享,在虚拟机下编译代码也比较麻烦,而且也想利用台式机的强大CPU加快编译速度,因此想在Ubuntu下搭建一个交叉编译环境,编译完后将可执行文件拷贝到树莓派下运行就比较方便了,因为CMake可以附加拷贝操作。
参考文章
(1)查看树莓派GCC/G++版本
gcc --versionld -vldd --version
树莓派的gcc版本为8.3.0因此我们需要下载8.3.0的gcc
(2)下载交叉编译链
从参考文章中找到下载链接,下载gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar
版本。无法找到8.3.0版本的,只好找低版本的,我测试过通过sudo apt-get install gcc-arm-linux-gnueabihf -y
和sudo apt-get install g++-arm-linux-gnueabihf -y
直接安装arm-linux-gnueabihf
是10.1版本的,g++编译运行出现异常。
(3)安装交叉编译链
cd /opt/sudo tar xf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
然后修改环境变量,在~/.bashrc或/etc/profile最后加上这句话
export PATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin
重启终端或机器,然后通过arm-linux-gnueabihf-gcc -v
查看安装效果
自此交叉编译链安装成功,在Ubuntu下编译树莓派程序,拷贝到树莓派下运行,经测试可以正常编译在树莓派上运行,如果遇到拷贝失败,多是路径或者权限不对。
九、设置开机自启动
检测程序依赖openvino,普通的修改开机自启动的方法会遇到openvino环境问题,因此修改/etc/rc.local
添加以下内容:
echo 'passwd' | su - user /bin/bash -c "/your bash path/autostart.sh &"
其中user
和passwd
是用户名和密码 这样就能以user用户执行你的自启动脚本。
autostart.sh
如下
#!/bin/bash
whoami
echo "========start EleSentry"
source /opt/intel/openvino/bin/setupvars.sh
./EleSentry &
python3 /home/zkzy/workspace/dzsb/object_detection_sample_ssd/object_detection_sample_ssd.py -m person-vehicle-bike-detection-2002.xml -d MYRIAD &
附录
安装所需文件已上传百度网盘:
链接:https://pan.baidu.com/s/1FuOkP2szAMyrnUhbuKppJQ
提取码:6yue
网盘中的opencv4.2.0.zip
和opencv_contrib4.2.0.zip
是opencv
官网下载的原始文件,opencv.tgz
和opencv_contrib.tgz
是我编译后的文件。