树莓派安装opencv及tensorflow实现图像识别
参考:1.树莓派4 安装OPENCV3全过程(各种踩坑和报错)
2.树莓派实现目标检测识别(树莓派4+opencv4.1.1+tensorflow1.14.0+ssd_mobilenet_v1_coco)
目录
1. 安装opencv
1.1 换源
第一步先更换源,更新下载更快;
①在终端输入以下指令
sudo nano /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
如图:
然后ctrl+o保存,点回车确认保存,然后ctrl+x退出
②在终端输入以下指令
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
如图:
然后ctrl+o保存,点回车确认保存,然后ctrl+x退出
③使用命令更新软件源列表,同时检查编辑是否正确。再更新软件
sudo apt-get update
sudo apt-get upgrade
1.2 存储空间的一些说明和操作
建议使用32G以上的内存卡
扩大文件系统。因为,用SD卡安装完系统后一大部分空间实际是未被分配的
使用命令
sudo raspi-config
然后选择第七个
然后选择第一个回车,最后按esc退出
1.3 增加交换空间
增加交换空间以避免因内存问题导致的编译挂起
输入命令
sudo nano /etc/dphys-swapfile
将 CONF_SWAPSIZE 值从默认值更改 100 为 1024 :
如图
然后ctrl+o保存,点回车确认保存,然后ctrl+x退出,并运行以下命令以使更改生效:
sudo /etc/init.d/dphys-swapfile restart
1.4 下载工具及包
①安装OpenCV的相关工具
sudo apt install build-essential cmake git pkg-config libgtk-3-dev libcanberra-gtk*
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev
sudo apt install libjpeg-dev libpng-dev libtiff-dev gfortran openexr libatlas-base-dev opencl-headers
sudo apt install python3-dev python3-numpy libtbb2 libtbb-dev libdc1394-22-dev
②创建一个新目录并从 Github 克隆 OpenCV 和 OpenCV contrib 存储库:
mkdir ~/opencv_build && cd ~/opencv_build
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
因为Github服务器不在国内,并且不支持断点续传,如果失败,可以多试几次。
克隆存储库后,创建一个临时构建目录,然后切换到该目录:
mkdir -p ~/opencv_build/opencv/build
cd ~/opencv_build/opencv/build
1.5 设置编译编译参数
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D ENABLE_NEON=ON \
-D ENABLE_VFPV3=ON \
-D BUILD_TESTS=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
-D BUILD_EXAMPLES=OFF ..
“\” 代表将代码延续到下一行
输出结果如下所示:
...
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/opencv_build/opencv/build
1.6 开始编译
运行
make -j4
过程较长,耐心等待。
编译结束了会出现下面这个结果
...
[100%] Linking CXX shared module ../../lib/python3/cv2.cpython-35m-arm-linux-gnueabihf.so
[100%] Built target opencv_python3
成功后安装已编译的 OpenCV 文件:
sudo make install
时间很快,结果如下
...
-- Installing: /usr/local/bin/opencv_version
-- Set runtime path of "/usr/local/bin/opencv_version" to "/usr/local/lib"
最后检查opencv安装成功与否
C++库:
pkg-config --modversion opencv4
结果:
4.1.1
(只要不报错,就问题不大)
Python库:
python3 -c "import cv2; print(cv2.__version__)"
结果:
4.1.1-pre
如果 SD 卡上没有足够的可用空间,请删除源文件:
rm -rf ~/opencv_build
大量交换使用可能会损坏您的 SD 卡。将交换空间更改回原始大小:
sudo nano /etc/dphys-swapfile
将 CONF_SWAPSIZE 值改回 100
保存文件并激活更改:
sudo /etc/init.d/dphys-swapfile restart
完成。
2. 树莓派实现目标检测识别
2.1 安装TensorFlow1.14.0
首先,安装matplotlib库
sudo pip install matplotlib
接着,安装一下编译环境
sudo apt-get install python3-pip python3-dev
sudo apt install libatlas-base-dev
最后,直接安装TensorFlow
sudo pip3 install TensorFlow
2.2 API下载
直接进行git.
git clone https://github.com/tensorflow/models.git
2.3 ssd_mobilenet_v1_coco下载
模型链接:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md
首先进入目录
cd models/research/object_detection/models
然后将ssd_mobilenet_v1_coco模型下载下来
wget download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_2018_01_28.tar.gz
接着进行解压
tar -xzvf ssd_mobilenet_v1_coco_2018_01_28.tar.gz
2.4 Protobuf 安装与配置
(1)下载
protobuf下载地址:https://github.com/google/protobuf/releases
我直接下载的最新版本:protobuf-all-3.11.2.tar.gz
cd
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.11.2/protobuf-all-3.11.2.tar.gz
(2)安装
tar -xf protobuf-all-3.11.2.tar.gz ->解压
cd protobuf-3.11.2 ->进入该文件夹
./configure ->执行
make ->时间有点长
make check ->这一步是检查编译是否正确,耗时非常长
如果出现如下结果,可以看到所有的测试用例都PASS了,说明编译正确:
sudo make install
sudo ldconfig ->更新库搜索路径,否则可能找不到库文件
(3)配置
配置的目的是将proto格式的数据转换为python格式,从而可以在python脚本中调用,进入目录models-master/research,运行:
cd
cd models/research
protoc object_detection/protos/*.proto --python_out=.
2.5 测试
测试代码文件链接:https://pan.baidu.com/s/1jGnOF1s1UAvMTV4w6JW_YQ
提取码:9p2m
(FileZilla下载可以直接百度,连接时树莓派和电脑连接同一个WiFi,主机填写树莓派IP地址,在终端输入ifconfig可直接查询,原始密码是:raspberry)
将测试代码放入models/research/object_detection/models目录中
进入终端,输入下列命令
cd models/research/object_detection/models
sudo chmod 666 /dev/video0 ->要保证摄像头插紧了,不然会报错
python3 test.py
等一会,接着会出现检测对话框,效果如图。