人脸关键点识别

简介: 【6月更文挑战第21天】

只显示关键点,不显示摄像头画面

image.png

import numpy as np
from imutils import face_utils
import dlib
import cv2

p = "shape_predictor_68_face_landmarks.dat"
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(p)

cap = cv2.VideoCapture(0)

while True:

    _, image = cap.read()
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    rects = detector(gray, 0)
    # 尺寸可以根据需要调整,绘制新图像,用于只显示关键点,不显示人脸
    image = np.zeros((500, 500, 3), dtype="uint8")

    for (i, rect) in enumerate(rects):

        shape = predictor(gray, rect)
        shape = face_utils.shape_to_np(shape)

        for j, (x, y) in enumerate(shape):
            cv2.circle(image, (x, y), 1, (0, 255, 0), -1)
            # cv2.putText(image, str(j + 1), (x + 5, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 1)

    cv2.imshow("Output", image)
    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()
cap.release()

现有代码中,导致摄像头画面不显示的原因可能是在循环中创建了一个空白的图像数组,并且没有将检测到的人脸标记绘制到原始图像上,而是绘制到了这个空白图像上。具体来说,问题出在以下这段代码:

image = np.zeros((500, 500, 3), dtype="uint8")  # 尺寸可以根据需要调整

这行代码创建了一个500x500像素的空白图像,并且后续的操作都是在这个空白图像上进行的。因此,原始的摄像头画面并没有被显示出来。

为了让人脸正常显示,你需要将人脸标记绘制到原始图像上,而不是空白图像上。以下是修改后的代码段:

# ... 省略之前的代码 ...

while True:
    _, image = cap.read()  # 读取原始图像
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    rects = detector(gray, 0)

    for (i, rect) in enumerate(rects):
        shape = predictor(gray, rect)
        shape = face_utils.shape_to_np(shape)

        # 绘制人脸标记到原始图像上
        for j, (x, y) in enumerate(shape):
            cv2.circle(image, (x, y), 1, (0, 255, 0), -1)
            # cv2.putText(image, str(j + 1), (x + 5, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 1)

    # 显示原始图像,上面有绘制的人脸标记
    cv2.imshow("Output", image)
    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

# ... 省略之后的代码 ...

注意,我已经将创建空白图像的代码行删除了,并且将绘制人脸标记的代码移动到了原始图像上。这样,摄像头的画面就会正常显示,并且上面会有人脸标记。

目录
相关文章
|
1月前
|
机器学习/深度学习 算法 计算机视觉
yolov8人脸识别-脸部关键点检测(代码+原理)
yolov8人脸识别-脸部关键点检测(代码+原理)
499 0
|
固态存储 计算机视觉 异构计算
一起来学MediaPipe(一)人脸及五官定位检测
一起来学MediaPipe(一)人脸及五官定位检测
2950 0
一起来学MediaPipe(一)人脸及五官定位检测
|
9天前
人脸关键点识别
【6月更文挑战第19天】
12 4
|
8天前
|
机器学习/深度学习 计算机视觉
人脸关键点
【6月更文挑战第20天】
18 5
|
21天前
|
计算机视觉 Python
人脸关键点
【6月更文挑战第7天】
11 2
|
14天前
|
机器学习/深度学习 XML 算法
第5章 人脸检测和识别
第5章 人脸检测和识别
|
14天前
|
机器学习/深度学习 算法 数据挖掘
第7章 目标检测与识别
第7章 目标检测与识别
|
1月前
|
机器学习/深度学习 人工智能 图计算
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
48 0
|
机器学习/深度学习 人工智能 自然语言处理
了解面部识别的不同算法
任何面部检测和识别程序或系统都必须以人脸识别算法为核心。这些算法由专家分为两大类。几何方法专注于识别特征。为了从图像中提取值,应用了光度统计方法。然后,为了删除变体,将这些值与模板进行比较。此外,算法可以分为两组:基于特征的模型和整体模型。虽然整体方法将人脸视为一个整体,但前者侧重于面部特征并评估其空间特征并与其他特征的联系。
155 0
|
机器学习/深度学习 传感器 算法
【图像检测-人脸检测】基于深度学习的人脸检测和面部标志定位附matlab代码
【图像检测-人脸检测】基于深度学习的人脸检测和面部标志定位附matlab代码