树莓派4B+口罩人脸+人流量计数+web页面 —— 环境配置(包含opencv4、tensorflow、pytorch的安装)

树莓派4B+口罩人脸+人流量计数+web页面 —— 环境配置

  • 1. Raspbian-lite 烧录及配置
    • 1.1. 烧录工具下载
    • 1.2. 烧录
    • 1.3. 无键盘屏幕WiFi配置
    • 1.4. 无键盘屏幕开启 ssh
    • 1.5. 开启摄像头
    • 1.6. 开启蓝牙
  • 2.换源
    • 2.1. 备份原文件
    • 2.2. 修改 `/etc/apt/sources.list`
    • 2.3. 修改 `/etc/apt/sources.list.d/raspi.list`
    • 2.4. 手动更新系统时间
    • 2.5. 执行更新以生效
  • 3. 安装Python3-opencv
    • 3.1. opencv3
    • 3.2. opencv4
  • 4. 安装Tensorflow
    • 4.1. 下载whl文件
    • 4.2. 安装
    • 4.3. 验证安装
  • 5. 安装pytorch
    • 5.1. 扩大根目录,增加交换区空间
    • 5.2. 安装依赖包
    • 5.3. 下载pytorch
    • 5.4. 设置环境变量
    • 5.5. 编译
    • 5.6. 安装
    • 5.7. 验证


树莓派4B+口罩人脸+人流量计数+web页面 —— 环境配置(包含opencv4、tensorflow、pytorch的安装)_第1张图片

  1. 成品的web页面长这个样子
  2. 开机自动启动蓝牙和一个WiFi连接管理的页面,手机连接蓝牙可以修改树莓派的WiFi连接信息
  3. 支持连接WiFi访问,蓝牙访问,插网线访问,只要在一个网段就能访问到页面
  4. 这是一个笔记,记录一下在树莓派的环境搭建和代码调试中遇到的问题(写的有点啰嗦)

1. Raspbian-lite 烧录及配置

1.1. 烧录工具下载

到树莓派的官网下载 Raspberry Pi Imager 工具(根据自己的操作系统不同,选择合适的版本进行下载)

1.2. 烧录

Raspberry Pi ImagerCHOOSE OS 选择 Raspbian(other) --> Raspbian Lite

然后在 CHOOSE SD CARD 中选择对应的 SD 卡,最后点击 WRITE 开始写入

树莓派4B+口罩人脸+人流量计数+web页面 —— 环境配置(包含opencv4、tensorflow、pytorch的安装)_第2张图片

树莓派4B+口罩人脸+人流量计数+web页面 —— 环境配置(包含opencv4、tensorflow、pytorch的安装)_第3张图片

1.3. 无键盘屏幕WiFi配置

/boot 文件夹下添加 wpa_supplicant.conf 文件,内容如下:

country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
 
network={
ssid="WiFi-A"
psk="12345678"
key_mgmt=WPA-PSK
priority=1
}
 
network={
ssid="WiFi-B"
psk="12345678"
key_mgmt=WPA-PSK
priority=2
scan_ssid=1
}

ssid:网络的ssid
psk:密码
priority:连接优先级,数字越大优先级越高(不可以是负数)
scan_ssid:连接隐藏WiFi时需要指定该值为1

1.4. 无键盘屏幕开启 ssh

在 boot 分区新建一个文件,空白的即可,文件命名为 ssh。注意要小写且不要有任何扩展名。
树莓派在启动之后会在检测到这个文件之后自动启用 ssh 服务。随后即可通过登录路由器找到树莓派的 IP 地址,通过 ssh 连接到树莓派了。

1.5. 开启摄像头

sudo raspi-config

在gui界面中选择 Interfacing Opertions --> Camera
树莓派4B+口罩人脸+人流量计数+web页面 —— 环境配置(包含opencv4、tensorflow、pytorch的安装)_第4张图片
树莓派4B+口罩人脸+人流量计数+web页面 —— 环境配置(包含opencv4、tensorflow、pytorch的安装)_第5张图片

