该项目基于人员检测和跟踪,我主要关注人员跟踪。如 README.md 或 output.mp4 中的输出 gif 所示,每个人一进入帧就会获得一个id
,并且无论并发帧中是否发生检测,该id
都会被保留。只要他留在画面中,算法就会进行人员检测并跟踪他。
Person_det_track.py 使用 SSD 和卡尔曼滤波器检测和跟踪人员
请尝试尽可能坚持使用提供的版本,否则您将面临兼容性问题。我在编码期间使用了可能的最佳组合。
opencv [v3.1]
张量流 [v1.5.0]
这里提出的方法分为两个主要部分
人员检测 - 实时人员检测是在 Single Shot MultiBox Detector 的帮助下完成的。 SSD 实现了 75.1% mAP,优于同类最先进的 Faster R-CNN 模型。 SSD模型在Tensorflow检测动物园中可用。 SSD与TensorFlow的无缝集成有助于算法的进一步优化和实现。 SSD 对象检测由 2 部分组成:
人员跟踪 - 通过在每一帧中运行对象检测模型,可以在对象/人员周围实现边界框,但这在计算上是昂贵的。这里使用的跟踪算法是卡尔曼滤波。卡尔曼滤波器长期以来被认为是许多跟踪和数据预测任务的最佳解决方案。它在视觉运动分析中的应用。过滤的目的是从信号中提取所需的信息,忽略其他所有信息。在这个项目中,卡尔曼滤波器接收到人的速度、位置和方向,这有助于它根据人之前的数据预测人的未来位置。
跟踪部分在遮挡时仍然面临一些问题。 (正在努力)
该系统由两部分组成,第一部分是人体检测,第二部分是跟踪。早期的研究偏向于人类识别而不是跟踪。监视人类的活动提出了跟踪的需求。监测运动对于确定一个人的活动和一个人的注意力非常重要。
降低计算能力要求 - 普通的对象检测算法会检测对象,但不会跨帧跟踪(分配 Id)对象;因此必须在每一帧中运行才能获得边界框。跟踪将有助于减少必须运行检测算法的次数,即,该实现每 5 帧运行一次检测,而不是每帧运行一次检测算法。
对象检测模型失败补偿 - 在某些姿势中 SSD 可能无法检测到人。即使遮挡也会显着影响探测器;这就是跟踪算法可以为我们提供很大帮助的地方。
身份检索 - 人类跟踪可以用作生物识别人脸识别的先前步骤。持续跟踪一个人可以随时识别一个人的身份。即使在特定的一组帧中无法进行面部识别,也可以通过跟踪发现他的身份。作者:尼拉吉·梅农