[AI开发]目标跟踪之计数
基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景)、计数(交通类应用场景、安防类应用场景)以及行为检测(交通类应用场景、安防类应用场景)。我会写三篇文章依次介绍这三个主题。
(1)目标跟踪之速度计算
(2)目标跟踪之计数
(3)目标跟踪之行为检测
后面会陆续添加链接。
本篇文章以交通类应用场景为例,介绍车辆断面计数方法。
人工计数方式
设想一个场景,你蹲在地下通道旁边,要统计穿过这条通道最近5分钟的人流量,你实际的做法是什么?目光是停留在一个人身上,从TA进入通道直到离开吗?当然不是,因为这样的话你根本没有那么多双眼睛。正常人会在通道中某个位置想象出来一条虚拟分界线,目光紧盯这条线附近区域即可,有人跨线计数就加一。他们是不会关注这条直线两边稍远区域的目标,因为那里有什么、有多少目标都不会影响最终的计数结果。

如上图,对于A区域和B区域范围内的目标,观察者是不需要考虑的,只有经过黄色虚拟计数线的目标才会纳入计数范畴。在A和B区域出现的目标停留、调头等都不影响最终的计数结果。
自动计数原理
自动计数原理其实跟人工计数一致,计数算法应该同样假设出一条虚拟的分界线,目标穿过这条虚拟的分界线时,总计数加一。前面提到过,目标经过跟踪算法处理后,会得到一个唯一目标标识和对应的运动轨迹坐标点集合,通过这两个数据可以很快判断某个目标是否穿越某条直线。2D平面中判断一个点(X,Y)在一条直线(X1, Y1)(X2, Y2)左侧还是右侧的算法很简单,下面是对应代码:
// check if point at one side of line
bool LeftOfLine(Point p, Point p1, Point p2)
{
if (p1.X == p2.X)
{
return p.X < p1.X;
} if (p1.Y == p2.Y)
{
return p.Y < p1.Y;
} if (p2.X < p1.X)
{
Point tmp = p2;
p2 = p1;
p1 = tmp;
} int ret = (p2.Y - p.Y) * (p2.X - p1.X) - (p2.Y - p1.Y) * (p2.X - p.X);
return ret < 0;
}
上面代码可以判断点P是否在P1和P2组成直线的左侧,如果是返回True,否则返回False。(直线左侧和右侧并不太恰当,在实际使用过程中,如果P1和P2已经确定,该方法返回True代表点在直线的一侧,返回False代表点在直线的另一侧)。目标刚出现时,我们通过以上方法判断它在直线的某一侧(方法返回结果为A),目标在移动过程中,会不断得到新的位置点(轨迹点集合中最新的一点),我们还是通过以上方法来判断目标在直线的某一侧(方法返回结果为B),如果A!=B,说明目标跨越了直线,此时计数应该加一。已经参与计数的目标设置一个Flag,后面不再参与计数逻辑。
下面给出5种情况,说明自动计数逻辑中,目标参与计数和不参与计数的规则:
(1)理想情况下,目标从监控画面底部P1进入时,即可被检测算法检测到,并被跟踪算法跟踪到,之后连续跟踪,直到离开监控区域,从P2处消失。目标跨域虚拟计数线(图中红色虚线),计数生效。

(2)检测算法准确性不高,目标到特定位置P1才被检测到,直到离开监控区域,从P2处消失。目标跨域虚拟计数线,计数生效。

(3)检测算法准确性不高,目标还未跨越虚拟计数线就不能被检测到了。计数不生效。

(4)检测算法准确性不高,或者跟踪算法准确性不高,目标虽然被跟踪到,但是跟踪到的轨迹并不是连续的,并且轨迹刚好在虚拟计数线那里断掉了。计数不生效。

(5)检测算法准确性不高,目标轨迹没有跨域虚拟计数线,这个情况跟(3)一致。

