opencv实现视频里人数统计
2017-08-01 11:38
162 查看
小编有个群193369905,里面分享的均是机器视觉的资料。基于图像的人数统计属于模式识别问题,可应用于安防领域。传统的方法包括:1)视频捕获;2)目标提取(背景建模、前景分析)——常见方法有高斯背景建模、帧差法、三帧差法等;3)目标识别(模式识别、特征点分析),如人脸识别,头肩部识别等,OpenCV里可以使用Hear特征、级联分类器来进行特征检测;4)目标跟踪——基本方法有直方图特征匹配和运动目标连续性匹配,opencv里可以使用CamShift算法直接对彩色图像进行分析;5)轨迹分析——根据目标的运动轨迹计算目标目标运动方向和位移,判断目标是进入还是离开指定区域,从而对目标进行数目统计。
前段时间我接到一个项目,需要统计公交车的人数,于是我就利用python-opencv对人头统计了一下,然后利用轨迹分析计算目标运动的方向和位移,来判断目标是上公交还是下公交。
下面我先贴出如何利用python-opencv来统计一下图片中的人脸数目吧,人脸检测注释请参考我的上一篇博客:
我们看一下原图
处理完之后的效果:
从图片中看到,检测效果有点不准,我们只需要数框就可以得到人脸的个数了,并用上篇博客中降到的putText函数将人数在图片中打印出来。
接下来,我们可以检测视频中的人脸数目,然后进行统计,同样也可以自己训练分类器,实现人头检测然后统计,我在这只给出系统已经训练好的分类器。
copy以上代码就可以检测视频中人脸的个数了,大家可自行玩开,由于上传匆忙,代码可能出现错行,大家如果需要完整代码,可留下邮箱,小编将完整项目代码发入邮箱,有错欢迎大家指正。
前段时间我接到一个项目,需要统计公交车的人数,于是我就利用python-opencv对人头统计了一下,然后利用轨迹分析计算目标运动的方向和位移,来判断目标是上公交还是下公交。
下面我先贴出如何利用python-opencv来统计一下图片中的人脸数目吧,人脸检测注释请参考我的上一篇博客:
#!/usr/bin/python # -*- coding: utf-8 -*- import cv2 import numpy as np face_cascade=cv2.CascadeClassifier("/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml") eye_cascade=cv2.CascadeClassifier("/usr/share/opencv/haarcascades/haarcascade_eye.xml") i = cv2.imread('1.jpg') print i.shape gray=cv2.cvtColor(i,cv2.COLOR_BGR2GRAY) faces=face_cascade.detectMultiScale(gray,1.3,5) l=len(faces) print l for (x,y,w,h) in faces: cv2.rectangle(i,(x,y),(x+w,y+h),(255,0,0),2) cv2.putText(i,'face',(w/2+x,y-h/5),cv2.FONT_HERSHEY_PLAIN,2.0,(255,255,255),2,1) roi_gray = gray[y:y+h, x:x+w] roi_color = i[y:y+h, x:x+w] eyes = eye_cascade.detectMultiScale(roi_gray) cv2.putText(i,"face count",(20,20),cv2.FONT_HERSHEY_PLAIN,2.0,(255,255,255),2,1) cv2.putText(i,str(l),(230,20),cv2.FONT_HERSHEY_PLAIN,2.0,(255,255,255),2,1) #cv2.putText(i,"eyes count",(20,60),cv2.FONT_HERSHEY_PLAIN,2.0,(255,255,255),2,1) print i.shape #cv2.putText(i,str(r),(230,60),cv2.FONT_HERSHEY_PLAIN,2.0,(255,255,255),2,1) cv2.imshow("img",i) cv2.waitKey(0)
我们看一下原图
处理完之后的效果:
从图片中看到,检测效果有点不准,我们只需要数框就可以得到人脸的个数了,并用上篇博客中降到的putText函数将人数在图片中打印出来。
接下来,我们可以检测视频中的人脸数目,然后进行统计,同样也可以自己训练分类器,实现人头检测然后统计,我在这只给出系统已经训练好的分类器。
#!/usr/bin/python # -*- coding: utf-8 -*- import cv2 import numpy as np face_cascade=cv2.CascadeClassifier("/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml") eye_cascade=cv2.CascadeClassifier("/usr/share/opencv/haarcascades/haarcascade_eye.xml") cap=cv2.VideoCapture('test.avi') while True: ret,frame=cap.read() i=frame # print i.shape gray=cv2.cvtColor(i,cv2.COLOR_BGR2GRAY) faces=face_cascade.detectMultiScale(gray,1.3,5) l=len(faces) print l for (x,y,w,h) in faces: cv2.rectangle(i,(x,y),(x+w,y+h),(255,0,0),2) cv2.putText(i,'face',(w/2+x,y-h/5),cv2.FONT_HERSHEY_PLAIN,2.0,(255,255,255),2,1) roi_gray = gray[y:y+h, x:x+w] roi_color = i[y:y+h, x:x+w] for (ex,ey,ew,eh) in eyes: cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) cv2.putText(i,"face count",(20,20),cv2.FONT_HERSHEY_PLAIN,2.0,(255,255,255),2,1) cv2.putText(i,str(l),(230,20),cv2.FONT_HERSHEY_PLAIN,2.0,(255,255,255),2,1) cv2.imshow("rstp",i) if cv2.waitKey(1) & 0xFF == ord('q'): exit(0)
copy以上代码就可以检测视频中人脸的个数了,大家可自行玩开,由于上传匆忙,代码可能出现错行,大家如果需要完整代码,可留下邮箱,小编将完整项目代码发入邮箱,有错欢迎大家指正。
相关文章推荐
- OpenCV 视频人数统计研究 (转别人的)
- 视频人数统计(opencv)
- Opencv视频特定区域人数统计(在人物重叠时效果不佳)
- OpenCV 视频人数统计研究
- OpenCV 视频人数统计研究
- Opencv实战(一) 视频人数统计(C++ & Opencv)前后背景分离方法
- OpenCV 视频人数统计研究 .
- 使用opencv在Qt中实现卡通化视频处理
- Jsp在线人数统计 - 实现后台强制前台某个用户退出
- OpenCV + python 实现人脸检测(基于照片和视频进行检测)
- opencv实现图片与视频中人脸检测功能
- VS2005下实现asp.net在线人数的统计
- opencv实现打开摄像头及视频文件
- 基础学习笔记之opencv(6):实现将图片生成视频
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(40)-精准在线人数统计实现-【过滤器+Cache】
- servlet监听器实现在线人数统计
- javaweb中实现在线人数统计
- opencv实现视频加载与播放
- opencv实现视频的读取并且一帧一帧的显示出来
- php实现统计网站在线人数的方法