美文网首页
OpenCV 实时人脸检测

OpenCV 实时人脸检测

作者: 梁睿坤 | 来源:发表于2018-06-13 15:48 被阅读272次

    目的

    • 试验OpenCV的实时图像捕获
    • 实时窗口内对每一帧的图片进行处理
    • 识别视频窗口内的人脸,并用一个矩形画出来

    人脸检测方法有许多,比如opencv自带的人脸Haar特征分类器和dlib人脸检测方法等。

    对于opencv的人脸检测方法,优点是简单,快速;存在的问题是人脸检测效果不好。正面/垂直/光线较好的人脸,该方法可以检测出来,而侧面/歪斜/光线不好的人脸,无法检测。因此,该方法不适合现场应用。而对于dlib人脸检测方法采用64个特征点检测,效果会好于opencv的方法识别率会更高,但是检测力度与性能也难以达到现场应用标准。

    而本文的目标是只是用OpenCV来初尝人脸识别技术,所以只是用最简单的办法通过OpenCV的标准方式与dLib分别实现同样的代码效果。

    设计思路:

    通过OpenCV打开本机上的摄像头

    cameraCapture = cv2.VideoCapture(0)
    

    开始第一帧图像的捕获,这个方法用来测试当前的摄像头是否可用

    success, frame = cameraCapture.read()
    

    把我在“OpenCV初步”中讲述的从静态图片中识别人脸的代码提取出来成为一个show_face函数:

    def show_faces (img) :
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 图像灰化
        faces = face_cascade.detectMultiScale(gray, 1.3, 5)  # 识别人脸
        for (x, y, w, h) in faces:
            img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)  # 在人脸区域画一个正方形出来
        cv2.imshow("Camera", img)
    

    如果第一帧图像捕获成功则可以认为本机的摄像头可以,并建立一个无限循环(退出条件为敲击键盘),继续对下一帧图像进行捕获,然后显示到观察窗口上。

    while success and cv2.waitKey(1) == -1:
        success, frame = cameraCapture.read()
        show_faces(frame)
    

    以下为本例的全部代码:

    # coding=utf-8
    
    import cv2
    img_size = 128
    face_cascade = cv2.CascadeClassifier(r'./data/haarcascades/haarcascade_frontalface_default.xml')
    
    # 打开摄像头并开始读取画面
    cameraCapture = cv2.VideoCapture(0)
    success, frame = cameraCapture.read()
    
    def show_faces (img) :
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 图像灰化
        faces = face_cascade.detectMultiScale(gray, 1.3, 5)  # 识别人脸
        for (x, y, w, h) in faces:
            img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)  # 在人脸区域画一个正方形出来
        cv2.imshow("Camera", img)
    
    while success and cv2.waitKey(1) == -1:
        success, frame = cameraCapture.read()
        show_faces(frame)
    
    cameraCapture.release() # 关闭摄像头
    cv2.destroyAllWindows() # 释放所有被打开的窗口资源
    

    相关文章

      网友评论

          本文标题:OpenCV 实时人脸检测

          本文链接:https://www.haomeiwen.com/subject/omyarftx.html