基于python3+OpenCV实现人脸和眼睛识别

  

首先讲解一下“基于python3+OpenCV实现人脸和眼睛识别”的完整攻略:

  1. 安装 OpenCV
    首先需要安装 OpenCV 库,可以通过命令行输入以下命令进行安装:pip install opencv-python

  2. 获取人脸和眼睛识别的模型文件
    OpenCV 中自带了人脸和眼睛识别的模型文件,这些文件保存在 opencv/data/haarcascades 文件夹下,可以直接使用。

  3. 加载图像
    使用 OpenCV 加载图像,可以使用 cv2.imread(path) 函数加载该路径下的图像文件。这里将加载两张图片,分别是 test1.jpgtest2.jpg

import cv2

img1 = cv2.imread('test1.jpg')
img2 = cv2.imread('test2.jpg')
  1. 实现人脸和眼睛识别
    使用 cv2.CascadeClassifier() 函数来调用 Haar级联分类器 对象,从而识别出人脸和眼睛。其中,可以通过 detectMultiScale() 函数设置具体的识别参数。
face_cascade = cv2.CascadeClassifier('opencv/data/haarcascades/haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('opencv/data/haarcascades/haarcascade_eye.xml')

faces = face_cascade.detectMultiScale(gray, 1.3, 5)  # 在灰度图上检测全景人脸
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)  # 在图像中标出人脸位置
    roi_gray = gray[y:y+h, x:x+w]  # 精确定位人脸位置
    roi_color = img[y:y+h, x:x+w]

    # 在人脸的区域中检测眼睛
    eyes = eye_cascade.detectMultiScale(roi_gray)
    for (ex, ey, ew, eh) in eyes:
        cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)  # 在图像中标出眼睛位置
  1. 显示图像
    使用 cv2.imshow() 函数来显示已经绘制好的图片,并通过 cv2.waitKey() 函数等待按下键盘任意键,最后通过 cv2.destroyAllWindows() 函数关闭图像窗口。
cv2.imshow('Test1', img1)
cv2.imshow('Test2', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

接下来,我将通过两个示例说明如何使用上述攻略实现人脸和眼睛识别。

示例一:单张图片人脸和眼睛识别

以下是单张图片的实现示例代码:

import cv2

# 加载图像
img = cv2.imread('test1.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 人脸和眼睛识别
face_cascade = cv2.CascadeClassifier('opencv/data/haarcascades/haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('opencv/data/haarcascades/haarcascade_eye.xml')

faces = face_cascade.detectMultiScale(gray, 1.3, 5)  # 在灰度图上检测全景人脸
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)  # 在图像中标出人脸位置
    roi_gray = gray[y:y+h, x:x+w]  # 精确定位人脸位置
    roi_color = img[y:y+h, x:x+w]

    # 在人脸的区域中检测眼睛
    eyes = eye_cascade.detectMultiScale(roi_gray)
    for (ex, ey, ew, eh) in eyes:
        cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)  # 在图像中标出眼睛位置

# 显示图像
cv2.imshow('Single Face Detection', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

示例二:视频流实时人脸和眼睛识别

以下是通过打开摄像头并实时检测人脸和眼睛的示例代码:

import cv2

# 读取摄像头
cap = cv2.VideoCapture(0)

# 人脸和眼睛识别
face_cascade = cv2.CascadeClassifier('opencv/data/haarcascades/haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('opencv/data/haarcascades/haarcascade_eye.xml')

while True:
    ret, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    faces = face_cascade.detectMultiScale(gray, 1.3, 5)  # 在灰度图上检测全景人脸
    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)  # 在图像中标出人脸位置
        roi_gray = gray[y:y+h, x:x+w]  # 精确定位人脸位置
        roi_color = img[y:y+h, x:x+w]

        # 在人脸的区域中检测眼睛
        eyes = eye_cascade.detectMultiScale(roi_gray)
        for (ex, ey, ew, eh) in eyes:
            cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)  # 在图像中标出眼睛位置

    # 显示图像
    cv2.imshow('Realtime Face Detection', img)
    # 等待按下键盘上的“q”键退出程序
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放摄像头并销毁所有窗口
cap.release()
cv2.destroyAllWindows()

以上就是“基于python3+OpenCV实现人脸和眼睛识别”的完整攻略,以及两个示例演示。

相关文章