树莓派中配置tensorflow运行环境

本文记录在树莓派3B+上配置tensorflow运行环境的过程。

准备工作

  • 16G的microsd卡
  • 读卡器
  • 系统映像,如果使用官方的镜像烧录工具,就不需要准备

烧录系统

请参考树莓派操作系统镜像烧录方法指南

或者使用官方的系统映像烧录工具Raspberry Pi Imager, 烧录最新的树莓派操作系统。注意,烧录前配置使用ssh密码登录,并配置连接好wifi。建议不要使用最新的树莓派操作系统,而是选择legacy,debian10。

启动系统后使用如下命令连接系统:

1
2
3
4
# ssh登录系统
ssh pi@192.168.1.232
# 登录后配置启动vnc服务
sudo raspi-config

配置系统

tensorflow环境配置

1
2
3
4
5
python3 -m venv tf2_api_env
source tf2_api_env/bin/activate
pip install -r requirements.txt
# 在树莓派下安装tensorflow,执行如下命令
pip install --no-deps tensorflow_aarch64-2.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

下载TensorFlow Models

TensorFlow Model Garden。TensorFlow 模型花园是一个存储库,为 TensorFlow 用户提供了许多不同的最先进 (SOTA) 模型和建模解决方案的实现。我们旨在展示建模的最佳实践,以便 TensorFlow 用户可以充分利用 TensorFlow 进行研究和产品开发。

1
git clone https://github.com/tensorflow/models

安装TensorFlow Models中的Object Detection 模块

配置目标检测API目录,以便python能找到object detect api。使用pth文件,将object detect模块的路径添加到python模块的搜索路径中。在python安装目录的Lib\site-packages下创建tensorflow.pth文件,在其中添加Object Detection API文件路径:

1
2
3
4
5
# 创建tensorflow.pth文件,输入如下内容
J:\tensorflow\models
J:\tensorflow\models\research
J:\tensorflow\models\research\object_detection
J:\tensorflow\models\research\slim

安装Protobuf,生成python语言的消息协议

安装Protobuf的过程具体参考TensorFlow2.x目标检测API安装配置步骤详细教程 Object Detection API with TensorFlow2.x

1
2
cd models/research/
protoc/bin/protoc object_detection/protos/*.proto --python_out=.

修改源

可选。请参考修改树莓派3B+的软件源-Raspbian(stretch)

配置dhcp

可选。使用命令sudo leafpad /etc/dhcpcd.conf,修改dhcp配置文件,配置使用静态ip。

1
2
3
4
interface wlan0
static ip_address=192.168.3.169/24
static routers=
static domain_name_servers=

扩充分区

可选。请参考解决树莓派磁盘没有占满整个sd卡的方法

上网配置

可选。

1
2
sudo apt-get install proxychains
sudo leafpad /etc/proxychains.conf

安装pyenv

可选,重点是安装python3.7。在linux操作系统中:

1
2
wget  https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer
bash pyenv-installer

使用命令leafpad .bashrc打开.bashrc文件,在其末尾输入如下内容:

1
2
3
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

安装python 3.7.3:

1
2
3
4
5
6
7
8
9
10
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev libatlas-base-dev libjasper-dev libqtgui4 libqt4-test

# pyenv install build failed:Fatal: You must get working getaddrinfo() function
PYTHON_CONFIGURE_OPTS="--disable-ipv6" proxychains pyenv install 3.7.3
pyenv global 3.7.3
pyenv rahash

python -m pip install --upgrade pip

使用含tensorflow环境的Docker映像

可选。使用如下命令在树莓派上安装docker:

1
2
3
4
5
curl -fsSL https://get.docker.com -o get-docker.sh
Sudo sh get-docker.sh
# 将非root用户添加到docker组
sudo usermod -aG docker ${USER}
groups ${USER}

使用如下命令下载含tensorflow环境的docker映像:

1
docker pull armswdev/tensorflow-arm-neoverse:r22.05-tf-2.8.0-eigen

使用如下命令启动docker容器:

1
2
# 注意-v等所有选项必须在image之前
docker run -it --rm --name tf2_api_test -v /home/pi/tensorflow:/home/pi/tensorflow armswdev/tensorflow-arm-neoverse:r22.05-tf-2.8.0-eigen

具体使用过程请参考TensorFlow Serving with Docker

模型测试

传输模型

配置环境

可选。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 创建虚拟环境
python3 -m venv tf2_api_env
source tf2_api_env/bin/activate
# 下载并安装tensorflow 2.2
gdown https://drive.google.com/uc?id=11mujzVaFqa7R1_lB7q0kVPW22Ol51MPg
pip install --proxy=X.X.X.X:X tensorflow-2.2.0-cp37-cp37m-linux_armv7l.whl
# 安装tensorflow_io, object-detection需要
git clone https://github.com/tensorflow/io.git
cd io
git checkout v0.15.0
pip install -e .
# 安装object-detection
# From within TensorFlow/models/research/
cp object_detection/packages/tf2/setup.py .
pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple/
# or
pip install object_detection -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 安装opencv
sudo apt-get install libatlas-base-dev
pip install opencv-python

测试模型

1
2
3
4
5
6
7
8
9
10
11
12
# 进入虚拟环境
source tf2_api_env/bin/activate
# 测试图像处理
python image_process_test.py
# 测试视频处理
python video_read_test.py
# 测试摄像头
python camera_open_test.py
# 测试图像目标检测
python object_detection_plot.py
# 测试视频目标检测
python object_detection_camera.py

参考链接

  1. Installing Latest Tensor flow and Keras on RASPBERRY PI,by Abhishek c.
  2. Unable to uninstall programs using sudo pip,by askubuntu.
  3. Installing TensorFlow 2.3.0 for Raspberry Pi3+/4 (Debian Buster),by Cawin Chan.
  4. 树莓派开启wifi热点,by zsssj.
  5. 修改树莓派3B+的软件源-Raspbian(stretch),by codeantenna.
  6. 磁盘分区——主分区、扩展分区、逻辑分区,by ITCHN.
  7. 解决树莓派磁盘没有占满整个sd卡的方法,by ourkix.
  8. centos下python环境搭建,by bigtiger1648.
  9. Linux/树莓派raspbian 32/64查看,by Yew1168.
  10. ModuleNotFoundError: No module named ‘cv2’ (安装cv2),by weixin_39450145.
  11. TensorFlow Serving with Docker ,by tensorflow.
  12. Docker的volumes踩坑,by lyer.