我在使用 MediaPipe 的人脸检测中绘制框时遇到问题

问题描述 投票:0回答:1

我正在尝试创建简单的代码来使用我的网络摄像头和 MediaPipe 库来检测面部,但我遇到了一个问题。当我尝试在 mp_image 上绘制框时,它没有出现。有人可以帮我吗?

#------ importamos las librerias -----------#
import cv2
import mediapipe as mp
import numpy as np


#--------- Declarar el detector --------#
detector = mp.tasks.vision.FaceDetector
dibujo = mp.solutions.drawing_utils

#----realizar la video captura----#
cap = cv2.VideoCapture(0)

#------Inicializamos parametros de configuracion-----#
BaseOptions = mp.tasks.BaseOptions
FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions
FaceDetectorResult = mp.tasks.vision.FaceDetectorResult
VisionRunningMode = mp.tasks.vision.RunningMode



#------- Crear una instancia para la detencion en tiempo real ------#
def print_result(result: FaceDetectorResult, output_image, timestamp_ms: int):
    print('face detector result: {}'.format(result))

    # Verificar si existen detecciones para dibujarlas
    if result.detections:
        # dibujar cada rostro detectado
        for detection in result.detections:

            #PROBLEMAS CON LOS TIPO DE DATOS
            output_image = np.array(output_image)
            print(f"image = {type(output_image)}")
            det_pb2 = detection.to_pb2()
            dibujo.draw_detection(output_image, det_pb2)
            print('detected faces')

#-----------Iniciamos la configuracion----------------#
options = FaceDetectorOptions(
    base_options = BaseOptions(model_asset_path='model.tflite'),
    running_mode = VisionRunningMode.LIVE_STREAM,
    min_detection_confidence = 0.5,
    result_callback = print_result
)


# Obtén la tasa de cuadros por segundo (FPS) para calcular el timestamp
fps = cap.get(cv2.CAP_PROP_FPS)
frame_number = 0

with detector.create_from_options(options) as rostros:


    while True:

        # La lectura de la video captura
        ret, frame = cap.read()

        # Eliminar el error de movimiento
        frame = cv2.flip(frame,1)

        # Correcion de color
        rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

        # Obtener frame_timestamp_ms
        frame_timestamp_ms = int((frame_number / fps) * 1000)
        frame_number += 1

        # Convertimos el frame a modelo de imagen mp.image de mediapipe
        mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=rgb)
        # Mandamos la deteccion del rostro en frame
        rostros.detect_async(mp_image,frame_timestamp_ms)


        #Mostramos los fotogramas
        cv2.imshow("Camara", mp_image)

        #Leemos el teclado
        t = cv2.waitKey(1)
        if t == 27:
            break

cap.release()
cv2.destroyAllWindows()

我尝试了一些方法,例如更改图像类型和检测类型,但似乎没有任何效果。

python computer-vision face-detection mediapipe
1个回答
0
投票

抱歉没有提前回复。我有一些健康问题,需要休息。好吧,我想让你知道我的问题已经解决了。让我解释一下我是如何做到这一点的:我使用了开发人员已经创建的函数来标记这些图像。您可以在 Mediapipe 官方页面上找到此功能。据我所知,该函数直接访问结果并对其进行处理以将其标记在图像上。 非常感谢所有支持我的人!

https://ai.google.dev/edge/mediapipe/solutions/vision/face_ detector/python?hl=pt-br

© www.soinside.com 2019 - 2024. All rights reserved.