我正在尝试创建简单的代码来使用我的网络摄像头和 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()
我尝试了一些方法,例如更改图像类型和检测类型,但似乎没有任何效果。
抱歉没有提前回复。我有一些健康问题,需要休息。好吧,我想让你知道我的问题已经解决了。让我解释一下我是如何做到这一点的:我使用了开发人员已经创建的函数来标记这些图像。您可以在 Mediapipe 官方页面上找到此功能。据我所知,该函数直接访问结果并对其进行处理以将其标记在图像上。 非常感谢所有支持我的人!
https://ai.google.dev/edge/mediapipe/solutions/vision/face_ detector/python?hl=pt-br