前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TensorFlow,Raspberry Pi和Pan-Tilt HAT实时对象跟踪

TensorFlow,Raspberry Pi和Pan-Tilt HAT实时对象跟踪

作者头像
代码医生工作室
发布2019-12-19 11:54:19
2.4K0
发布2019-12-19 11:54:19
举报
文章被收录于专栏:相约机器人相约机器人

作者 | Leigh Johnson

来源 | Medium

编辑 | 代码医生团队

第1部分-简介

创建了rpi-deep-pantilt 作为野外目标检测的交互式演示。

https://github.com/leigh-johnson/rpi-deep-pantilt

将在下面展示如何重现视频,该视频描绘了摄像机平移和倾斜以跟踪在整个房间中的运动。

将介绍以下内容:

  1. 制作材料和硬件组装说明。
  2. 将TensorFlow Lite对象检测模型(MobileNetV3-SSD)部署到Raspberry Pi。
  3. 使用比例积分微分控制器(PID)控制器向平移/倾斜伺服电机发送跟踪指令。
  4. 使用Coral的USB Edge TPU加速器和Edge TPU编译器加速任何TensorFlow Lite模型的推断。

边缘TPU:张量处理单元(TPU)是用于加速 TensorFlow执行的计算的集成电路。该边缘TPU与小尺寸发展,为移动和嵌入式设备“边缘”

在Google Cloud Next '18上存储TPUv1,TPUv2(上,中)。云TPU加快了TensorFlow模型的训练和推理。边缘TPU以美分计(下)。边缘TPU加快了移动设备中的推理速度。

第2部分-生成清单

必要

  • Raspberry Pi 4(建议4GB)
  • Raspberry Pi相机V2
  • Pimoroni倾斜式HAT套件
  • Micro SD卡16+ GB
  • Micro HDMI线

可选的

  • 12" CSI / DSI色带为树莓裨相机。
  • 该裨相机的库存电缆太短泛倾斜HAT的整个运动范围。
  • RGB NeoPixel Stick
  • 此组件为项目添加了一致的光源。
  • Coral Edge TPU USB加速器可
  • 加快Raspberry Pi的推理(预测)速度。不需要此来复制演示。

第3部分-Raspberry Pi安装

可以通过两种方式将Raspbian安装到Micro SD卡上:

  1. NOOBS(全新的即用型软件)是GUI操作系统的安装管理器。如果这是第一个Raspberry Pi项目,建议从这里开始。
  2. 将Raspbian映像写入SD卡。

本教程和支持软件是使用R aspbian(Buster)编写的。如果使用的是其他版本的Raspbian或其他平台,则可能会遇到一些麻烦。

在继续之前,需要:

  • 将Pi连接到互联网

https://projects.raspberrypi.org/en/projects/raspberry-pi-using/4

  • 通过SSH进入Raspberry Pi

https://www.raspberrypi.org/documentation/remote-access/ssh/

第4部分-软件安装

1.安装系统依赖项

代码语言:javascript
复制
$ sudo apt-get update && sudo apt-get install -y python3-dev libjpeg-dev libatlas-base-dev raspi-gpio libhdf5-dev python3-smbus

2.创建一个新的项目目录

代码语言:javascript
复制
$ mkdir rpi-deep-pantilt && cd rpi-deep-pantilt

3.创建一个新的虚拟环境

代码语言:javascript
复制
$ python3 -m venv .venv

4.激活虚拟环境

代码语言:javascript
复制
$ source .venv/bin/activate && python3 -m pip install --upgrade pip

5.安装rpi-deep-pantilt Python软件包

代码语言:javascript
复制
$ python3 -m pip install rpi-deep-pantilt

第5部分-Pan Tilt HAT硬件组装

如果购买了预组装的 Pan-Tilt HAT套件,则可以跳至下一部分。

否则,请在继续之前按照组装Pan-Tilt HAT中的步骤进行操作。

https://learn.pimoroni.com/tutorial/sandyj/assembling-pan-tilt-hat