1.6. 开启蓝牙

1). 开启蓝牙并设置开机启动

sudo service bluetooth start
sudo update-rc.d bluetooth enable

2). 安装bluez-tools

sudo apt-get install bluez-tools

3). 修改 /etc/systemd/network/pan0.netdev

sudo nano /etc/systemd/network/pan0.netdev

/etc/systemd/network/pan0.netdev 的内容如下:

[NetDev]
Name=pan0
Kind=bridge

4). 修改 /etc/systemd/network/pan0.network

sudo nano /etc/systemd/network/pan0.network

/etc/systemd/network/pan0.network 的内容如下:

[Match]
Name=pan0
​
[Network]
Address=172.20.1.1/24
DHCPServer=yes

5). 修改 /etc/systemd/system/bt-agent.service

sudo nano /etc/systemd/system/bt-agent.service

/etc/systemd/system/bt-agent.service 的内容如下:

[Unit]
Description=Bluetooth Auth Agent
​
[Service]
ExecStart=/usr/bin/bt-agent -c NoInputNoOutput
Type=simple
​
[Install]
WantedBy=multi-user.target

6). 修改 /etc/systemd/system/bt-network.service

sudo nano /etc/systemd/system/bt-network.service

/etc/systemd/system/bt-network.service 的内容如下:

[Unit]
Description=Bluetooth NEP PAN
After=pan0.network
​
[Service]
ExecStart=/usr/bin/bt-network -s nap pan0
Type=simple
​
[Install]
WantedBy=multi-user.target

7). 启动各项服务

sudo systemctl enable systemd-networkd
sudo systemctl enable bt-agent
sudo systemctl enable bt-network
sudo systemctl start systemd-networkd
sudo systemctl start bt-agent
sudo systemctl start bt-network

8). 开机自动打开可被发现

sudo nano /etc/rc.local

exit 0 的前面加上:

sleep 10s
bt-adapter --set Discoverable 1

操作完以后 reboot 重启可以用手机蓝牙找到 raspberrypi 的蓝牙设备,并且通过 172.20.1.1 可以访问到树莓派的服务


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. 修改 /etc/apt/sources.list

sudo chmod 777 /etc/apt/sources.list
sudo echo "" > /etc/apt/sources.list
sudo nano /etc/apt/sources.list

/etc/apt/sources.list 的内容如下:

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.3. 修改 /etc/apt/sources.list.d/raspi.list

sudo chmod 777 /etc/apt/sources.list.d/raspi.list
sudo echo "" > /etc/apt/sources.list.d/raspi.list
sudo nano /etc/apt/sources.list.d/raspi.list

/etc/apt/sources.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.4. 手动更新系统时间

这里是一个坑,raspbian好像无法从ntp自动更新时间,所以系统的时间是错的,这个问题会导致 apt update 的时候报错,所以需要手动修改系统的时间跟现在的时间一致,应该不需要精确到秒,差不多就行了

sudo date -s "2020-04-21 15:18:00" 
# 日期字符串根据自己实际的时间修改

2.5. 执行更新以生效

sudo apt update
sudo apt upgrade

如果不做 2.4 的步骤的话,在这一步可能会报错,报错了的话在shell里面用 date 命令看一下是不是日期出问题了


3. 安装Python3-opencv

安装Python-opencv是一个巨大的坑。。。
去百度的话,都会建议编译安装,但是我大概尝试了5次左右都编译安装失败了。

3.1. opencv3

如果项目不需要opencv4的话,如果opencv3可以满足需求的话,那执行下面的命令即可:

sudo apt-get install python3-opencv

3.2. opencv4

如果项目需要用到opencv4的话,那就很麻烦了。。。

