4.9. 示例-目标跟踪
此示例展示了利用depthai实现目标跟踪,通过云台将检测目标始终置于图像中央。
4.9.1. 演示
4.9.2. 示例源码代码
目标跟踪源代码可以在 GitHub 代码仓库中获取。国内用户也可以在 gitee 上获取。
请参考README运行程序.
4.9.3. 硬件设备
depthai
树莓派
云台
4.9.4. 模型介绍
此示例只使用了一个模型,如下:
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”
4.9.5. 实现重点
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算法公式如下:
比例控制 :按比例减小偏差值,单一的比例控制会造成稳态误差。
积分控制 :引入积分控制的目的便是消除稳态误差。但是积分增益过大就会超调,从而使系统不稳定。而过小又难以消除稳态误差。
微分控制 :控制系统在克服误差的过程中有可能出现震荡现象。这是由于惯性的存在或有滞后可抑制误差,但是它的变化总是落后于误差的变化。微分控制就是解决误差变化总是超前的问题。
4. 控制云台
将经过PID调整的误差距离传入控制云台方法中,使云台跟随目标转动。
4.9.6. 效果演示
有疑问?
我们很乐意为您提供代码或其他问题的帮助。
我们的联系方式
还可以通过我们发布的视频和文章了解OAK