示例-目标跟踪
=====================
此示例展示了利用depthai实现目标跟踪,通过云台将检测目标始终置于图像中央。
演示
#######
.. raw:: html
示例源码代码
#####################
目标跟踪源代码可以在 `GitHub `_ 代码仓库中获取。国内用户也可以在 `gitee `_ 上获取。
请参考README运行程序.
硬件设备
##############
1. depthai
2. 树莓派
3. 云台
.. image:: /_static/images/samples/traker.jpg
:alt: traker
:height: 640px
:width: 480px
:align: center
模型介绍
############
此示例只使用了一个模型,如下:
.. list-table::
* - mobilenet-ssd_openvino_2021.2_6shave.blob
-
mobilenet模型一共可以检测15种目标类型。如下所示:
"background", "aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow","diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"
实现重点
##################
1. 给检测到的目标指定ID
*************************
创建ObjectTracker节点。该节点拥有以下方法:
============================================= ====================
方法名 作用
============================================= ====================
setDetectionLabelsToTrack(self, labels) 指定要跟踪的检测标签。
setMaxObjectsToTrack(self, maxObjectsToTrack) 指定要跟踪的最大对象数。
setTrackerIdAssigmentPolicy(self, type) 指定跟踪器ID分配策略。
setTrackerThreshold(self, threshold) 指定跟踪器阈值。
setTrackerType(self, type) 指定跟踪器类型算法。
============================================= ====================
- 使用setDetectionLabelsToTrack方法指定我们要跟踪的目标类型。
- 使用setTrackerIdAssigmentPolicy方法给检测到的目标分配ID的方法。
- 通过选择ID,指定跟踪对象。
2. 计算偏差距离
************************
模型输出目标检测框四点坐标。
利用左上角和右下角坐标计算检测框中心点,并计算与图像中心点偏差距离。
3. PID控制算法
****************
通过测试会发现直接偏差距离传给云台,会造成云台移动过快,从而丢失目标。而且云台自身转动也会产生惯性,造成无法在正确的位置停止。所以我们引入PID控制算法对偏差距离进行有效的调整。
PID算法实际上是三种反馈控制:比例控制,积分控制与微分控制的统称。
PID算法公式如下:
.. image:: /_static/images/samples/pid.png
:alt: pid
:align: center
**比例控制** :按比例减小偏差值,单一的比例控制会造成稳态误差。
**积分控制** :引入积分控制的目的便是消除稳态误差。但是积分增益过大就会超调,从而使系统不稳定。而过小又难以消除稳态误差。
**微分控制** :控制系统在克服误差的过程中有可能出现震荡现象。这是由于惯性的存在或有滞后可抑制误差,但是它的变化总是落后于误差的变化。微分控制就是解决误差变化总是超前的问题。
4. 控制云台
***************
将经过PID调整的误差距离传入控制云台方法中,使云台跟随目标转动。
效果演示
###################
.. image:: /_static/images/samples/traker.gif
:alt: traker
:align: center
.. include:: /pages/includes/footer-short.rst