物联网
您现在所在的位置:首页>企业动态>物联网

人脸检测和识别

编辑:学到牛牛IT培训    发布日期: 2024-01-22 09:10:47  

人脸检测是指在图像中完成人脸定位的过程。人脸识别是在人脸检测的基础上进一步判断人的身份。


1、基于Haar的人脸检测

OpenCV中提供了多个训练好的分类器,其中Haar级联分类器用来进行人脸检测。

分类器文件在OpenCV源代码的“..Python3.8Libsite-packagescv2data”文件夹中。

该文件夹中有以下常用的分类器文件:

haarcascade_eye.xml 人眼检测

haarcascade_eye_tree_eyeglasses.xml 眼镜检测

haarcascade_frontalcatface.xml 猫脸检测

haarcascade_frontalface_alt.xml 人脸检测

haarcascade_frontalface_default.xml 人脸检测

haarcascade_profileface.xml 侧脸检测


cv2.CascadeClassifier()函数用于加载分类器,其基本格式如下。

faceClassifier = cv2.CascadeClassifier(filename)

参数说明:

filename: 为级联分类器的文件名。

faceClassifier: 为返回的级联分类器对象。


级联分类器对象的detectMultiScale()方法用于执行检测,其基本格式如下。

objects = faceClassifier.detectMultiScale(image)

参数说明:

objects: 为返回的目标矩形集,矩形中为人脸。

image: 为输入图像,通常为灰度图像。


案例1:识别单人人脸

import cv2


# 读取图像

img = cv2.imread("img/dr.png")


# 将RGB图像转为灰度图,其目的是方便人脸识别

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


# 创建分类器,并加载人脸检测文件

face = cv2.CascadeClassifier("haar/haarcascade_frontalface_default.xml")


# 执行人脸检测,gray为被检测对象,返回检测到的人脸集数据

faces = face.detectMultiScale(image=gray)


# 单人检测。获取一个人脸的数据,其中xy为左上顶点坐标,w为人脸宽度,h为人脸高度

x, y, w, h = faces[0]


# 在原图中画出人脸位置。(x, y)为左上顶点,(x+w, y+h)为右下项点,1为线宽

cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 1)


cv2.imshow("test", img)

cv2.waitKey(0)

运行结果:


1.png


案例2:识别多人人脸

import cv2


# 读取图像

img = cv2.imread("img/drz.jpg")


# 将RGB图像转为灰度图,其目的是方便人脸识别

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


# 创建分类器,并加载人脸检测文件

face = cv2.CascadeClassifier("haar/haarcascade_frontalface_default.xml")


# 执行人脸检测,gray为被检测对象,返回检测到的人脸集数据

faces = face.detectMultiScale(image=gray)


# 识别多人人脸

for f in faces:

    x, y, w, h = f

    # 根据识别的特征,反复往img图像中标注人脸

    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 1)


cv2.imshow("test", img)

cv2.waitKey(0)

运行结果:

2.png


案例3:猫脸识别

使用haarcascade_frontalcatface.xml分类器文件,可以检测图像中的猫脸。

import cv2


# 读取图像

img = cv2.imread("img/cat.jpg")


# 将RGB图像转为灰度图,其目的是方便图像识别

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


# 创建分类器,并加载猫脸检测文件

face = cv2.CascadeClassifier("haar/haarcascade_frontalcatface.xml")


# 执行猫脸检测,gray为被检测对象,返回检测到的猫脸集数据

faces = face.detectMultiScale(image=gray)


# 识别多个猫脸

for f in faces:

    x, y, w, h = f

    # 根据识别的特征,反复往img图像中标注猫脸

    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 1)


cv2.imshow("test", img)

cv2.waitKey(0)

运行结果:

3.png


案例4:检测摄像头中的人脸

import cv2


# 打开摄像头

video = cv2.VideoCapture(0)


# 加载人脸分类器

face = cv2.CascadeClassifier("haar/haarcascade_frontalface_default.xml")


while video.isOpened():

    # 读取每一帧图像

    b, frame = video.read()


    if b:

        # 将图像转为灰度图

        gary = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)


        # 检测每一帧图像中的人脸

        faces = face.detectMultiScale(gary)


        # 标注检查出的人脸

        for f in faces:

            x, y, w, h = f

            cv2.rectangle(frame, (x, y), (x+w, y+h), (246, 0, 220), 2)


        cv2.imshow("test", frame)

        key = cv2.waitKey(30)

        if key == 27:

            break

    else:

        break

# 释放资源

video.release()

cv2.destroyAllWindows()


免费试学
课程好不好,不如实地听一听

推荐阅读

  • 计算机专业的就业难度怎么样?

    国产午夜鲁丝片AV无码蜜臀,福利免费观看午夜体检区,人妻少妇精品无码专区APP,伊人久久大香线蕉成人综合网,国产妓女在线观看视频,亚洲成a人片在线观看尤物,亚洲精品国产一二三无码AV,亚汌国产一区二区三区

  • 嵌入式软件开发学习路线

    国产午夜鲁丝片AV无码蜜臀,福利免费观看午夜体检区,人妻少妇精品无码专区APP,伊人久久大香线蕉成人综合网,国产妓女在线观看视频,亚洲成a人片在线观看尤物,亚洲精品国产一二三无码AV,亚汌国产一区二区三区

  • 为什么自学编程那么难?

    国产午夜鲁丝片AV无码蜜臀,福利免费观看午夜体检区,人妻少妇精品无码专区APP,伊人久久大香线蕉成人综合网,国产妓女在线观看视频,亚洲成a人片在线观看尤物,亚洲精品国产一二三无码AV,亚汌国产一区二区三区

  • IT培训机构出来的到底好不好就业呢?

    国产午夜鲁丝片AV无码蜜臀,福利免费观看午夜体检区,人妻少妇精品无码专区APP,伊人久久大香线蕉成人综合网,国产妓女在线观看视频,亚洲成a人片在线观看尤物,亚洲精品国产一二三无码AV,亚汌国产一区二区三区

封闭学习

2

1

18180749853

蜀ICP备2021001672号

在线咨询 免费试听VIP课程