# 安装依赖
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install build-essential cmake pkg-config -y
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng-dev -y
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y
sudo apt-get install libxvidcore-dev libx264-dev -y
sudo apt-get install libfontconfig1-dev libcairo2-dev -y
sudo apt-get install libgdk-pixbuf2.0-dev libpango1.0-dev -y
sudo apt-get install libgtk2.0-dev libgtk-3-dev -y
sudo apt-get install libatlas-base-dev gfortran -y
sudo apt-get install libhdf5-dev libhdf5-serial-dev libhdf5-103 -y
sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5

然后先尝试 pip3 install opencv-python ,由于网络的原因多半是会失败的,但是失败的提示信息里面会给出whl包的下载地址,复制这个下载地址然后用wget下载下来,再用pip3进行安装

安装完成后,在shell里面进入python3

import cv2
cv2.__version__

此时多半是会报错的,可能出现的问题及解决方法如下:
ImportError: libImath-2_2.so.23: cannot open shared object file: No such file or directory

  • 下载libilmbase12_2.2.0-12_armhf.deb

  • sudo dpkg -i libilmbase12_2.2.0-12_armhf.deb

  • cd /usr/lib/arm-linux-gnueabihf && sudo mv libImath-2_2.so.12 libImath-2_2.so.23

ImportError: libhdf5_serial.so.103: cannot open shared object file: No such file or directory

  • sudo apt-get install libhdf5-serial-dev

ImportError: libIlmImf-2_2.so.23: cannot open shared object file: No such file or directory

  • sudo apt-get install libopenexr-dev

ImportError: libgstbase-1.0.so.0: cannot open shared object file: No such file or directory

  • sudo apt-get install libgstreamer1.0-0 libgstreamer-plugins-base1.0-0

ImportError: /home/pi/cv2/cv2.cpython-37m-arm-linux-gnueabihf.so: undefined symbol: __atomic_fetch_add_8

  • python3 前面加上 LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1 ,如 :
python3 server.py

需要修改为:

LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1 python3 server.py

4. 安装Tensorflow

4.1. 下载whl文件

在 github下载 适合的whl文件(当前的32位系统用的是 tensorflow-2.1.0-cp37-none-linux_armv7l.whl )

4.2. 安装

sudo pip3 install tensorflow-2.1.0-cp37-none-linux_armv7l.whl  -i https://pypi.tuna.tsinghua.edu.cn/simple

中间要是有 whl 包下载失败就用 wget 下载或者用迅雷下载了传上去安装(下载失败了会显示下载地址的)

4.3. 验证安装

sudo python3
import tensorflow
tensorflow.__version__

5. 安装pytorch

由于对python3.7而言,还没有现成的.whl包,所以需要我们下载源程序自己编译。

5.1. 扩大根目录,增加交换区空间

sudo raspi-config

选择 Advanced Options -> Expand Filesystem

sudo nano /etc/dphys-swapfile

找到 CONF_SWAPSEIZE 修改其值为2048

# 重启文件交换系统使修改生效
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start 

注意:进行完这一步以后一定要重启一下机器 reboot

5.2. 安装依赖包

sudo apt install libopenblas-dev libblas-dev m4 
sudo apt install cmake cython python3-dev python3-yaml python3-setuptools 

5.3. 下载pytorch

mkdir pytorch_install 
cd pytorch_install
git clone --recursive https://github.com/pytorch/pytorch
cd pytorch

5.4. 设置环境变量

export NO_CUDA=1
export NO_DISTRIBUTED=1
export NO_MKLDNN=1 
export NO_NNPACK=1
export NO_QNNPACK=1

5.5. 编译

git submodule update --remote third_party/protobuf   #这里是协议缓冲区的一个bug,用此语句修复
cd /home/pi/pytorch_install/pytorch
python3 setup.py build

需要等待很长时间

5.6. 安装

sudo -E python3 setup.py install

5.7. 验证

python3
import torch
torch.__version__

你可能感兴趣的:(树莓派,环境搭建)