基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景)、计数(交通类应用场景、安防类应用场景)以及行为检测(交通类应用场景、安防类应用场景)。我会写三篇文章依次介绍这三个主题。

(1)目标跟踪之速度计算

(2)目标跟踪之计数

(3)目标跟踪之行为检测

至此,三个主题都结束了。

本篇文章以交通类应用场景为例,介绍车辆异常行为分析方法。车辆异常行为通常又称“车辆异常交通事件”,指车辆在行驶道路上出现的违法行为,一般包括 停车、逆行(倒车)、占用应急车道、拥堵等等。本篇文章分别介绍这四种车辆异常交通事件的分析方法。

注意:高速交通中,通常异常交通事件还包括行人闯入、抛洒物、烟火等,由于这些跟车辆没有直接关联,本文不涉及此类事件。

定位目标轨迹点

前面系列文章已经提到过,目标检测算法会输出目标的位置,一个四元组(Left、Top、Width、Height),代表一个矩形框,该矩形框住的范围就是图像中目标的位置。我们在进行目标行为分析时,需要先找到一个二维点(X,Y),使它最能代表目标在地面上的位置,原因很简单,因为画面中的目标实际是在三维世界中的地面上移动。大家可能第一反应应该选择矩形框的中心点(Left + Width / 2, Top + Height /2),虽然这个点非常好计算,但是实际应用中该点并不非常准确,通过它并不能准确地反映目标在地面上的实际位置。

如上图所示,黄色矩形框代表货车在画面中的位置,如果选取矩形框中心点来定位车辆在路面上的位置,那么货车应该在行车道(右侧车道)上行驶,而实际情况货车正在超车道(左侧车道)上。显然用这种方式去判断车辆在路面上的位置非常不准确。

另外一种方式是选取矩形底边的中心点(Left + Width/2, Top + Height),这种方式比前一种更准确,但是当车道方向与摄像夹角非常大时,定位误差非常明显。

如上图,黄色矩形框代表客车在画面中的位置,如果选取矩形框底边中心点来定位车辆在路面上的位置,那么客车应该压线了,而实际情况客车行驶正常。

实际经验得到,只取矩形框底边中心点还不够,还需要根据车辆行驶方向与垂直方向的夹角大小来动态调整该点的X指,也就是说,最终选取的点应该是 (Left + Width/2 + delta, Top + Height),其中delta可正可负,最终的效果如下:

停车

停车时,目标静止不动,理论上目标轨迹点不变,我们只需要判断轨迹点在连续若干帧之内都没发生变化即可(Xm == Xn && Ym == Yn)。但现实场景中,由于目标检测算法的准确性,同一个目标即使静止不动,每一帧检测到的矩形框也有可能不一样(位置不同、大小不同等),最后得到的轨迹点也不会重合。因此更好的判断方式是:目标轨迹点连续若干帧之内欧氏距离(平面直线距离)不大于某值,比如50像素,那么我们即可认为车辆静止不动(停车事件发生)。

逆行(倒车)

逆行时,目标第M帧轨迹点和第N帧轨迹点的射线与道路方向之间的夹角如果大于某值,比如大于90°,那么判定为逆行。其中M<N

占用应急车道

当车辆行驶时,判断目标轨迹点在连续若干帧内是否都在应急车道中,若是,则为占用应急车道,其他类似的区域事件判定逻辑与这个一样

拥堵 和 缓行

连续若干帧内静止车辆数大于某值,车辆静止的逻辑可以参照前面停车的逻辑。当路面多辆车静止不动时,判定道路发生拥堵。该方式很简单,但是通常情况下,除了这种堵死的情况外,我们更需要知道是否出现缓行(提前应对拥堵发生)。

缓行有两种方式去判断:

(1)结合前几篇文章提到的测速,如果发现多辆行驶车辆的速度都小于某值(可以分级定义),那么判定道路缓行;

(2)很多情况下,车速测不出来(前面文章中有提到,没有参照物的道路测不出车速),那么我们需要使用其他方式先判断单个车辆是否缓行:在连续若干帧中,车辆轨迹点直线距离小于某值,但是大于另外一个值(保证车辆没有停止)。如果连续多帧中出现缓行的车辆数大于某值,那么判定整个道路进入缓行状态。

目标行为分析难点

前面所有的行为逻辑判断全部基于理想状态下:检测算法比较准确,矩形方框锁定目标比较稳定,不会出现丢帧、矩形框抖动严重(位置、大小跳跃厉害)。实际应用场景中,由于各种各样的因素,目标锁定不够准确,会对目标行为分析造成非常大的负面影响。

另外,上面所有判断逻辑全部基于像素单位(图像二维坐标系),这个判断依据存在一定缺陷,检测算法能检测到很远的车辆,虽然这时候车辆一直处于运动状态,但是它反应到平面二维画面上时,车辆几乎静止不动,根据前面的判断逻辑,这种情况会出现停车、拥堵等误报。避免这种误报的方式之一是尽量将摄像头斜对行车道,而不是刚好在车道的正前方/正后方。

