Recortar caras de imágenes usando OpenCV – Python

Opencv es una biblioteca de Python utilizada principalmente para el procesamiento de imágenes y la visión por computadora. En este artículo primero, detectamos rostros y luego recortamos el rostro de la imagen. La detección de rostros es la rama del procesamiento de imágenes que se utiliza para detectar rostros.

Usaremos un modelo Haar Cascade previamente entrenado para detectar rostros de la imagen. Una cascada haar es el método de detección de objetos utilizado para detectar objetos de la imagen. Este algoritmo fue entrenado por numerosas imágenes. Puede descargar el archivo de cascada face haar haciendo clic aquí .

Implementemos paso a paso:

Paso 1: En este paso, leeremos la imagen y la convertiremos a escala de grises.

Python3

import cv2
  
# Read the input image
img = cv2.imread('mpw.jpeg')
  
# Convert into grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Explicación: en este código primero importamos nuestra biblioteca opencv usando import cv2. El método cv2.imread() carga la imagen desde la ruta dada (por ejemplo: mpw.jpeg o filepath/mpw.jpeg) Después de cargar la imagen, convertimos la imagen a una imagen en escala de grises usando COLOR_BGR2GRAY.

Paso 2: use el modelo Haar Cascade para detectar rostros de la imagen.

Python3

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml')
  
# Detect faces
faces = face_cascade.detectMultiScale(gray, 1.1, 4)

     

Explicación: Usamos cv2.CascadeClassifier para cargar el archivo haarcascade en face_cascade. Función detectMultiScale() utilizada para detectar rostros. Toma 3 parámetros:

  • Gris: imagen de entrada (imagen en escala de grises)
  • 1.1: factor de escala, especifica cuánto se reduce el tamaño de la imagen con cada escala. Mejora la detección.
  • 4: MinNeighbors, especifica cuántos vecinos debe retener cada rectángulo candidato.

Paso 3: Encuentra la cara en la imagen.

Python3

for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), 
                  (0, 0, 255), 2)
      
    faces = img[y:y + h, x:x + w]
    cv2.imshow("face",faces)
    cv2.imwrite('face.jpg', faces)
  
cv2.imshow('img', img)
cv2.waitKey()

Explicación: x,y son la ubicación de píxeles de las caras, w,h son el ancho y la altura de las caras. función cv2.rectangle() utilizada para dibujar un rectángulo sobre el objeto detectado, img es la imagen de entrada, (x,y),(x+w, y+h) son las ubicaciones del rectángulo,(0,0,255) es el color de un rectángulo este argumento se pasa como una tupla para BGR, usaríamos (0,0,255) para el rojo, 2 es el grosor del rectángulo.

A continuación se muestra la implementación completa:

Imagen utilizada – 

imagen de entrada

Python3

import cv2
  
# Read the input image
img = cv2.imread('mpw.jpeg')
  
# Convert into grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  
# Load the cascade
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml')
  
# Detect faces
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
  
# Draw rectangle around the faces and crop the faces
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)
    faces = img[y:y + h, x:x + w]
    cv2.imshow("face",faces)
    cv2.imwrite('face.jpg', faces)
      
# Display the output
cv2.imwrite('detcted.jpg', img)
cv2.imshow('img', img)
cv2.waitKey()

Producción:

Rostro detectado

imagen recortada

Publicación traducida automáticamente

Artículo escrito por mohanapranes y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *