Guía interactiva de segmentación de imágenes para Python

La tarea Segmentador de imágenes interactivo de MediaPipe toma una ubicación en una imagen, estima los límites de un objeto en esa ubicación y muestra la segmentación del objeto como datos de imagen. En estas instrucciones, se muestra cómo usar el Segmentador de imágenes interactivo con el lenguaje Python. Para obtener más información sobre las capacidades, los modelos y las opciones de configuración de esta tarea, consulta la Descripción general.

Ejemplo de código

En el código de ejemplo del Segmentador de imágenes interactivas, se proporciona una implementación completa de esta tarea en Python para tu referencia. Este código te ayuda a probar esta tarea y comenzar a compilar tu propia aplicación interactiva de segmentación de imágenes. Puedes ver, ejecutar y editar el código de ejemplo del Segmentador de imágenes interactivo solo con tu navegador web.

Configuración

En esta sección, se describen los pasos clave para configurar tu entorno de desarrollo y los proyectos de código específicamente a fin de usar el Segmentador de imágenes interactivo. Si deseas obtener información general sobre cómo configurar tu entorno de desarrollo para usar tareas de MediaPipe, incluidos los requisitos de versión de la plataforma, consulta la Guía de configuración de Python. Puedes revisar el código fuente para este ejemplo en GitHub.

Paquetes

La tarea del Segmentador de imágenes interactivo de MediaPipe requiere el paquete mediapipe. Puedes instalar las dependencias necesarias con el siguiente comando:

$ python -m pip install mediapipe

Importaciones

Importa las siguientes clases para acceder a las funciones de la tarea Segmentador de imágenes interactivo:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

Modelo

La tarea Segmentador de imágenes interactivo de MediaPipe requiere un modelo entrenado que sea compatible con esta tarea. Si deseas obtener más información sobre los modelos entrenados disponibles para el Segmentador de imágenes interactivo, consulta la sección Modelos de descripción general de la tarea.

Selecciona y descarga el modelo. Luego, almacénalo en el directorio de tu proyecto:

model_path = '/absolute/path/to/model.tflite'

Especifica la ruta del modelo dentro del parámetro model_asset_path, como se muestra a continuación:

base_options = BaseOptions(model_asset_path=model_path)

Crea la tarea

La tarea Segmentador de imágenes interactivo de MediaPipe usa la función create_from_options para configurarla. La función create_from_options acepta valores para controlar las opciones de configuración. Para obtener más información sobre las opciones de configuración, consulta Opciones de configuración. En el siguiente código, se muestra la compilación y configuración de esta tarea.

BaseOptions = mp.tasks.BaseOptions
InteractiveSegmenter = mp.tasks.vision.InteractiveSegmenter
InteractiveSegmenterOptions = mp.tasks.vision.InteractiveSegmenterOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a image segmenter instance with the image mode:
options = InteractiveSegmenterOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.IMAGE,
    output_type=InteractiveSegmenterOptions.OutputType.CATEGORY_MASK)
with InteractiveSegmenter.create_from_options(options) as segmenter:
# segmenter is initialized and ready to use

Opciones de configuración

Esta tarea incluye las siguientes opciones de configuración para aplicaciones de Python:

Nombre de la opción Descripción Rango de valores Valor predeterminado
output_category_mask Si se configura en True, el resultado incluye una máscara de segmentación como una imagen uint8, en la que cada valor de píxel indica si el píxel es parte del objeto ubicado en el área de interés. {True, False} False
output_confidence_masks Si se configura como True, el resultado incluye una máscara de segmentación como una imagen de valor flotante, en la que cada valor flotante representa la confianza de que el píxel es parte del objeto ubicado en el área de interés. {True, False} True
display_names_locale Configura el idioma de las etiquetas que se usarán para los nombres visibles proporcionados en los metadatos del modelo de la tarea, si están disponibles. El valor predeterminado es en para inglés. Puedes agregar etiquetas localizadas a los metadatos de un modelo personalizado con la API de Metadata Writer de TensorFlow Lite Código de configuración regional en

Preparar los datos

Prepara la entrada como un archivo de imagen o un array de NumPy y, luego, conviértela en un objeto mediapipe.Image.

# Load the input image from an image file.
mp_image = mp.Image.create_from_file('/path/to/image')

# Load the input image from a numpy array.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)

Si deseas ver un ejemplo de código que muestra la preparación de datos para el Segmentador de imágenes interactivo, consulta el ejemplo de código.

Ejecuta la tarea

El Segmentador de imágenes interactivo usa la función segment para activar las inferencias. Para la segmentación de imágenes, esto incluye el procesamiento previo de los datos de entrada, la ejecución del modelo de segmentación y el procesamiento posterior de las salidas del modelo sin procesar a las máscaras segmentadas.

En el siguiente ejemplo de código, se muestra cómo ejecutar el procesamiento con el modelo de tarea.

RegionOfInterest = vision.InteractiveSegmenterRegionOfInterest
# Perform image segmentation on the provided single image.
# The image segmenter must be created with the image mode.
roi = RegionOfInterest(format=RegionOfInterest.Format.KEYPOINT,
                          keypoint=NormalizedKeypoint(x, y))
segmented_masks = segmenter.segment(mp_image, roi)

Para ver un ejemplo más completo de cómo ejecutar inferencias del Segmentador de imágenes interactivo, consulta el ejemplo de código.

Cómo controlar y mostrar los resultados

Los resultados de salida del Segmentador de imágenes interactivas son una lista de datos Image y pueden incluir una máscara de categoría, máscaras de confianza o ambas, según lo que establezcas cuando configuraste la tarea. Si configuras output_category_mask como True, el resultado es una lista que contiene una máscara segmentada única como una imagen uint8. El valor del píxel indica si es parte del objeto en el área de interés. Índice de categoría reconocido de la imagen de entrada. Si configuras output_confidence_masks como True, el resultado es una lista de canales que contienen valores de píxeles dentro del rango [0,1] que representa la puntuación de confianza del píxel que pertenece al objeto en el área de interés.

En las siguientes secciones, se explican con más detalle los datos de salida de esta tarea:

Máscara de categoría

En las siguientes imágenes, se muestra una visualización del resultado de la tarea de una máscara de valor de categoría con un área de punto de interés indicada. Cada píxel es un valor uint8 que indica si el píxel es parte del objeto ubicado en el área de interés. El círculo blanco y negro de la segunda imagen indica el área de interés seleccionada.

Resultado original de la imagen y la máscara de categoría. Imagen de origen del conjunto de datos Pascal VOC 2012.

Máscara de confianza

El resultado de una máscara de confianza contiene valores flotantes entre [0, 1] para cada canal de entrada de imagen. Los valores más altos indican una mayor confianza en que el píxel de la imagen es parte del objeto ubicado en el área de interés.