Python调用笔记本摄像头,并实现人脸检测功能

回家第一天感觉好无聊,一天睡了十几个小时,电视剧也看完了,就玩玩Python调用笔记本摄像头并实现人脸检测。

我们使用的是Python中的opencv库实现人脸检测,前面已经有一篇博客介绍如何下载opencv库,今天,我们就用opencv库实现摄像头的调用及人脸检测。

1.调用摄像头

首先介绍一下如何调用笔记本的摄像头,这里我们使用opencv库中的VideoCapture()函数创建摄像头对象,其参数为0是表示调用第一个摄像头,一般就是笔记本的内置摄像头。

import cv2
#定义摄像头
cap = cv2.VideoCapture(0)

调用完成摄像头后,我们要逐帧显示,这里我们就要用到while函数不断显示摄像头获取的每一帧图像,当检测到退出‘q’时,退出,释放摄像头,并销毁所有窗口:

while(1)
    ret,frame = cap.read()#读取每一帧
    cv2.imshow('摄像头',frame)#显示每一帧
    if cv2.waitKey(1) & 0xFF == ord(q):
        break
cap.release()
cv2.destroyAllWindows()   

2.人脸检测

人脸检测属于目标检测中的一部分,主要包括两个方面:

①首先是对待检测的目标进行特征提取,并建立相应的检测模型;

②然后用建立的模型去检测输入的图像,如果有待检测目标,就框选出相应的区域。

常用的人脸检测算法有基于Harr特征的人脸检测器、基于LBP特征的人脸检测器等,训练模型需要大量的数据,opencv中给我们提供了训练好的模型,我们下载opencv库中会有相应的数据,我们可以直接使用进行人脸检测,如果没有相应的文件可以去Github上下载:https://github.com/opencv/opencv/tree/master/data/haarcascades

下面我们使用opencv中训练好的模型进行人脸检测:

#Python中实现视频流中的人脸检测
import cv2
cap = cv2.VideoCapture(0)
face = cv2.CascadeClassifier(r'C:\\Users\\Administrator\\Anaconda3\\Lib\\opencv-master\\opencv-master\\data\\haarcascades\\haarcascade_frontalface_default.xml')
eye =  cv2.CascadeClassifier(r'C:\\Users\\Administrator\\Anaconda3\\Lib\\opencv-master\\opencv-master\\data\\`\\haarcascade_eye.xml')
smile = cv2.CascadeClassifier(r'C:\\Users\\Administrator\\Anaconda3\\Lib\\opencv-master\\opencv-master\\data\\haarcascades\\haarcascade_smile.xml')
while(1):
    ret,frame = cap.read()
    gray = cv2.cvtColor(frame,cv2.COLOR_RGB2GRAY)
    faces = face.detectMultiScale(gray,1.1,3,0,(200,100))
    for (x,y,w,h) in faces:
        img = cv2.rectangle(frame,(x,y),(x+w,y+h),(255,255,0),2)
        gray_roi = gray[y:y+h,x:x+h]
        eyes = eye.detectMultiScale(gray_roi,1.02,3,0,(50,50))
        for (ex,ey,ew,eh) in eyes:
            cv2.rectangle(img,(x+ex,y+ey),(x+ex+ew,y+ey+eh),(0,255,0),2)
    smiles = smile.detectMultiScale(gray,1.1,3,0,(100,100))
    for (sx,sy,sw,sh) in smiles:
        cv2.rectangle(frame,(sx,sy),(sx+sw,sy+sh),(0,255,255),2)
    cv2.imshow('摄像头',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

今天没洗头,我就不上图了,大家自行运行看下效果吧!!!滑稽脸~~~

每天进步一点点~

 


版权声明:本文为qq_35166974原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。