La detección de género de las imágenes faciales es una de las muchas aplicaciones fascinantes de la visión por computadora. En este proyecto, combinamos OpenCV para la ubicación de confrontación y la API RoboFlow para la clasificación de género, haciendo un dispositivo que identifica caras, los verifica y predice su género. Utilizaremos Python, particularmente en Google Colab, para escribir y ejecutar este código. Este directo ofrece un tutorial fácil de seguir del código, aclarando cada paso para que pueda comprenderlo y aplicarlo a sus empresas.
Este artículo fue publicado como parte del Data Science Blogathon.
Paso 1: Importar bibliotecas y cargar imagen
de Google.Colab Import Files Importar CV2 importar numpy como np de matplotlib import pyplot como plt de Inference_SDK Importación InferenciaHTTPClient # Imagen de carga cargado = files.upload () # Cargue la imagen para el nombre de archivo en uploaded.keys (): img_path = nombre de archivo
from google.colab import files import cv2 import numpy as np from matplotlib import pyplot as plt from inference_sdk import InferenceHTTPClient # Upload image uploaded = files.upload() # Load the image for filename in uploaded.keys(): img_path = filename
Paso 2: Cargando el modelo Cascade Haar para la detección de cara
# Cargue el modelo Cascade Haar para la detección de cara face_cascade = cv2.CascadeClassifier (cv2.data.haarcascades 'haarcascade_frontalface_default.xml')
# Load the Haar Cascade model for face detection face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades 'haarcascade_frontalface_default.xml')
Paso 3: Detección de caras en la imagen
# Cargue la imagen y convierta a la escala de grises img = cv2.imread (img_path) Gray = CV2.CVTColor (IMG, CV2.Color_Bgr2Gray) # Detectar caras en la imagen Faces = face_cascade.detectMultiscale (Gray, ScaleFactor = 1.1, MinneighBors = 5, Minsize = (30, 30))
# Load the image and convert to grayscale img = cv2.imread(img_path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Detect faces in the image faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# Inicializar InferenceHttpClient para la detección de género Client = InferenceHttpClient ( api_url = "https://detect.roboflow.com", api_key = "use_your_api" )
# Initialize InferenceHTTPClient for gender detection CLIENT = InferenceHTTPClient( api_url="https://detect.roboflow.com", api_key="USE_YOUR_API" )
La InferenciaHTTPClient simplifica la interacción con los modelos previamente capacitados de RoboFlow al configurar un cliente con la URL de la API ROBOFLOW y la tecla API. Esta configuración permite enviar solicitudes al modelo de detección de género alojado en RoboFlow. La clave API sirve como un identificador único para la autenticación, lo que permite el acceso seguro y la utilización de la API ROBOFLOW.
Paso 5: procesar cada cara detectada
El modelo de detección de género-Qiyyg/2 es un modelo de aprendizaje profundo previamente capacitado optimizado para clasificar el género como hombre o mujer en función de las características faciales. Proporciona predicciones con una puntuación de confianza, lo que indica cuán seguro es el modelo sobre la clasificación. El modelo está entrenado en un conjunto de datos robusto, lo que le permite hacer predicciones precisas en una amplia gama de imágenes faciales. Estas predicciones son devueltas por la API y se usan para etiquetar cada cara con el nivel de género y confianza identificados.
# inicializar el recuento de cara face_count = 0 # Lista para almacenar imágenes de cara recortada con etiquetas Cropped_faces = [] # Proceso cada cara detectada para (x, y, w, h) en las caras: face_count = 1 # Dibujar rectángulos alrededor de las caras detectadas cv2.rectangle (img, (x, y), (x w, y h), (255, 0, 0), 2) # Extraer la región de la cara face_img = img [y: y h, x: x w] # Guarde la imagen de la cara temporalmente face_img_path = 'temp_face.jpg' cv2.imwrite (face_img_path, face_img) # Detectar género utilizando la Inferencia HttpClient result = client.infer (face_img_path, model_) Si 'predicciones' en resultado y resultado ['predicciones']: predicción = resultado ['predicciones'] [0] género = predicción ['clase'] confianza = predicción ['confianza'] # Etiqueta el rectángulo con el género y la confianza etiqueta = f '{género} ({confianza: .2f})' cv2.putText (img, etiqueta, (x, y - 10), cv2.font_hershey_simplex, 0.8, (255, 0, 0), 2) # Agregue la cara recortada con la etiqueta a la lista Cropped_faces.append ((Face_img, etiqueta))
# Initialize face count face_count = 0 # List to store cropped face images with labels cropped_faces = [] # Process each detected face for (x, y, w, h) in faces: face_count = 1 # Draw rectangles around the detected faces cv2.rectangle(img, (x, y), (x w, y h), (255, 0, 0), 2) # Extract the face region face_img = img[y:y h, x:x w] # Save the face image temporarily face_img_path = 'temp_face.jpg' cv2.imwrite(face_img_path, face_img) # Detect gender using the InferenceHTTPClient result = CLIENT.infer(face_img_path, model_) if 'predictions' in result and result['predictions']: prediction = result['predictions'][0] gender = prediction['class'] confidence = prediction['confidence'] # Label the rectangle with the gender and confidence label = f'{gender} ({confidence:.2f})' cv2.putText(img, label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 0, 0), 2) # Add the cropped face with label to the list cropped_faces.append((face_img, label))
Paso 6: Mostrar los resultados
# Convertir la imagen de BGR a RGB para mostrar img_rgb = cv2.cvtcolor (img, cv2.color_bgr2rgb) # Muestra la imagen con caras detectadas y etiquetas de género plt.figure (figsize = (10, 10)) plt.imshow (img_rgb) plt.axis ('apagado') plt.title (f "caras detectadas: {face_count}") plt.show () # Muestra cada cara recortada con su etiqueta horizontalmente Fig, Axes = plt.subplots (1, face_count, figSize = (15, 5)) para i, (face_img, etiqueta) en enumerate (cropped_faces): face_rgb = cv2.cvtcolor (face_img, cv2.color_bgr2rgb) hacha [i] .imshow (face_rgb) hacha [i] .axis ('apagado') ejes [i] .set_title (etiqueta) plt.show ()
# Load the image and convert to grayscale img = cv2.imread(img_path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Detect faces in the image faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
data de resultado de salida
Conclusión
Key Takeaways
Preguntas frecuentes
Q2.
¿Qué tecnologías y herramientas se usaron? a. El proyecto utilizó el modelo de detección de género RoboFlow para la inferencia de IA, OPENCV para el procesamiento de imágenes y Matplotlib para la visualización. También usó Python para secuencias de comandos y manejo de datos.Q3.
¿Cómo funciona el modelo de detección de género? a. El modelo analiza imágenes para detectar caras y luego clasifica cada cara detectada como hombre o mujer en función de los algoritmos de IA entrenados. Genera puntajes de confianza para las predicciones.Q4.
¿Qué tan precisa es la detección de género? a. El modelo demuestra alta precisión con puntajes de confianza que indican predicciones confiables. Por ejemplo, los puntajes de confianza en los resultados fueron superiores al 80%, mostrando un rendimiento sólido.Q5.
¿Qué tipo de imágenes puede procesar el modelo?Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se usa a discreción del autor.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3