树莓派安装Tensorflow并利用SSDLite-MobileNet实现object detection小白教程

树莓派安装Tensorflow并利用SSDLite-MobileNet实现object detection小白教程

简介

对象检测是机器视觉领域最常用的功能之一,即对探测的目标分辨出是何物,本教程使用当前最常用的单片机树莓派3B+,设置安装tensorflow并实现利用较小的神经网络SSDLite-MobileNet进行识物。

本教程参考了国外一个大神的GitHub,并对其中的相关错误进行纠正以及补充,主要工作有利用虚拟环境实现更好的python环境管理,纠正相关错误。这篇教程适合深度学习初学者,通过这篇教程,你将实现tensorflow的安装、opencv的安装、虚拟环境的使用、深度网络的调用与使用,最终实现让你的树莓派实现辨物的智慧。

树莓派安装Tensorflow并利用SSDLite-MobileNet实现object detection效果

情按照一下教程步骤实现,如不意外时间约为半天。update(2020.5.12)

  1. 更新你的树莓派(pi3B+/4B)
  2. 安装虚拟环境
  3. 安装tensorflow以及opencv
  4. 编译安装protobuf以及设置PYTHONPATH变量
  5. 对象检测!

步骤

0. 更新你的树莓派(pi3B+/4B)

首先,Raspberry Pi需要完全更新。打开终端并发出:

sudo apt-get update
sudo apt-get upgrade

根据您更新Pi的时间长短,升级可能需要一分钟到一个小时。
树莓派安装Tensorflow并利用SSDLite-MobileNet实现object detection小白教程_第1张图片

1. 安装虚拟环境

在您的主目录,创建一个名为“ tensorflow”的目录,并将其cd进入。

mkdir tensorflow
cd tensorflow1

通过git clone命令从GitHub下载tensorflow存储库:

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

本指南的其余部分将在此/ home / pi / tensorflow目录中工作。下一步是创建一个称为“ tf-env”的虚拟环境。

在本指南中使用的是虚拟环境,因为它可以防止您的Pi上已经安装的软件包库版本之间发生任何冲突。将其安装在自己的环境中可以避免此问题。

通过发出以下命令安装virtualenv:

sudo pip3 install virtualenv

然后,通过发出以下命令来创建“ tf-env”虚拟环境:

python3 -m venv tf-env

这将在tensorflow目录中创建一个名为tf-env的文件夹。tf-env文件夹将包含此环境的所有软件包库。接下来,通过发出以下命令激活环境:

source tf-env/bin/activate

每次打开新的终端或者重启工作时需要重新激活环境,需要在/ home / pi / tensorflow目录中发出上述命令。
树莓派安装Tensorflow并利用SSDLite-MobileNet实现object detection小白教程_第2张图片

2. 安装tensorflow以及opencv

按照原教程走下来会有几个bug,经过多次实践已经一一排除,为了简化操作,我仿照EdjeElectronics的GitHub编写了一个Shell脚本,该脚本将自动下载并安装所有软件包和依赖项。
首先需要下载bash文件

git clone https://github.com/xxlbigbrother/TensorFlow-Object-Detection-on-Raspberry-Pi-Embedded-Visual-Hardware.git

打开文件夹复制tf_get_pi_requirements.sh以及Object_detection_picamera.py到/home/pi/tensorflow/models/research/object_detection目录下。

通过发出以下命令运行bash文件自动安装tensorflow以及opencv:

bash tf_get_pi_requirements.sh

或者逐行运行下列命令行

#!/bin/bash

# 安装tensorflow(1.下载tensorflow 2.安装LibAtlas软件包3~7.安装依赖项)

pip3 install tensorflow
sudo apt-get install libatlas-base-dev
sudo pip3 install pillow
sudo pip3 install  lxml 
sudo pip3 install  jupyter
sudo pip3 install matplotlib
sudo pip3 install cython

#相比于原教程需分开安装,防止漏掉安装pillow以及matplotlib

# 安装opencv(先安装依赖项,这里需要安装老版本3.4.6.27,因为版本4有错误不兼容,import cv2报错)
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install qt4-dev-tools libatlas-base-dev

pip3 install opencv-python==3.4.6.27 

将下载超过200M的文件,需要一段时间,如果运行bash tf_get_pi_requirements.sh命令时遇到错误,则可能是由于Internet连接超时或下载的软件包数据已损坏。如果出现错误,请尝试重新运行该命令几次。

