技能get树莓派上通过Tensorflow实现对象检测

前言


为了实现在树莓派上实现object detection的功能,我fork了一个仓库:https://github.com/yoyojacky/TensorFlowObjectDetectionontheRaspberryPi

并且按照仓库的readme做了一下测试。


2

测试环境


技能get树莓派上通过Tensorflow实现对象检测


3

操作步骤


1. 更新系统及软件

技能get树莓派上通过Tensorflow实现对象检测


如果遭遇报错:

技能get树莓派上通过Tensorflow实现对象检测

执行这条命令:

技能get树莓派上通过Tensorflow实现对象检测


2. 创建TF 的目录

技能get树莓派上通过Tensorflow实现对象检测


实际上官方已经支持树莓派了,https://www.tensorflow.org/install/install_raspbian这里有。我是直接这里下载的:https://github.com/lhelontra/tensorflowonarm/

releases

技能get树莓派上通过Tensorflow实现对象检测

然后安装:


技能get树莓派上通过Tensorflow实现对象检测

然后发现…官方都是骗人的...

技能get树莓派上通过Tensorflow实现对象检测

PiaPia的打脸啊!我~不想吐槽了。。。

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

还好1.13.1 还能支持,暂时先用着。

技能get树莓派上通过Tensorflow实现对象检测

接下来要安装atlasbasedev

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

继续安装依赖:


技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测


3. 安装openCV

安装openCV要先安装一些依赖,而且记得要用aptget update更新。

技能get树莓派上通过Tensorflow实现对象检测


安装opencvpython

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测


4. 编译安装protobuf


这个是最耗费时间的一步应该说,我估计需要很久时间才可以搞定。

先安装编译需要的工具:

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

下载最新的源码,编译安装。


技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

解压并进入源码目录进行预编译,编译和安装

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测


技能get树莓派上通过Tensorflow实现对象检测

让4个CPU都跑满。。。

技能get树莓派上通过Tensorflow实现对象检测

算算时间。现在是16:43

突然想看看温度,然后发现温度真的很感人。。。

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

编译完温度降到54度了

技能get树莓派上通过Tensorflow实现对象检测

安装完成。

接下来是调整一下环境变量。

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

接着继续:

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测


技能get树莓派上通过Tensorflow实现对象检测

然后定义protobuf的变量环境:

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

好了,protobuf已经安装完成了,测试一下。

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

接下来重启一下系统:

技能get树莓派上通过Tensorflow实现对象检测


5. 设置tensorflow目录结构及python路径变量

技能get树莓派上通过Tensorflow实现对象检测

下载Tensorflow模型:

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

需要改动.bashrc,让每次登陆的时候都能够初始化变量。文档末尾加这段话:

技能get树莓派上通过Tensorflow实现对象检测

保存后退出,然后关闭终端重启打开终端,测试变量看在不在,如果不在继续重复上面

的操作,如果ok 了,就继续下面的操作。现在,我们需要使用Protoc来编译Object

Detection API使用的Protocol Buffer(.proto)文件。.proto文件位于/ research /

object_detection / protos中,但我们需要从/ research目录来执行命令。


技能get树莓派上通过Tensorflow实现对象检测

此命令将所有“name”.proto文件转换为“name_pb2”.py文件。接下来,进入

object_detection目录:


技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

我采用别的方法,目标是一样的。

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


6. 检测物体开始

好的,现在一切都设置为在Pi上执行对象检测!此存储库中的Python脚本

Object_detection_picamera.py可检测来自Picamera或USB网络摄像头的实时源中

的对象。基本上,脚本设置模型和标签贴图的路径,将模型加载到内存中,初始化

Picamera,然后开始在Picamera的每个视频帧上执行对象检测。


如果您使用的是Picamera,请确保在Raspberry Pi配置菜单中启用它。

技能get树莓派上通过Tensorflow实现对象检测

通过发出以下命令将Object_detection_picamera.py文件下载到object_detection目录:

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

然后接上摄像头,让我们测试一下。

发现报错:

技能get树莓派上通过Tensorflow实现对象检测

安装一个包试试看:

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

继续尝试:

提示我import .cv2 失败,缺少libqt4test.so, 我查了一下安装了libqtgui4 的包,还是不行,我就重新通过apt安装了python3opencv的包。


技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

继续安装一个软件包:

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

这些都搞定了就开始测试吧:

因为我是远程终端测试,没有图形环境,所以我用了DISPLAY=:0.0 指定了显示的桌面

环境,直接在终端执行命令,然后显示在屏幕上,效果非常不错哦。不过要确认一下,

你所在的工作目录是:

~/tensorflow1/models/research/object_detection/

执行的命令是:

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

技能get树莓派上通过Tensorflow实现对象检测

我测试树莓派4B的4GB版本,在没有做任何优化的情况下可以达到2帧每秒…..真是慢啊

技能get树莓派上通过Tensorflow实现对象检测

不过识别还是不错的,就是对象检测已经成型,可以检测到物体,并且提供可信度的信

息。

后面就可以通过这些做一些扩展性的应用了。


英国疫情越来越严重,趁着树莓派价格还如此优惠的时候,创客精神走一波—生命在于折腾!!!


分享到:


相關文章: