行人计数,计次系统

前两周左右一个公司让我们写一下demo实现行人计数和某个人计次的功能,到现在为止效果不太好,但是还是有必要记一下我们的思路。

说到行人计数的话,肯定是要有行人检测和行人跟踪两部分的,网上搜了一下,opencv里面有两种检测的方法,一种叫做hog变换,另一种是haar人形检测的方法。后一种方法我没有测试,但是从之前haar方法的人脸检测的效果来看,行人检测的误检率肯定也蛮高的。行人跟踪方面没有找到合适的代码,opencv里有meanshift和camshift两种跟踪方法,这两种方法大同小异,理论上可以跟踪任何物体。但是因为是采用的颜色直方图信息,所以如果行人走动的背景较为复杂,很难判断这个行人是否走出视野。最要命的是,camshift只能实现单目标跟踪,也就是说有很多人一起走的时候就不灵了,上周想将camshift改成多目标跟踪,但是一点思路都没有。

也就是到目前为止博主不知道有什么现成的跟踪方法来跟踪行人,好办法没有笨办法倒是还能想到的。撸主的想法是这样的,检测前后帧里的行人框(hog方法会将行人以方框圈出,并返回方框数据)比对方框是否临近(可以按照所检测到的方框的宽度作为检测的阈值,比如上一帧的某个方框宽度为50pix,而在当前位置下人走一步的宽度基本是不会超过50pix的)如果临近,那说明前后帧所圈出的方框是一个人,这样就基本实现了跟踪(兼职太简陋了o(>﹏<)o,撸主已经被自己的机智打动了,有没有被打动的妹子呢。。)。好吧,还是要总结一下自己的步骤:

1、采用前后帧差分的方法,只获取运动的部分(当然前后帧差分噪声还是蛮大的,所以在做差的时候可以将小于30的像素点抹成0),这样做有两个好处,第一可以去除hog变换的绝大部分误检,第二可以提高hog方法的速度。

2、将获取到的差分图像进行hog方法检测,可以返回圈住行人的方框,多个人的时候每一帧图像里可能有多个行人框。

3、将每一帧里的行人框做一下缓冲,撸主分别定义了7个vector<Rect>来保存每一帧里的行人框,最多可以保存当前帧,前一帧,前面第二帧...等共7帧里的方框数据,为什么要这么存,后面会讲。

4、判断行人是否走出相机视野:这一点比较难搞,首先是hog方法在检测行人的时候有断帧现象,就是人正常在走的时候第一帧第二帧都有行人,突然第三帧没有临近的行人框了,但是第四帧图像又有了临近的框,所以在第三帧判断时是不能判定成该行人走出相机的。鉴于hog方法断帧只会有一到两帧,所以在当前帧的下,将前面第三帧作为基础,比较当前帧、倒1帧、倒2帧,如果倒3帧有行人框,而前面几帧又没有,基本可以断定人走出了相机。单纯这样是不够的,因为倒3帧有可能是干扰,所以再将倒3帧和倒4帧、5帧、6帧进行比较,如果456帧里至少有两帧出现过临近的行人框,那么这时候是可以断定人走出去了,行人计次++。哎,不知道大家明白我意思没有,水哥敲字敲的都要跪了。。


行人计次功能后面再说吧,后面公司如果对结果不满意不采用的话会共享代码的。


后续补充:

1、 需求:设计软件实现摄像头覆盖区域内,行人计数和某个行人计次的功能,对于无法准确判断是哪个行人的情况下只计数。

2、 设计实现:

①通过摄像头读取每一帧图像,并对前后帧图像进行差分只获取运动的区域,而且差分对后续方法可以减少误判、减少计算量。

②利用HOG(histogram of orientedgradient)特征对差分图像进行检测可以得到行人在图像中的位置。本身HOG检测误差较大,但是通过采取前后帧差分的方法可以极大的减少误判等情况。

③保存每一帧里的行人位置数据,根据行人在摄像头内的远近设置动态步长对某个行人进行跟踪。对于多目标跟踪一直没有很好的方法,像camshift、meanshift方法只是实现了单目标跟踪,而且对于背景复杂的情况下跟踪效果非常不好。

④比对临近几帧的图像,根据行人位置判断行人是否走出摄像头覆盖区域,如果该行人走出视野则行人计数加一。

⑤在跟踪行人的同时,对差分图像采用Haar特征进行人脸检测,同时在检测到人脸的区域进行嘴角检测以降低误检率。如果检测到有效的人脸则截取人脸区域进行插值,遍历之前人的脸目录,通过EigenFace方法检测当前人脸与之前人脸数据的相似度判断是否为同一个人。如果相似度低于阈值,则视当前目录已保存人脸图像个数进行保存。如果目录内没有人脸与当前相似,则新建目录保存人脸图像。

⑥与行人跟踪相似,跟踪人脸并判断是否走出摄像头区域,如果走出视野则该行人计数加一,该行人是根据其人脸来判别的。

3、结果:根据以上的设计思路,基本实现了摄像头内行人计数的功能,对能检测到有效人脸的行走,可以给出该人的脸部图像和该人行走的次数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值