这里温馨提示:深夜或者大清晨下载速度较快,达到20~30k/s.
树莓派安装Tensorflow并利用SSDLite-MobileNet实现object detection小白教程_第3张图片

3. 编译安装protobuf以及设置PYTHONPATH变量

TensorFlow对象检测API使用Protobuf,这是一个实现Google协议缓冲区数据格式的软件包。您以前需要从源代码进行编译,但是现在安装很简单!

sudo apt-get install protobuf-compiler

完成后通过下述命令验证其是否安装成功。您应该得到libprotoc 3.6.1或类似的答复。

protoc --version

接下来,我们需要修改PYTHONPATH环境变量以指向刚下载的TensorFlow信息库内的某些目录。我们希望每次打开终端时都设置PYTHONPATH,因此我们必须修改的.bashrc文件。通过发出以下命令打开它:

sudo nano ~/.bashrc

移至文件末尾,并在最后一行添加:

export PYTHONPATH=$PYTHONPATH:/home/pi/tensorflow1/models/research:/home/pi/tensorflow1/models/research/slim

树莓派安装Tensorflow并利用SSDLite-MobileNet实现object detection小白教程_第4张图片

然后,保存并退出文件。这样一来,每次您打开新终端时都会调用“ export PYTHONPATH”命令,因此将始终正确设置PYTHONPATH变量。关闭,然后重新打开终端。
现在,我们需要使用Protoc来编译对象检测API使用的协议协议(.proto)文件。.proto文件放在/ research / object_detection / protos中,但是我们需要从/ research目录执行命令。执行以下命令:

cd /home/pi/tensorflow1/models/research
protoc object_detection/protos/*.proto --python_out=.

此命令将所有“名称” .proto文件转换为“ name_pb2” .py文件。接下来,进入object_detection目录:

cd /home/pi/tensorflow1/models/research/object_detection

现在,我们将从TensorFlow检测模型库中下载SSD_Lite模型。模型动物园是谷歌的预训练对象检测模型的集合,这些模型具有不同水平的速度和准确性。树莓派的处理器较弱,因此我们需要使用处理能力较小的模型。尽管该模型将运行得更快,但要以降低精度为代价。在本教程中,我们将使用SSDLite-MobileNet,这是最快的模型。
Google不断发布具有改进速度和性能的模型,经常回访模型库,看看是否有更好的模型。
下载SSDLite-MobileNet模型并通过发出以下命令解压缩:

wget http://download.tensorflow.org/models/object_detection/ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz
tar -xzvf ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz

现在,该模型位于object_detection目录中,可以使用了。

4. 检测物体!

好的,现在一切就绪,可以在Pi上执行对象检测!此存储库中的Python脚本Object_detection_picamera.py用于检测来自Picamera或USB网络摄像头的实时供稿中的对象。基本上,脚本会设置模型和标签映射的路径,将模型加载到内存中,初始化Picamera,然后开始对Picamera中的每个视频帧执行对象检测。

  • 如果您使用的是Picamera,请确保在Raspberry Pi配置菜单中将其启用。
    树莓派安装Tensorflow并利用SSDLite-MobileNet实现object detection小白教程_第5张图片
    在/object_detection目录下发出命令
python Object_detection_picamera.py 
  • 若你使用的是USB摄像头,则在上述命令添加–usbcam
python3 Object_detection_picamera.py --usbcam

脚本初始化后(最多可能需要30秒),您将看到一个窗口,显示相机实时取景。视图内的公共对象将被识别并在其周围绘制一个矩形。

注意事项:

  • 判断tensorflow是否安装成功,在tf-env虚拟环境下输入:
python
import tensorflow as tf

若无报错,即安装成功,若错误,请重新运行bash脚本,可能是下载时间过长断开。

  • 判断opencv是否安装成功,在tf-env虚拟环境下输入:
python
import cv2

若无显示导入cv2错误,即安装成功,若错误,请重新运行bash脚本,可能是下载时间过长断开。

该教程识别帧率过低,在0.8帧左右,建议在树莓派使用tensorflowlite以及corel tpu加速器,帧率较高。
树莓派安装Tensorflow并利用SSDLite-MobileNet实现object detection小白教程_第6张图片

博主会录制一期帧率以及效果对比视频,欢迎关注!

你可能感兴趣的:(树莓派,tensorflow,目标检测,人工智能)