示例-目标跟踪

此示例展示了利用depthai实现目标跟踪,通过云台将检测目标始终置于图像中央。

演示


示例源码代码

目标跟踪源代码可以在 GitHub 代码仓库中获取。国内用户也可以在 gitee 上获取。

请参考README运行程序.

硬件设备

  1. depthai

  2. 树莓派

  3. 云台

traker

模型介绍

此示例只使用了一个模型,如下:

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算法公式如下:

pid

比例控制 :按比例减小偏差值,单一的比例控制会造成稳态误差。

积分控制 :引入积分控制的目的便是消除稳态误差。但是积分增益过大就会超调,从而使系统不稳定。而过小又难以消除稳态误差。

微分控制 :控制系统在克服误差的过程中有可能出现震荡现象。这是由于惯性的存在或有滞后可抑制误差,但是它的变化总是落后于误差的变化。微分控制就是解决误差变化总是超前的问题。

4. 控制云台

将经过PID调整的误差距离传入控制云台方法中,使云台跟随目标转动。

效果演示

traker

有疑问?

我们很乐意为您提供代码或其他问题的帮助。