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

(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. CheckBox IsHitTestVisible

    <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"></Colu ...

  2. c# Ajax后台动态分页

    创建WebPager类 public static class WebPager { public static string WebPagerAjax(string Idn, bool IsShor ...

  3. Delphi Android ActivityManager(提供了接口, 利用它可以方便的对Memory, Processes, Task, Service 等进行管)

    ActivityManager:   对Activity交互提供了接口, 利用它可以方便的对Memory, Processes, Task, Service 等进行管理,. 这里对Delphi接口进行 ...

  4. 基于Spring开发

    1. XML Schema 1.1 最简单的标签 一个最简单的标签,形式如: <bf:head-routing key="1" value="1" to= ...

  5. PRML Chapter2

    参考文献:PRML2 参数方法和非参数方法 机器学习上的方法分为参数方法(根据先验知识假定模型服从某种分布,然后利用训练集估计出模型参数,也就弄清楚了整个模型,例如感知器)和非参数方法(基于记忆训练集 ...

  6. gcc与vs2013的三个charset编译选项

    以gcc为例,它有三个命令选项:-finput-charset=gb18030-fexec-charset=utf-8-fwide-exec-charset=utf32顾名思议,input-chars ...

  7. 11g Oracle导出表 默认不导出数据为空的表解决

    11g oracle导出表时会默认不导出数据为空 1.Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出.  2.设置deferred_segm ...

  8. 使用mingw编译完整Qt5的过程(使用了niXman的msys套装)good

    使用mingw编译完整Qt5的过程 坛子里似乎已经有人编译出Qt5了,不过大多有问题,不是缺少opengl就是缺少openssl,还有缺少webkit的,本文提供的仍然不能说是绝对完整的,不过相对以前 ...

  9. 《C++ Primer》读书笔记 第二章

    1.在算数表达式中最好不要使用char或bool,只有在存放字符或布尔值时才使用他们,因为char在有些机器上是有符号的,在一些机器上是无符号的,所以特别容易出问题,如果只表示一个不大的整数,那么明确 ...

  10. 联想笔记本进入不了BIOS的解决方法

    当计算机遇到问题时,很多情况下需要进入BIOS进行解决.但很多新出的联想笔记本电脑在开机时,无论怎么疯狂的按F2,Fn+F2,F12或者Del,都无法进入BIOS,十分气人. 这种现象出现的原因是联想 ...