人脸关键点识别

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

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

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

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

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

目录
相关文章
|
6月前
|
机器学习/深度学习 算法 计算机视觉
yolov8人脸识别-脸部关键点检测(代码+原理)
yolov8人脸识别-脸部关键点检测(代码+原理)
|
固态存储 计算机视觉 异构计算
一起来学MediaPipe(一)人脸及五官定位检测
一起来学MediaPipe(一)人脸及五官定位检测
3242 0
一起来学MediaPipe(一)人脸及五官定位检测
|
4月前
人脸关键点检测
【7月更文挑战第31天】人脸关键点检测。
29 3
|
4月前
|
TensorFlow 算法框架/工具 Python
识别图像
【7月更文挑战第29天】识别图像。
81 8
|
4月前
|
机器学习/深度学习 算法 数据库
简单的面部识别分类
【7月更文挑战第31天】简单的面部识别分类。
44 4
|
5月前
人脸关键点识别
【6月更文挑战第21天】
29 4
人脸关键点识别
|
4月前
|
机器学习/深度学习 并行计算 异构计算
人脸标注
【7月更文挑战第30天】人脸标注。
36 1
|
4月前
|
机器学习/深度学习 算法 vr&ar
深度学习之人脸关键点检测
人脸关键点检测的主要任务是识别并定位人脸图像中的特定关键点,例如眼睛的角点、眉毛的顶点、鼻子的底端、嘴角等。这些关键点不仅能提供面部结构的几何信息,还可以用于分析表情、识别个体,甚至检测面部姿势。
67 2
|
5月前
|
机器学习/深度学习 计算机视觉
人脸关键点
【6月更文挑战第20天】
48 5
|
5月前
|
计算机视觉 Python
人脸关键点
【6月更文挑战第7天】
28 2