除此之外,还有其他一些局限性,比如上面提到的各种阈值的调整,也是非常考验人的一项工作。一般视频分析应用很难同时满足多个场景,针对不同的需求最好做一些特定的优化。

[AI开发]目标跟踪之行为分析的更多相关文章

  1. [AI开发]目标跟踪之速度计算

    基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...

  2. [AI开发]目标跟踪之计数

    基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...

  3. [AI开发]目标检测之素材标注

    算力和数据是影响深度学习应用效果的两个关键因素,在算力满足条件的情况下,为了到达更好的效果,我们需要将海量.高质量的素材数据喂给神经网络,训练出高精度的网络模型.吴恩达在深度学习公开课中提到,在算力满 ...

  4. CVPR2018 关于视频目标跟踪(Object Tracking)的论文简要分析与总结

    本文转自:https://blog.csdn.net/weixin_40645129/article/details/81173088 CVPR2018已公布关于视频目标跟踪的论文简要分析与总结 一, ...

  5. KCF目标跟踪方法分析与总结

    KCF目标跟踪方法分析与总结 correlation filter Kernelized correlation filter tracking 读"J. F. Henriques, R. ...

  6. [AI开发]零代码分析视频结构化类应用结构设计

    视频结构化类应用涉及到的技术栈比较多,而且每种技术入门门槛都较高,比如视频接入存储.编解码.深度学习推理.rtmp流媒体等等.每个环节的水都非常深,单独拿出来可以写好几篇文章,如果没有个几年经验基本很 ...

  7. MAML-Tracker: 目标跟踪分析:CVPR 2020(Oral)

    MAML-Tracker: 目标跟踪分析:CVPR 2020(Oral) Tracking by Instance Detection: A Meta-Learning Approach 论文链接:h ...

  8. [AI开发]Python+Tensorflow打造自己的计算机视觉API服务

    "与其停留在概念理论层面,不如动手去实现一个简单demo ."       ——鲁迅 没有源码都是耍流氓github 前言 目前提供AI开发相关API接口的公司有很多,国外如微软. ...

  9. 百度AI开发平台简介

    AIstudio https://aistudio.baidu.com/aistudio/index 关于AI Studio AI Studio是基于百度深度学习平台飞桨的一站式AI开发平台,提供在线 ...

随机推荐

  1. 简洁的导出 datatable到excel,不用组件

    简洁的导出 datatable到excel var lines = new List<string>(); string[] columnNames = dataTable.Columns ...

  2. Wpf ImageSource对象与Bitmap对象的互相转换

    原文:Wpf ImageSource对象与Bitmap对象的互相转换 Bitmap to ImageSource 将得到的Bitmap对象转换为wpf常用的Imagesource对象 BitmapSo ...

  3. Win10《芒果TV》更新v3.8.40青春版:优化推送策略、新增缓存清理

    芒果TV暑期重磅活动-青春芒果节拉开帷幕,炫酷的3D视觉大秀.王牌IP互动体验馆.众星云集的青春炙燥夜晚会.神秘的芒果吉祥物发布,Win10版<芒果TV>全平台同步更新青春版v3.8.40 ...

  4. ARTS 1.21 - 1.25

    每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西! Algorithm: 学习算法 题目:3Sum Closest 解题过 ...

  5. 什么是BSON?

    BSON( Binary Serialized Document Format) 是一种二进制形式的存储格式,采用了类似于 C 语言结构体的名称.对表示方法,支持内嵌的文档对象和数组对象,具有轻量性. ...

  6. LINQ学习笔记(三)

    下面对各子句解释 from子句:查询表达式的开始子句,查询表达式必须以from子句开头. 格式:from u in source 其中u表示范围变量,它表示源序列中的每个后续元素,source为数据源 ...

  7. CUDA配置

    你问这个有多恶心,是真的很恶心!!! 首先推出一个博客上的内容,里面内容很不错,都是前车之鉴,很有用.http://blog.csdn.net/masa_fish/article/details/51 ...

  8. 演练:创建和使用动态链接库 (C++)

    我们将创建的第一种类型的库是动态链接库 (DLL). 使用 DLL 是一种重用代码的绝佳方式. 您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它 ...

  9. 把滚动箱的样式做如下调整来模拟 TPanel

    程序中用 TPanel 做了容器, 需要给它一个背景图片; 发现这竟是个难题! 发现我经常使用的滚动箱控件 TScrollBox, 是一个很好的替代品. 本例需要先添加两个图片资源, 添加方法可以参考 ...

  10. 取得文件夹内容信息(使用IShellFolder接口)

    翻译自MSDN 2005 -> Win32 和 COM 开发 -> User Interface -> Windows User Experience -> Windows S ...