注意,以上举例都是假设目标从监控画面底部进入视野(去向),当目标从监控画面顶部进入视野时(来向),情况类似。
影响自动计数准确性的因素
根据前面的讨论,其实影响自动计数准确性的因素很好归纳:
(1)检测算法准确性。目标如果还未跨越虚拟计数线时,检测算法就检测不到该目标了,那么计数肯定丢失;
(2)跟踪算法准确性。跟踪算法效果不好时,目标轨迹不连续,很可能刚好在虚拟计数线那里断掉;
(3)虚拟计数线的位置。虚拟计数线不能太远,很多检测算法对远处的小目标检测效果不理想;当然也不能太近,我们在计数时,为了过滤错误的检测目标,要求必须保证目标轨迹点的数量要大于某个值,比如目标在跨越计数线时,要求目标轨迹点集合中的点数量大于25(必须被连续跟踪超过1秒,假设FPS为25),如果虚拟计数线太近,目标从监控画面下方进入时并且速度很快,那么它不会被连续跟踪超过1秒。
以上是目标跟踪中关于计数的详细说明,有问题留言私信皆可。
[AI开发]目标跟踪之计数的更多相关文章
- [AI开发]目标跟踪之行为分析
基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...
- [AI开发]目标跟踪之速度计算
基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...
- [AI开发]目标检测之素材标注
算力和数据是影响深度学习应用效果的两个关键因素,在算力满足条件的情况下,为了到达更好的效果,我们需要将海量.高质量的素材数据喂给神经网络,训练出高精度的网络模型.吴恩达在深度学习公开课中提到,在算力满 ...
- [AI开发]将深度学习技术应用到实际项目
本文介绍如何将基于深度学习的目标检测算法应用到具体的项目开发中,体现深度学习技术在实际生产中的价值,算是AI算法的一个落地实现.本文算法部分可以参见前面几篇博客: [AI开发]Python+Tenso ...
- [AI开发]Python+Tensorflow打造自己的计算机视觉API服务
"与其停留在概念理论层面,不如动手去实现一个简单demo ." ——鲁迅 没有源码都是耍流氓github 前言 目前提供AI开发相关API接口的公司有很多,国外如微软. ...
- 百度AI开发平台简介
AIstudio https://aistudio.baidu.com/aistudio/index 关于AI Studio AI Studio是基于百度深度学习平台飞桨的一站式AI开发平台,提供在线 ...
- 趣说游戏AI开发:对状态机的褒扬和批判
0x00 前言 因为临近年关工作繁忙,已经有一段时间没有更新博客了.到了元旦终于有时间来写点东西,既是积累也是分享.如题目所示,本文要来聊一聊在游戏开发中经常会涉及到的话题--游戏AI.设计游戏AI的 ...
- CVPR2018 关于视频目标跟踪(Object Tracking)的论文简要分析与总结
本文转自:https://blog.csdn.net/weixin_40645129/article/details/81173088 CVPR2018已公布关于视频目标跟踪的论文简要分析与总结 一, ...
- HUAWEI HiAI亮相华为开发者生态大会 助力应用AI开发实现加速度
6月23日,在2018华为终端·全球合作伙伴及开发者大会AI分论坛体验区的一角,被层层叠叠的人群围得水泄不通.站在最前面的一名体验者,正跟随着“快手短视频”APP上不断出现的小人左右扭动,每完成一个动 ...
随机推荐
- qt部分类释义
如果测试错误,输出包含源码的警告信息 Q_ASSERT Qtime最后一次star()或restar()到现在的毫秒数 QTime::elapsed QMetaObject::invokeMethod ...
- 九款免费轻量的 AutoCAD 的开源替代品推荐
随着各行各业的发展,CAD已经广泛应用于工业.服装.建筑以及电子产业等设计领域.AutoCAD 是一种流行的商业CAD软件,虽然很强大,但并不是免费的.因此本文推荐了几种免费重量轻的CAD工具/软件, ...
- 汇编实现获取CPU信息
这是文章最后一次更新,加入了TLB与Cache信息等资料前言:论坛上面有人不明白CPUID指令的用法,于是就萌生写这篇文章的想法,若有错误话请大侠指出,谢谢了 ^^论坛的式样貌似有问题,若式样问题导致 ...
- Window Features 总览
This overview discusses features of windows such as window types, states, size, and position. Window ...
- JS引用路劲为什么在前面加上两个斜杠
原文:JS引用路劲为什么在前面加上两个斜杠 //表示同协议,一般现在用在https跨域名地址情况下.比如第三方统计代码的引入,用//就不用很麻烦地区分https还是http,也不用担心https下降到 ...
- 【Linux】简单明了查看内存使用和ubuntu的版本号及位数
1.查看ubuntu的版本号:cat /etc/issue 2.查看系统是32位的还是64位:getconf LONG_BIT 3.查看内存使用 free free命令可以用来查看系统内存使用情况,- ...
- C# Lambda表达式Contains方法 like
原文:Lambda表达式Contains方法 like 1.使用Contains方法的必备条件: Contains等价于SQL中的like语句.不过Contains只针对于字符串(string)类型的 ...
- Android零基础入门第12节:熟悉Android Studio界面,开始装逼卖萌
原文:Android零基础入门第12节:熟悉Android Studio界面,开始装逼卖萌 通过前两期的学习,我们可以正确搭建好Android Studio的开发环境,也创建了HelloWorld工程 ...
- 给 Web 开发人员推荐的通用独立 UI 组件(二)
现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高.在推荐完图形库之后,再来推荐一些精品的独立 UI 组件.这些组件可组合在一起,形成美观而交互强大的 Web UI . 给 We ...
- HttpWebRequest 在出错时获取response内容
HttpWebRequest 请求时,服务器会返回500 501这些错误 并包含错误信息,通过如下代码可以拿到错误信息 HttpWebResponse res; try { res = (HttpW ...