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

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

Ejemplo de código

El código de ejemplo del Segmentador de imágenes interactivo brinda una implementación completa de este en Python para tu referencia. Este código te ayuda a probar esta tarea y obtener empezaste a crear tu propia aplicación interactiva de segmentación de imágenes. Puedes ver, ejecutar y editar el Segmentador de imágenes interactivo código de ejemplo usando solo el navegador web.

Configuración

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

Paquetes

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

$ python -m pip install mediapipe

Importaciones

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

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

Modelo

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

Selecciona y descarga el modelo; luego, guárdalo 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 del Segmentador de imágenes interactiva de MediaPipe usa la función create_from_options para configurar la tarea. La función create_from_options acepta valores para conocer las opciones de configuración que manejar. Para obtener más información sobre la configuración consulta Opciones de configuración. En el siguiente código, se muestra cómo compilar y configurar 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 tiene las siguientes opciones de configuración para las aplicaciones de Python:

Nombre de la opción Descripción Rango de valores Valor predeterminado
output_category_mask Si se establece en True, el resultado incluirá una máscara de segmentación. que una imagen de uint8, donde cada valor de píxel indica si el píxel es parte de el objeto ubicado en el área de interés. {True, False} False
output_confidence_masks Si se establece en True, el resultado incluirá una máscara de segmentación. como una imagen de valor flotante, donde cada valor flotante representa la confianza que el píxel sea 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 que se proporcionan en la 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 tu entrada como un archivo de imagen o un array de NumPy. y, luego, convertirlo 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)
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 de barras.

Cómo controlar y mostrar resultados

Los resultados de salida del Segmentador de imágenes interactivo son una lista de datos de Image y pueden incluye una máscara de categoría, máscaras de confianza o ambas, según lo que establezcas. cuando configuraste la tarea. Si estableces output_category_mask a True, el resultado es una lista que contiene solo segmentada como imagen de uint8. El valor de píxel indica si es parte del objeto en el área de interés. de categoría reconocido de la imagen de entrada. Si configura output_confidence_masks como True, el resultado es una lista de canales con valores de píxeles dentro del rango [0,1] que representan la confianza puntuación 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 para una categoría de valor con un área de interés indicada. Cada píxel es un uint8 valor 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 la imagen o en un área de interés.

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

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 que El píxel de imagen es parte del objeto ubicado en el área de interés.