第6部分-连接Pi相机

  1. 关闭Raspberry Pi
  2. 在USB模块和HDMI模块之间找到相机模块。
  3. 向上(轻轻)拉动以解锁黑色塑料夹
  4. 插入相机模块带状电缆(金属连接器背向 Raspberry Pi 4上的以太网/ USB端口)
  5. 锁定黑色塑料夹

图片来源:Pi相机入门

第7部分-启用Pi相机

1.开启Raspberry Pi

2.运行sudo raspi-config并Interfacing Options从Raspberry Pi软件配置工具的主菜单中选择。按ENTER。

3.选择Enable Camera菜单选项,然后按Enter。

4.在下一个菜单中,使用右箭头键突出显示ENABLE并按ENTER。

第8部分-测试Pan Tilt HAT

接下来,测试Pan-Tilt HAT模块的安装和设置。

1.SSH进入Raspberry Pi

2.激活虚拟环境:

代码语言:javascript
复制
source .venv/bin/activate

3.运行以下命令:

代码语言:javascript
复制
rpi-deep-pantilt test pantilt

4.使用Ctrl + C退出测试

如果正确安装了HAT,则应该在测试运行时看到两个伺服器均以平滑的正弦曲线运动。

第9部分-测试Pi相机

接下来,通过启动相机的预览图来验证Pi相机是否已正确安装。叠加层将在Pi的主显示屏(HDMI)上呈现。

1.将Raspberry Pi插入HDMI屏幕

2.SSH进入Raspberry Pi

3.激活虚拟环境:

代码语言:javascript
复制
$ source .venv/bin/activate

4.运行以下命令:

代码语言:javascript
复制
$ rpi-deep-pantilt detect

5.使用Ctrl + C退出测试

如果正确安装了Pi摄像机,则应该可以看到从摄像机渲染到HDMI或复合显示器的画面。

第10部分—测试对象检测

接下来,验证可以在Raspberry Pi上运行对象检测模型(MobileNetV3-SSD)。

1.SSH进入Raspberry Pi

2.激活虚拟环境:

代码语言:javascript
复制
$ source .venv/bin/activate

3.运行以下命令:

代码语言:javascript
复制
$ rpi-deep-pantilt detection

Raspberry Pi应该检测对象,尝试对对象进行分类,并在其周围绘制边框。

注意:使用默认的MobileNetV3-SSD模型只能检测和跟踪以下对象。

$ rpi-deep-pantilt list-labels

[‘person’, ‘bicycle’, ‘car’, ‘motorcycle’, ‘airplane’, ‘bus’, ‘train’, ‘truck’, ‘boat’, ‘traffic light’, ‘fire hydrant’, ‘stop sign’, ‘parking meter’, ‘bench’, ‘bird’, ‘cat’, ‘dog’, ‘horse’, ‘sheep’, ‘cow’, ‘elephant’, ‘bear’, ‘zebra’, ‘giraffe’, ‘backpack’, ‘umbrella’, ‘handbag’, ‘tie’, ‘suitcase’, ‘frisbee’, ‘skis’, ‘snowboard’, ‘sports ball’, ‘kite’, ‘baseball bat’, ‘baseball glove’, ‘skateboard’, ‘surfboard’, ‘tennis racket’, ‘bottle’, ‘wine glass’, ‘cup’, ‘fork’, ‘knife’, ‘spoon’, ‘bowl’, ‘banana’, ‘apple’, ‘sandwich’, ‘orange’, ‘broccoli’, ‘carrot’, ‘hot dog’, ‘pizza’, ‘donut’, ‘cake’, ‘chair’, ‘couch’, ‘potted plant’, ‘bed’, ‘dining table’, ‘toilet’, ‘tv’, ‘laptop’, ‘mouse’, ‘remote’, ‘keyboard’, ‘cell phone’, ‘microwave’, ‘oven’, ‘toaster’, ‘sink’, ‘refrigerator’, ‘book’, ‘clock’, ‘vase’, ‘scissors’, ‘teddy bear’, ‘hair drier’, ‘toothbrush’]

第11部分-以约8 FPS的速度跟踪对象

这是大家一直在等待的时刻!采取以下步骤,使用Pan-Tilt HAT以大约8帧/秒的速度跟踪对象。

