raspberry pi_使用TensorFlow和Raspberry Pi创建实时物体跟踪摄像机

raspberry pi

您是否刚刚开始使用机器/深度学习,TensorFlow或Raspberry Pi?

我创建了rpi-deep-pantilt作为野外物体检测的交互式演示,在本文中,我将向您展示如何重现下面的视频,该视频描绘了摄像机的平移和倾斜以跟踪我在整个房间的运动。

Real-time tracking setup

Raspberry Pi 4GB,Pi Camera v2.1,Pimoroni Pan-Tilt HAT,Coral Edge TPU USB加速器

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

条款和参考

  • Raspberry Pi一种小型,价格合理的计算机,深受教育者,硬件爱好者和机器人爱好者的欢迎。
  • Raspbian Raspberry Pi基金会的Pi官方操作系统。 Raspbian源自Debian Linux。
  • TensorFlow 用于数据流编程的开源框架,用于机器学习和深度神经学习。
  • TensorFlow Lite 一个开放源代码框架,用于在移动和嵌入式设备上部署TensorFlow模型。
  • 卷积神经网络 CNN是一种神经网络体系结构,非常适合图像分类和目标检测任务。
  • 单发检测器 SSD是一种CNN体系结构,专门用于实时对象检测,分类和边界框定位。
  • MobileNetV3 最先进的计算机视觉模型,针对在适度的手机处理器上的性能进行了优化。
  • MobileNetV3-SSD 基于MobileNet架构的SSD。 本教程将使用TensorFlow的对象检测模型zoo中可用的MobileNetV3-SSD模型。
    Comparison of computer vision neural networks

    计算机视觉神经网络的比较

  • 边缘TPU 张量处理单元(TPU)是用于加速TensorFlow执行的计算的集成电路。 Edge TPU的开发占用空间很小,可用于“边缘”移动和嵌入式设备。
Cloud TPUv1
Cloud TPUv2
Edge TPUs

云TPU(左和中)加速TensorFlow模型训练和推理。 边缘TPU(右)加速了移动设备中的推理。

建立清单

必要

可选的

寻找一个更少动人的项目? 查阅便携式计算机视觉:Raspberry Pi上的TensorFlow 2.0来创建手持式图像分类器。

设置Raspberry Pi

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

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

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

在继续之前,您需要:

安装软件

  1. 安装系统依赖项:
     $  sudo apt-get update && sudo apt-get install -y python3-dev libjpeg-dev libatlas-base-dev raspi-gpio libhdf5-dev python3-smbus 
    
  2. 创建一个新的项目目录:
     $  mkdir rpi-deep-pantilt && cd rpi-deep-pantilt 
    
  3. 创建一个新的虚拟环境:
     $  python3 -m venv .venv 
    
  4. 激活虚拟环境:
     $  source .venv / bin / activate && python3 -m pip install --upgrade pip 
    
  5. 从社区构建的轮子安装TensorFlow 2.0:
     $  pip install https: // github.com / leigh-johnson / Tensorflow-bin / blob / master / tensorflow-2.0.0-cp37-cp37m-linux_armv7l.whl? raw = true 
    
  6. 安装rpi-deep-pantilt Python软件包:
     $  python3 -m pip install rpi-deep-pantilt 
    

组装Pan-Tilt HAT硬件

如果您购买了预组装的Pan-Tilt HAT套件,则可以跳到下一部分。 否则,请在继续之前按照组装Pan-Tilt HAT中的步骤进行操作。

连接Pi相机

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

启用Pi相机

  1. 打开Raspberry Pi。
  2. 运行sudo raspi-config并从Raspberry Pi软件配置工具的主菜单中选择接口选项 。 按Enter键
    Raspberry Pi Software Configuration Tool
  3. 选择“ 启用相机”菜单选项,然后按Enter
    Enable Camera
  4. 在下一个菜单中,使用向右箭头键突出显示“ 启用” ,然后按Enter
    Enable Raspberry Pi Camera

测试Pan-Tilt HAT

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

  1. SSH进入您的Raspberry Pi。
  2. 激活您的虚拟环境:
     source .venv / bin / activate 
    
  3. 跑:
     rpi-deep-pantilt test pantilt 
    
  4. 使用Ctrl + C退出测试。

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

Pan-Tilt HAT in motion

测试Pi相机

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

  1. 将Raspberry Pi插入HDMI屏幕。
  2. SSH进入您的Raspberry Pi。
  3. 激活您的虚拟环境:
     $  source .venv / bin / activate 
    
  4. 跑:
     $  rpi-deep-pantilt test camera 
    
  5. 使用Ctrl + C退出测试。

如果正确安装了Pi摄像机,则应该在HDMI或复合显示器上看到来自摄像机的镜头。

测试对象检测

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

  1. SSH进入您的Raspberry Pi。
  2. 激活您的虚拟环境:
     $  source .venv / bin / activate 
    
  3. 跑:
     $  rpi-deep-pantilt detect 
    

您的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’]

以〜8FPS的速度跟踪对象

这是您一直在等待的时刻! 采取以下步骤,使用Pan-Tilt HAT以大约每秒八帧(FPS)的速度跟踪对象。

  1. SSH进入您的Raspberry Pi。
  2. 激活您的虚拟环境:
     $ source .venv / bin / activate 
    
  3. 跑:
     $  rpi-deep-pantilt track 
    

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

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

 $  rpi-deep-pantilt track --label =banana 

在Raspberry Pi 4(4GB)上,我以大约8FPS为基准对我的模型进行了基准测试。


   
   
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

使用Edge TPU实时跟踪对象

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

  1. SSH进入您的Raspberry Pi。
  2. 安装Edge TPU运行时:
    
         
         
    $ 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. 尝试使用带有--edge-tpu选项的detect命令。 您应该能够实时检测物体!
     $  rpi-deep-pantilt detect --edge-tpu --loglevel =INFO 
    

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

    您应该会看到〜24FPS,这是从Pi Camera采样帧到帧缓冲区的速率:

    
         
         
    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命令:
     $  rpi-deep-pantilt track --edge-tpu 
    

结语

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

PID控制器

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

PID Controller Architecture

TensorFlow模型动物园

本教程中的模型来自TensorFlow检测模型Zoo中的ssd_mobilenet_v3_small_cocossd_mobilenet_edgetpu_coco

我的模型可以通过leigh-johnson / rpi-deep-pantilt中的 GitHub版本说明下载。

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

Non-maximum Suppression (NMS)

特别的感谢和感谢

  • MobileNetEdgeTPU SSDLite贡献者:熊云阳,陈博,Suyog Gupta,刘汉晓,Gabriel Bender,谭明兴,Berkin Akin,陆志超,Quoc Le
  • MobileNetV3 SSDLite贡献者:陈波,卢志超,Vivek Rathod,黄乔纳
  • Adrian Rosebrock 使用Raspberry Pi和OpenCV编写平移/倾斜面部跟踪 ,这是整个项目的灵感
  • Jason Zaman评论了本文和早期发布的候选人

本文最初发布于Towards Data Science Medium渠道,经许可可重复使用。

翻译自: https://opensource.com/article/20/1/object-tracking-camera-raspberry-pi

raspberry pi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值