Segmentación de personas con ? MEDIAPIPE SELFIE SEGMENTATION | Python – MediaPipe – OpenCV

Por Administrador

Segmenta a personas presentes en una escena del fondo, con MediaPipe Selfie Segmentation. Ya verás que necesitaremos muy pocas líneas de código. ¡Anímate a probarlo!.

CONTENIDO

  • MediaPipe Selfie Segmentation
    • Modelos empleados en MediaPipe Selfie Segmentation
    • Opciones de configuración
    • Salida que obtenemos al aplicar MediaPipe Selfie Segmentation
    • ¡Vamos con la programación!
      • MediaPipe Selfie Segmentation en imágenes
      • MediaPipe Selfie Segmentation en videos
  • Referencias

MediaPipe Selfie Segmentation

Figura 1: Ejemplo del uso de MediaPipe Selfie Segmentation.

Otra de las soluciones que veremos de mediapipe es MediaPipe Selfie Segmentation. Esta permite segmentar a las personas prominentes en una escena, obteniendo una máscara en donde las regiones en blanco (o pixeles más claros) representan a las personas segmentadas y en negro (o pixeles más oscuros) al fondo de la imagen. Además puede ejecutarse en tiempo real en teléfonos inteligentes, o laptops. 

Modelos empleados en MediaPipe Selfie Segmentation

Figura 2: Ejemplo de las salidas obtenidas al usar el modelo general y el modelo landscape.

En esta solución se proveen dos modelos general y landscape. Puedes obtener más información sobre ellos en la docuentación de MediaPipe y en su model card.

Opciones de Configuración

MODEL_SELECTION (Por defecto 0)

Para usar esta solución debemos entregar una imagen en rgb, además debemos especificar  0 o 1 para MODEL_SELECTION, que corresponderá a si elegimos usar el modelo general o modelo landscape respectivamente. 

Salida que obtenemos al usar MediaPipe Selfie Segmentation

Figura 3: Ejemplo de la salida que obtenemos al usar MediaPipe Selfie Segmentation.

SEGMENTATION_MASK

Como salida obtendremos SEGMENTATION_MASK, que será la máscara de segmentación de salida que además tiene las mismas dimensiones que la imagen de entrada. Esta tendrá valores comprendidos en el rango de 0 a 1. 

Si visualizamos la máscara de segmentación de salida (figura 3), podremos ver que los pixeles más claros o blancos representarán a la o las personas, mientras que los más oscuros o en negro al fondo de la escena. 

NOTA:

  • Se puede segmentar a varios humanos presentes en una escena, especialmente si son de tamaño similar. 
  • Algunas características delgadas de cuerpo como los dedos, pueden perderse ocasionalmente. 

¡Vamos con la programación!

Para una explicación más detallada de los programas que veremos a continuación, por favor dirígete al videotutorial de mi canal.

MediaPipe Selfie Segmentation en imágenes

import cv2
import mediapipe as mp

mp_selfie_segmentation = mp.solutions.selfie_segmentation

with mp_selfie_segmentation.SelfieSegmentation(
     model_selection=1) as selfie_segmentation:

     image = cv2.imread("image_0003.jpg")
     image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
     results = selfie_segmentation.process(image_rgb)

     cv2.imshow("Image", image)
     cv2.imshow("Mask", results.segmentation_mask)
     cv2.waitKey(0)
cv2.destroyAllWindows()

MediaPipe Selfie Segmentation en video

import cv2
import mediapipe as mp

mp_selfie_segmentation = mp.solutions.selfie_segmentation
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)

with mp_selfie_segmentation.SelfieSegmentation(
     model_selection=1) as selfie_segmentation:

     while True:
          ret, frame = cap.read()
          if ret == False:
               break

          frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
          results = selfie_segmentation.process(frame_rgb)

          cv2.imshow("Frame", frame)
          cv2.imshow("Mask", results.segmentation_mask)
          if cv2.waitKey(1) & 0xFF == 27:
               break

cap.release()
cv2.destroyAllWindows()

Referencias

? Mediapipe Selfie Segmentation: https://google.github.io/mediapipe/solutions/selfie_segmentation
? Model card: https://drive.google.com/file/d/1dCfozqknMa068vVsO2j_1FgZkW_e3VWv/preview