1.SSH进入Raspberry Pi

2.激活虚拟环境:

代码语言:javascript
复制
$source .venv/bin/activate

3.运行以下命令:

代码语言:javascript
复制
$ rpi-deep-pantilt track

默认情况下,这将跟踪带有标签的对象person。可以使用--label参数跟踪其他类型的对象。

例如,要跟踪香蕉,可以运行:

代码语言:javascript
复制
$ rpi-deep-pantilt track --label=banana

在Raspberry Pi 4(4 GB)上,以大约每秒8帧的速度对模型进行基准测试。

代码语言:javascript
复制
INFO:root:FPS: 8.100870481091935
INFO:root:FPS: 8.130448201926173
INFO:root:FPS: 7.6518234817241355
INFO:root:FPS: 7.657477766009717
INFO:root:FPS: 7.861758172395542
INFO:root:FPS: 7.8549541944597
INFO:root:FPS: 7.907857699044301

第12部分-使用Edge TPU实时跟踪对象

可以使用Coral的USB Accelerator加快模型推断的速度。USB加速器包含Edge TPU,这是专用于TensorFlow Lite操作的ASIC芯片。有关更多信息,请查看USB Accelerator入门。

https://coral.ai/docs/accelerator/get-started/

1.SSH进入Raspberry Pi

2.安装Edge TPU运行时

代码语言:javascript
复制
$ echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
 
$ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
 
$ sudo apt-get update && sudo apt-get install libedgetpu1-std

3.插入Edge TPU(最好使用USB 3.0端口)。如果Edge TPU已经插入,请删除并重新插入,以便udev设备管理器可以检测到它。

4.尝试使用带有选项的detect命令--edge-tpu。应该能够实时检测物体!

代码语言:javascript
复制
$ rpi-deep-pantilt detect --edge-tpu --loglevel=INFO

注意:loglevel=INFO 将显示检测对象的FPS,并将边界框渲染到Raspberry Pi Camera的叠加层。

应该会看到大约24 FPS,这是从Pi Camera采样帧到帧缓冲区的速率。

代码语言:javascript
复制
INFO:root:FPS: 24.716493958392558
INFO:root:FPS: 24.836166606505206
INFO:root:FPS: 23.031063233367547
INFO:root:FPS: 25.467177106703623
INFO:root:FPS: 27.480438524486594
INFO:root:FPS: 25.41399952505432

5.尝试使用带有--edge-tpu选项的track命令。

代码语言:javascript
复制
$ rpi-deep-pantilt track --edge-tpu

总结

现在是DIY对象跟踪系统的骄傲拥有者,该系统使用单发检测器(一种卷积神经网络)对对象进行分类和定位。

PID控制器

平移/倾斜跟踪系统使用比例积分微分控制器(PID)控制器来平滑跟踪边界框的质心。

PID控制器架构,雷·约翰逊(Leigh Johnson)2019

TensorFlow Model Zoo

本教程中的模型源自TensorFlow Detection Model Zoo中的ssd_mobilenet_v3_small_coco和ssd_mobilenet_edgetpu_coco。

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

模型可以通过Github下载。

https://github.com/leigh-johnson/rpi-deep-pantilt

添加了自定义的TFLite_Detection_PostProcess操作,该操作在模型输出上实现了非最大抑制(NMS)的变体。非最大抑制是一种使用set操作过滤许多边界框建议的技术。

图片来源:非最大抑制(NMS)

特别感谢

  • MobileNetEdgeTPU SSDLite贡献者:熊云阳,陈博,Suyog Gupta,刘汉晓,Gabriel Bender,谭明兴,Berkin Akin,陆志超,Quoc Le。
  • MobileNetV3 SSDLite贡献者:陈波,陆志超,维维克·拉索德,黄乔纳。
  • 特别感谢Adrian Rosebrock 用Raspberry Pi和OpenCV编写平移/倾斜面部跟踪,这是整个项目的灵感!

https://www.pyimagesearch.com/2019/04/01/pan-tilt-face-tracking-with-a-raspberry-pi-and-opencv/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 相约机器人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档