使用OpenCV computer vision kit实现人脸识别

介绍

OpenCV是用于机器视觉的最流行的函数库,拥有C++, C, Python 和 Java 接口,支持Windows、Linux、Mac OS、iOS 和 Android。

在网上有很多开源的项目采用了OpenCV,并实现了很多有趣的设计。我从一个网上找到了非常简单的人脸识别示例,只用了很少的几行Python代码就实现。具体步骤如下:

准备

  • 硬件
  • OpenCV computer vision kit

  • 软件

    • 预装了OpenCV的Ubuntu 14.04

下载源码

$ git clone https://github.com/pcduino/pcduino8-uno-guide
$ cd pcduino8-uno-guide/demo/2.FaceDetection/Webcam/
$ python webcam.py haarcascade_frontalface_default.xml

注意:确保摄像头被识别为/dev/video0。另外,如果使用了预案装OpenCV的系统镜像,可以在家目录下看到一个demo文件夹,该目录存放了相应的示例代码。

我用手机显示了一张照片放到摄像头前,确实能够检测到图片中出现的人脸,但是也出现了识别错误,识别结果如下图所示。

理解源代码

我在源码中添加了一些注释,帮助理解。

import cv2
import sys

cascPath = sys.argv[1]
faceCascade = cv2.CascadeClassifier(cascPath)

# set the video source to webcam which is /dev/video0
video_capture = cv2.VideoCapture(0)

while True:
    # Capture frame-by-frame
    ret, frame = video_capture.read()

   # Convert color to gray, because face detection don't need color
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    #Do face detection
    faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.1,
        minNeighbors=5,
        minSize=(30, 30),
        flags=cv2.cv.CV_HAAR_SCALE_IMAGE
    )

    # Draw a rectangle around the faces
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

    # Display the resulting frame with rectangle
    cv2.imshow('Video', frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything is done, release the capture
video_capture.release()
cv2.destroyAllWindows()

如果想了解更多信息,请见点击该参考链接:Face Detection in Python Using a Webcam