欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python3 视频实时识别人脸

程序员文章站 2022-07-12 20:53:20
...

python3 视频实时识别人脸

今天把我前几天学的图片人脸识别简单的做一下总结,与大家共勉。我用的是python3.6和cv2、numpy这些你可以在python插件库中寻找(http://www.lfd.uci.edu/~gohlke/pythonlibs/)。
我用的是手机摄像头作为视频来源,通过局域网ip来分享。这里介绍安卓的朋友可以去应用市场下载“ip摄像头”。
下面我们就来简单的介绍一下代码:
import cv2
import numpy as np

引用cv2 和 numpy包。

cv2.namedWindow("camera")#命名一个窗口的名字。
video="http://admin:aaa@qq.com:8081/"#链接手机局域网
cap = cv2.VideoCapture(video)#打开视频并解析
success, frame = cap.read()#解析每一帧的图片
color = (255,0,0)#人脸识别的时候框出来的框框颜色
classfier = cv2.CascadeClassifier(r'G:/python/Lib/haarcascades/haarcascade_frontalface_alt_tree.xml')

加载人脸识别的xml解析文件,要是没有的话可以网上找。

while success:
    success, frame = cap.read()
    size = frame.shape[:2]# 获得当前桢彩色图像的大小
    image = np.zeros(size, dtype=np.float16)
    #np.zeros(shape, dtype=float, order='C')
    # 参数:shape: 形状
    # dtype: 数据类型,可选参数,默认numpy.float64
    # dtype类型:t, 位域, 如t4代表4位
    # b, 布尔值,true or false
    # i, 整数, 如i8(64位)
    # u, 无符号整数,u8(64位)
    # f, 浮点数,f8(64位)
    # c, 浮点负数,
    # o, 对象,
    # s, a,字符串,s24
    # u, unicode, u24
    # order: 可选参数,c代表与C语言类似,行优先;F代表列优先
    image = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.equalizeHist(image, image)
    divisor = 8
    h, w = size
    minSize = (w // divisor, h // divisor)
    faceRects = classfier.detectMultiScale(image, 1.1, 2 ,cv2.CASCADE_SCALE_IMAGE, minSize)
   #image:图片路径
    #1.1:被检测对象的尺度变化。尺度越大,越容易漏掉检测的对象,但检测速度加快;尺度越小,检测越细致准确,但检测速度变慢
    #2:数值越大,检测到对象的条件越苛刻,反之检测到对象的条件越宽松;
    #minSize:检测的对象最小尺寸,单位是像素*像素,使对象落在检测器的大小范围内;
    #maxSize:检测的对象最大尺寸,单位是像素 * 像素,使对象落在检测器的大小范围内。
    #cv2.CASCADE_SCALE_IMAGE::scale0为比例系数,即被检测图像每一次被压缩的比例
    #说明:该方法返回的是一个列表,每个列表元素是长度为四的元组,分别表示脸部左上角的x,y值,脸部区域的宽度和高度。
    if len(faceRects) > 0:
        for faceRect in faceRects:
            x, y, w, h = faceRect
            cv2.rectangle(frame, (x, y), (x + w, y + h), color)
    cv2.imshow("camera", frame)
    key = cv2.waitKey(10)#按键退出
    c = chr(key & 255)
    if c in ['q','Q', chr(27)]:
        break
cv2.destroyWindow("test")

这是我在网上找的一张毕业照,做了一下测试,识别率在90%以上。照片如有不妥请见谅。
github代码:https://github.com/DIVIBEAR/pythonDemo/tree/master/demo/face

python3 视频实时识别人脸