光环大数据 使用Python + OpenCV来实现脸部和眼睛的检测

编辑:光环大数据 来源: 互联网 时间: 2017-11-20 18:17 阅读:

本篇文章使用Python和OpenCV中的Haar特征分类器对人脸及眼睛进行检测和追踪。在开始之前,有几件准备工作要完成。

 

  • 第一,你需要有一个摄像头,如果没有的话也可以使用视频文件来替代。

  • 第二,需要在python中安装OpenCV库。具体的方法是在这里下载相应的wheel(.whl)文件,并使用pip进行安装。

  • 第三,下载OpenCV中的Haar特征分类器,你可以从Opencv官网下载源程序解压后获得Haar特征分类器,也可以直接下载所需的xml文件。

 

在完成准备工作后,我们开始进行人脸及眼睛的检测和追踪工作。首先导入所需使用的库文件。这里我们只需要使用numpy和cv2两个库。

 

Source code

 

#导入所需库文件
import numpy as npimport cv2

 

加载Haar特征分类器中的面部识别和眼睛识别两个xml文件。如何你还需要识别更多的元素也在这里一并加载。

 

Source code


#加载面部识别文件(请按文件实际存储路径进行调整)
#https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
#加载眼部识别文件(请按文件实际存储路径进行调整)#https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_eye.xml
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

 

打开你的摄像头来获取视频,到这一步摄像头开始工作,但还没有任何影像输出。如果没有摄像头可以使用电脑里的视频文件进行替代。

 

Source code

 

#打开摄像头获取视频
cap = cv2.VideoCapture(0)

 

我们同时将对摄像头获取的图像进行保存,这里对视频文件进行处理并设置保存路径及视频尺寸。(这一步不是必须的操作)


Source code


#编译并输出保存视频
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

 

开始获取并处理视频内容。下面是一个无限的循环结构,通过按键q可以结束循环。在这个循环中ret获取摄像头是否有返回的布尔值,img获取摄像头拍摄的视频内容。我们首先将摄像头获取的彩色图像转化为灰度图像。后续的操作将主要在灰度图像上完成,然后再使用灰度图像中的坐标对原始的彩色图像进行标记和输出。图像转化为灰度后首先进行人脸检测,然后在人脸检测的基础上再进行眼睛检测,这样做的原因有两点,1,避免面部以外的物体被错误的识别为眼睛,2,眼睛识别算法需要一些眼睛周围的面部特征来进行检测,从而提高准确率。

 

随后使用矩形绘制出人脸的位置和眼睛的位置,在设置绘制颜色时需要注意,OpenCV中的颜色值并不是RGB,而是BRG。检测和绘制完成后对图像进行输出。这时可以在视频窗口中看到被标记的面部和眼睛。由于我们使用的Haar特征分类器是正面面部识别,因此需要正对摄像头。如果面部发生偏转则无法识别。

 

Source code


#无限循环
while(True):
   #获取视频及返回状态
   ret, img = cap.read()
   #将获取的视频转化为灰色
   gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
   #检测视频中的人脸,并用vector保存人脸的坐标、大小(用矩形表示)
   faces = face_cascade.detectMultiScale(gray, 1.3, 5)
   
   #脸部检测
   for (x,y,w,h) in faces:
       cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
       roi_gray = gray[y:y+h, x:x+w]
       roi_color = img[y:y+h, x:x+w]
       #检测视频中脸部的眼睛,并用vector保存眼睛的坐标、大小(用矩形表示)
       eyes = eye_cascade.detectMultiScale(roi_gray)
       #眼睛检测
       for (ex,ey,ew,eh) in eyes:
           cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
           
   #显示原图像
   cv2.imshow('img',img)
   #按q键退出while循环
   if cv2.waitKey(30) & 0xFF == ord('q'):
          break

 

退出while循环后释放摄像头,完成视频输出并关闭所有窗口。

 

Source code


#释放摄像头
cap.release()
#关闭视频输出
out.release()
#关闭所有窗口
cv2.destroyAllWindows()

 

以下是完整的人脸及眼睛检测代码:

 

Source code


def face_eye():  
import numpy as np  
 import cv2
 
   face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
   eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') 
   
   cap = cv2.VideoCapture(0)
   fourcc = cv2.VideoWriter_fourcc(*'XVID')
   out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))     
   
   while(True):
       ret, img = cap.read()
       gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
       faces = face_cascade.detectMultiScale(gray, 1.3, 5)         
       
       for (x,y,w,h) in faces:
           cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
           roi_gray = gray[y:y+h, x:x+w]
           roi_color = img[y:y+h, x:x+w]
           eyes = eye_cascade.detectMultiScale(roi_gray)
           for (ex,ey,ew,eh) in eyes:
               cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) 
       
       cv2.imshow('img',img)
       if cv2.waitKey(30) & 0xFF == ord('q'):
                   break
   cap.release()
   out.release()
   cv2.destroyAllWindows() 

face_eye()

 

  大数据培训哪家好大数据培训靠谱吗大数据培训排行榜大数据培训费用大数据培训多少钱等相关问题,欢迎咨询光环大数据官网在线客服:hadoop.aura.cn

 

 


大数据培训、人工智能培训、Python培训、大数据培训机构、大数据培训班、数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请专业的大数据领域知名讲师,确保教学的整体质量与教学水准。讲师团及时掌握时代潮流技术,将前沿技能融入教学中,确保学生所学知识顺应时代所需。通过深入浅出、通俗易懂的教学方式,指导学生更快的掌握技能知识,成就上万个高薪就业学子。 更多问题咨询,欢迎点击------>>>>在线客服

你可能也喜欢这些

在线客服咨询

领取资料

X
立即免费领取

请准确填写您的信息

点击领取
#第三方统计代码(模版变量) '); })();
'); })();