基于YOLOv5和opencv的视频遗留物品检测
github仓库:https://github.com/gamblerInCoding/LegacyItems/
业务逻辑
需要我们定义定义人和物品的关系,和时间线上的一个关系,比如某个物品是某个同学拿着的,之后放到桌子上,在物品在人周围就不是遗留物,当人和物品分开一定时间后判断为遗留物品。这个业务逻辑需要我们同时满足时间阈值和距离阈值两个不同的条件。满足两个条件的物品才能算遗留物品。
推理脚本编写核心思路
对于该课题,我们之前已经理清了业务逻辑需求。需要我们定义定义人和物品的关系,和时间线上的一个关系,比如某个物品是某个同学拿着的,之后放到桌子上,在物品在人周围就不是遗留物,当人和物品分开一定时间后判断为遗留物品。这个业务逻辑需要我们同时满足时间阈值和距离阈值两个不同的条件。满足两个条件的物品才能算遗留物品。
我们可以发现该业务逻辑中透露出了两个关键的信息,距离阈值判断我们只需要处理同一帧内部的图像,而时间阈值判断需要我们处理不同帧之间的图像,不同帧之间需要我们判断处理对应的逻辑关系。所以本算法模型的总体设计是先通过opencv将输入的图像数据分帧读取,然后通过加载的物品模型,和人模型进行对应的算法模型识别,不同帧之间还有;逻辑关系需要保持。然后把处理好的每一帧图像通过opencv再合帧合在一起输出到结果视频文件里面。其算法的核心流程图如下图所示。
距离阈值
我们实际上在真实场景中检测遗留物应用更多的是视频监控,而视频流的基础是一张张图片,因此我们需要先设计对图片中的遗留物进行检测的检测算法,这个时候我们因为是对一张静态图片做检测,而不是对一个视频流数据做检测,我们手头上只有一张一张静态的图片,我们必须得对一张一张图片做静态的目标检测。在目标检测领域中最常用而且效果最好的就是YOLOv5算法,YOLOv5算法在之前已经介绍过了,就不再重复介绍了。对于静态的图片我们划分判别遗留物和非遗留物的标准是在图片上判断识别出来的人和物品对应的box距离是否保持在一个阈值之内,如果box间的距离没有保持在一个阈值之内就把它认定为非遗留物品,如果box间的距离保持在一个阈值内就把它认定为遗留物品,其模型的判别流程如下所示。如上图所示,当c>a+b时,即可以认为人和书包是分离的,可以认定是遗留物品。这就是距离阈值的判断条件。
时间阈值
何谓遗留物品,比如某个物品是某个同学拿着的,之后放到桌子上,在物品在人周围就不是遗留物,当人和物品分开一定时间后判断为遗留物品。我们知道物品在人周围指的是距离阈值条件,而除了单单距离阈值条件之外,我们还应该要实现分开一段时间这个时间阈值条件。我们如何实现判断这个时间阈值条件呢,我们可以把整张图像抽象成二维化的数组,通过借助哈希算法和前缀和算法的思想,当某一个点识别出来了,数组对应的二维变量增一,代表记录着该时刻,我们在这个位置识别出来有对应的遗留物品了,如果联系的在一段时间内都保持着增一的趋势,说明该点识别出来对应的物品满足遗留物品的条件。其流程如下图所示。