赞
踩
进行人脸检测前需要调用笔记本的摄像头。
opencv中通过cv2.VideoCapture()来进行摄像头的调用。括号中为0代表调用本机摄像头,为1代表调用usb摄像头。
调用摄像头后,就需要进行人脸的检测,此处需要借助opencv中的CascadeClassifier()函数加载haarcascade_frontalface_alt.xml文件。
之后就是对摄像头得到的每帧视频进行处理,要对它进行灰度转换,再用之前加载得分类器进行人脸检测。使用classfier.detectMultiScale()返回检测到得人脸矩阵的Rect(x,y,w,h),x、y是左上角起始坐标,h、w是高和宽。
将得到的矩阵用cv2.rectangle()画出来。
所有代码如下:
import cv2 def openvideo(window_name ,video_id): cv2.namedWindow(window_name) # 创建一个窗口 cap=cv2.VideoCapture(video_id) # 获取摄像头 while cap.isOpened(): ok,frame=cap.read() # ok表示摄像头读取状态,frame表示摄像头读取的图像 if not ok : break cv2.imshow(window_name,frame) # 将图像矩阵显示在一个窗口中 c=cv2.waitKey(10) # 等待10ms,10ms内没有按键操作就进入下一次while循环,从而得到10ms一帧的效果,waitKey返回在键盘上按的键 if c & 0xFF==ord('q'): # 按键q后break break # 释放资源 cap.release() cv2.destroyWindow(window_name) print("cam closed") def facedetect(windowname,camera_id): cv2.namedWindow(windowname) cap=cv2.VideoCapture(camera_id,cv2.CAP_DSHOW) # Face Detection using Haar Cascades http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html?highlight=cascadeclassifier classfier=cv2.CascadeClassifier('haarcascade_frontalface_alt.xml') # 加载分类器,分类器位置可以自行更改,注意这里用opencv库文件夹下的绝对路径也不行,在库文件夹里找到这个文件复制到这个程序的同目录下,参考:https://blog.csdn.net/GAN_player/article/details/77993872 color=(0,225,0)#人脸框的颜色,采用rgb模型,这里表示g取255,为绿色框 while cap.isOpened(): ok,frame=cap.read() # 读取一帧数据,ok表示摄像头读取状态,frame表示摄像头读取的图像矩阵mat类型 print(ok) if not ok: break # 灰度 gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)#图像灰度化,cv2.cvtColor(input_image, flag) where flag determines the type of conversion. # detectMultiScale完成人脸探测工作,returns the positions of detected faces as Rect(x,y,w,h),x、y是左上角起始坐标,h、w是高和宽 # grey是要识别的图像数据,scaleFactor图像缩放比例,可以理解为同一个物体与相机距离不同,其大小亦不同,必须将其缩放到一定大小才方便识别,该参数指定每次缩放的比例 faceRects=classfier.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32,32)) # 利用分类器检测灰度图像中的人脸矩阵数,1.2和3分别为图片缩放比例和需要检测的有效点数 print(faceRects) if len(faceRects)>0:#大于0则检测到人脸 for faceRect in faceRects:# 可能检测到多个人脸,用for循环单独框出每一张人脸 x,y,w,h=faceRect#获取框的左上的坐标,框的长宽 cv2.rectangle(frame,(x-10,y-10),(x+w-10,y+h-10),color,2) cv2.imshow(windowname,frame) # 显示图像 c=cv2.waitKey(10) if c&0xFF==27: # 退出条件 break cap.release()#释放摄像头并销毁所有窗口 cv2.destroyAllWindows() print ('open camera...') # openvideo('mycam' ,0) facedetect('facedetect',0)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。