• 发文
  • 评论
  • 微博
  • 空间
  • 微信

使用 Python 进行面部和眼睛检测

磐创AI 2023-03-27 15:08 发文

通过使用 OpenCV,你可以识别面部和眼睛等对象,并使用 Haar 级联算法实时跟踪它们。

Haar Cascade 是一种分类器,用于检测其训练对象。我们将使用 Face cascade和 Eyes cascade。你可以使用 Google 查找你可能想要检测的各种 Haar Cascades。

安装 OpenCVpip install opencv-python

从照片中检测

我假设你已经从上面的链接下载了haarcascade_eye.xml和haarcascade_frontalface_default.xml,并将这些文件放在项目的数据目录中。

人脸检测

我们将在下图中检测人脸。

首先导入OpenCV库、Image和haarcascade_frontalface_default.xml。

import cv2

face_cascade = cv2.CascadeClassifier('.Datahaarcascade_frontalface_default.xml')

nadia = cv2.imread('./Data/Nadia_Murad.jpg',0)

通过添加 0,图像在导入过程中变为黑白。

现在让我们创建一个函数来识别面部并在其周围绘制一个正方形。

def detect_face(img):

    face_img = img.copy()

    face_rect = face_cascade.detectMultiScale(face_img,scaleFactor=1.2,minNeighbors=5)

    for (x,y,w,h) in face_rect:

        cv2.rectangle(face_img,(x,y),(x+w,y+h),(255,255,255),10)

    return face_img

现在图像已传递给函数,将在脸部周围创建一个方框。此外,我们将构建一个显示图像,并在按下“Q”时结束的 while 循环。

result = detect_face(nadia)

while True:

    cv2.imshow('',result)

    code = cv2.waitKey(10)

    if code == ord('q'):

        break

运行该文件以查看结果。

眼睛检测

检测眼睛与检测面部非常相似。只需将你的haarcascade_frontalface_default.xml文件替换为haarcascade_eye.xml.

这是代码。

import cv2

eye_cascade = cv2.CascadeClassifier('.Datahaarcascade_eye.xml')

nadia = cv2.imread('./Data/Nadia_Murad.jpg',0)

def detect_eyes(img):

    face_img = img.copy()

    eyes = eye_cascade.detectMultiScale(face_img,scaleFactor=1.2,minNeighbors=5) 

    

    for (x,y,w,h) in eyes: 

        cv2.rectangle(face_img, (x,y), (x+w,y+h), (255,255,255), 10) 

    return face_img

result = detect_eyes(nadia)

while True:

    cv2.imshow('',result)

    code = cv2.waitKey(10)

    if code == ord('q'):

        break

运行该文件以查看结果。

从相机检测

在这里,我们将使用 Haar Cascade 的分类器,让我们的相机不仅可以检测而且可以跟踪我们的面部和眼睛。

人脸检测

让我们首先从人脸检测开始。导入 OpenCV 库和haarcascade_frontalface_default.xml文件。我们将使用与上面相同的detect_face函数。

import cv2

face_cascade = cv2.CascadeClassifier('.Datahaarcascade_frontalface_default.xml')

def detect_face(img):

    face_img = img.copy()

    face_rect = face_cascade.detectMultiScale(face_img,scaleFactor=1.2,minNeighbors=5)

    for (x,y,w,h) in face_rect:

        cv2.rectangle(face_img,(x,y),(x+w,y+h),(255,255,255),10)

    return face_img

我们将使用一个名为 VideoCapture() 的函数。此函数允许我们打开相机并捕获视频,并将其转换为帧。

现在创建一个 while 循环并将这些帧发送到我们的函数。该函数将返回那些面部周围有方框的帧。

cap = cv2.VideoCapture(0)

while True:

    ret,frame = cap.read()

    frame = detect_face(frame)

    cv2.imshow('Face Detection',frame)

    code = cv2.waitKey(10)

    if code == ord('q'):

        break

cap.release()

cv2.destroyAllWindows()

运行该文件以查看结果。

眼睛检测

与人脸检测类似,我们现在将使用haarcascade_eye.xml文件来检测眼睛。导入haarcascade_eye.xml文件并使用与人脸检测相同的代码。

import cv2

eye_cascade = cv2.CascadeClassifier('.Datahaarcascade_eye.xml')

def detect_eye(img):

    eye_img = img.copy()

    eye_rect = eye_cascade.detectMultiScale(eye_img,scaleFactor=1.2,minNeighbors=5)

    for (x,y,w,h) in eye_rect:

        cv2.rectangle(eye_img,(x,y),(x+w,y+h),(255,255,255),10)

    return eye_img

cap = cv2.VideoCapture(0)

while True:

    ret,frame = cap.read()

    frame = detect_eye(frame)

    cv2.imshow('Eye Detection',frame)

    code = cv2.waitKey(10)

    if code == ord('q'):

        break

cap.release()

cv2.destroyAllWindows()

现在运行该文件以查看结果。

结论

OpenCV 是一个非常强大的机器学习库。

源代码:https://github.com/Priyank010/Face-and-Eye-Detection

声明:本文为OFweek维科号作者发布,不代表OFweek维科号立场。如有侵权或其他问题,请及时联系我们举报。
2
评论

评论

    相关阅读

    暂无数据

    磐创AI

    人工智能前沿技术分享。...

    举报文章问题

    ×
    • 营销广告
    • 重复、旧闻
    • 格式问题
    • 低俗
    • 标题夸张
    • 与事实不符
    • 疑似抄袭
    • 我有话要说
    确定 取消

    举报评论问题

    ×
    • 淫秽色情
    • 营销广告
    • 恶意攻击谩骂
    • 我要吐槽
    确定 取消

    用户登录×

    请输入用户名/手机/邮箱

    请输入密码