python之动态人脸识别

目标: 动态人脸识别

运行准备
•所需文件:haarcascade_frontalface_default.xml
•获取方式:
1.打开cmd,输入指令:pip install -i https://mirrors.aliyun.com/pypi/simple cv2
2.在安装python的目录下面,依次打开文件夹\Lib\site-packages\cv2\data
所需文件就在里面了

实现效果:打开电脑摄像头,捕获人脸。

#1.导入库
import cv2
#2.打开摄像头(参数0保持摄像头不关闭)
capture = cv2.VideoCapture(0) 

#3.加载人脸模型(费舍尔人脸建模,路径需改)
face_model = cv2.CascadeClassifier(r'C:\Users\zs\Desktop\python\haarcascade_frontalface_default.xml')
#3获取摄像头的实时画面
while True:
    result,image = capture.read()
    #4.图像的灰度处理(opencv不适用RGB通道,用GBR,所以需转化)
    gray = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
    #5.检查人脸(120x120的识别框)
    faces = face_model.detectMultiScale(gray,1.1,3,0,(120,120))
    #6.标记人脸(10是线的宽度 ,元组三元素是GBR,2是线宽度)
    for (x,y,w,h) in faces:
        cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),2)
    #7.显示图片
    if cv2.imshow("chuangkou",image):
        break
    #8.暂停窗口  5us读取一帧
    cv2.waitKey(5)& 0xFF == ord("q")   

#8.2释放资源
capture.release()

#9.销毁窗口
cv2.destroyAllWindows()

下面代码也可实现人脸识别,出现窗口课按下键盘的’ESC’关闭退出。

注意:haarcascade_eye.xml文件也在python目录文件夹\Lib\site-packages\cv2\data之下
如果报错,原因可能是你路径有问题,注意单引号外面还有一个’r’,这是用以区分Python目录符号\,你可以将haarcascade_eye.xml和haarcascade_frontalface_default.xml文件拷贝至你运行的同个目录下,再去运行。

import numpy as np
import cv2

# 人脸识别分类器
faceCascade = cv2.CascadeClassifier(r'C:\Users\zs\Desktop\python\haarcascade_frontalface_default.xml')

# 识别眼睛的分类器
pathf =r'C:\Users\zs\Desktop\python\haarcascade_eye.xml'
eyeCascade = cv2.CascadeClassifier(pathf)

# 开启摄像头
cap = cv2.VideoCapture(0)
ok = True

while ok:
    # 读取摄像头中的图像,ok为是否读取成功的判断参数
    ok, img = cap.read()
    # 转换成灰度图像
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # 人脸检测
    faces = faceCascade.detectMultiScale(
        gray,     
        scaleFactor=1.2,
        minNeighbors=5,     
        minSize=(32, 32)
    )

    # 在检测人脸的基础上检测眼睛
    result = []
    for (x, y, w, h) in faces:
        fac_gray = gray[y: (y+h), x: (x+w)]
        eyes = eyeCascade.detectMultiScale(fac_gray, 1.3, 2)

        # 眼睛坐标的换算,将相对位置换成绝对位置
        for (ex, ey, ew, eh) in eyes:
            result.append((x+ex, y+ey, ew, eh))

    # 画矩形
    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

    for (ex, ey, ew, eh) in result:
        cv2.rectangle(img, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)
 
    cv2.imshow('video', img)

    k = cv2.waitKey(1)
    if k == 27:    # press 'ESC' to quit
        break
 
cap.release()
cv2.destroyAllWindows()
发布了43 篇原创文章 · 获赞 17 · 访问量 2676
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览