pythonopencv 人脸检测

代码使用到了dlibface_recognition两个库,需要安装一下,看一下代码

import face_recognition
import cv2

# 创建视频捕捉对象
video_capture = cv2.VideoCapture(0)
print(video_capture.isOpened())

# video_capture.set(3, 1280)
# video_capture.set(4, 480)

while video_capture.isOpened():
    # ret 表示读取是否成功
    # frame 具体的图像数据
    ret, frame = video_capture.read()

    # 尺寸缩放为原来的 1/4
    # 作用:为了加速人脸检测过程
    small_frame = cv2.resize(frame, None, fx=0.25, fy=0.25)

    # bgr -> rgb
    rgb_frame = small_frame[:, :, ::-1]

    # 拿到人脸坐标
    face_loc = face_recognition.face_locations(rgb_frame)

    for (top, right, bottlm, left), in zip(face_loc):
        top *= 4
        right *= 4
        bottlm *= 4
        left *= 4

        cv2.rectangle(
            frame,
            (left, top),
            (right, bottlm),
            (255, 0, 0),
            2
        )

    cv2.imshow("face detection", frame)

    # 退出条件
    if cv2.waitKey(1) & 0xFF == 27:
        break

video_capture.release()
cv2.destroyAllWindows()

可以通过dlib实现

# 导包
import dlib  # 人脸识别
import numpy as np  # python 科学计算
import cv2  # opencv 图像处理

# Dlib 检测器,人脸检测对象
detector = dlib.get_frontal_face_detector()


def face_detection(img):
    cv2.imshow("img_original", img)

    # cv2.waitKey(0)
    # exit()

    # 记录人脸矩阵大小
    height_max = 0
    width_sum = 0

    # Dlib 检测,0 表示原图,eg:1 表示放大 1 倍再检查
    faces = detector(img, 0)  # faces坐标数据
    print("faces:n", faces)
    # exit()

    # 判断是否检测到人脸
    if faces:
        # 计算生成的图像 img_blank 大小
        # 记录最大宽度高度创建空白图像 img_blank用于存储取出的人脸区域
        for k, d in enumerate(faces):

            # 计算人脸矩形大小
            height = d.bottom() - d.top()
            width = d.right() - d.left()

            # 处理宽度
            width_sum += width

            # 处理高度处理异常
            if height > height_max:
                height_max = height
            else:
                height_max = height_max

        # 生成用来显示的人脸图像
        # 3 表示图像是 rgb 彩图,如果是 1 表示图像是灰度图,只有 1 个通道
        img_blank = np.zeros((height_max, width_sum, 3), np.uint8)

        # 记录每次开始写入人脸像素宽度位置
        blank_start = 0

        # 将人脸填充img_blank
        for k, d in enumerate(faces):

            height = d.bottom() - d.top()
            width = d.right() - d.left()

            # 逐像素填充
            for i in range(height):
                for j in range(width):
                    img_blank[i][blank_start + j] = img[d.top() + i][d.left() + j]
            # 调整图像
            blank_start += width

    cv2.namedWindow("img_faces")  # , 2)
    cv2.imshow("img_faces", img_blank)
    cv2.waitKey(0)


if __name__ == "__main__":
    # 读取图像
    img_path = "./image/lakers.jpeg"  # 相对路径
    img = cv2.imread(img_path)  # 读取图片
    # print(img)  # 图片数组,每个数字表示像素 (0-255)
    # exit()
    face_detection(img)

    # 作业
    # 1、运行成功本案例
    # 2、下载 5 张图片没有人脸、1 张人脸、多张人脸,并成功运行代码进行检测

看一下效果
在这里插入图片描述

原文地址:https://blog.csdn.net/weixin_43327597/article/details/134605284

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_23462.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注