Guia interativo de segmentação de imagens para Python

A tarefa MediaPipe Interactive Image Segmenter utiliza um local em uma imagem, estima os limites de um objeto nesse local e retorna a segmentação dele como dados da imagem. Estas instruções mostram como usar o segmento de imagem interativo com a linguagem Python. Para mais informações sobre os recursos, modelos e opções de configuração dessa tarefa, consulte a Visão geral.

Exemplo de código

O código de exemplo do Segmenter de imagem interativo fornece uma implementação completa dessa tarefa em Python para referência. Este código ajuda você a testar essa tarefa e começar a criar seu próprio aplicativo interativo de segmentação de imagens. É possível visualizar, executar e editar o exemplo de código do Segmentador de imagens interativo usando apenas seu navegador da Web.

Configuração

Nesta seção, descrevemos as principais etapas para configurar seu ambiente de desenvolvimento e projetos de código especificamente para usar o Segmentador de imagens interativo. Para informações gerais sobre a configuração do ambiente de desenvolvimento para o uso de tarefas do MediaPipe, incluindo requisitos de versão da plataforma, consulte o Guia de configuração para Python. Revise o código-fonte deste exemplo no GitHub (em inglês).

Pacotes

A tarefa MediaPipe Interactive Image Segmenter requer o pacote mediapipe. Instale as dependências necessárias com o seguinte comando:

$ python -m pip install mediapipe

Importações

Importe as seguintes classes para acessar as funções da tarefa do Segmentador de imagens interativo:

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

Modelo

A tarefa MediaPipe Interactive Image Segmenter requer um modelo treinado compatível com ela. Para mais informações sobre os modelos treinados disponíveis para o Interactive Image Segmenter, consulte a seção Modelos de visão geral da tarefa.

Selecione e faça o download do modelo e armazene-o no diretório do projeto:

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

Especifique o caminho do modelo dentro do parâmetro model_asset_path, conforme mostrado abaixo:

base_options = BaseOptions(model_asset_path=model_path)

Criar a tarefa

A tarefa MediaPipe Interactive Image Segmenter usa a função create_from_options para configurar a tarefa. A função create_from_options aceita valores para as opções de configuração processar. Para mais informações sobre as opções de configuração, consulte Opções de configuração. O código a seguir demonstra como criar e configurar essa tarefa.

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

Opções de configuração

Esta tarefa tem as seguintes opções de configuração para aplicativos Python:

Nome da opção Descrição Intervalo de valor Valor padrão
output_category_mask Se definido como True, a saída incluirá uma máscara de segmentação como uma imagem uint8, em que cada valor de pixel indica se o pixel faz parte do objeto localizado na área de interesse. {True, False} False
output_confidence_masks Se definido como True, a saída incluirá uma máscara de segmentação como uma imagem de valor flutuante, em que cada valor flutuante representa a confiança de que o pixel faz parte do objeto localizado na área de interesse. {True, False} True
display_names_locale Define o idioma dos rótulos a ser usado para nomes de exibição fornecidos nos metadados do modelo da tarefa, se disponível. O padrão é en para inglês. É possível adicionar rótulos localizados aos metadados de um modelo personalizado usando a API TensorFlow Lite Metadata Writer Código da localidade en

preparar dados

Prepare sua entrada como um arquivo de imagem ou uma matriz numpy e a converta em um 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)

Para conferir um exemplo de código que mostra a preparação de dados para o segmentador de imagem interativo, consulte o exemplo de código.

Executar a tarefa

O Segmentador de imagem interativo usa a função segment para acionar inferências. Para a segmentação de imagens, isso inclui o pré-processamento de dados de entrada, a execução do modelo de segmentação e o pós-processamento das saídas do modelo bruto para as máscaras segmentadas.

O exemplo de código a seguir mostra como executar o processamento com o modelo de tarefa.

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 conferir um exemplo mais completo da execução de inferências do segmento de imagem interativo, consulte o exemplo de código.

Gerenciar e mostrar resultados

Os resultados de saída para o Interactive Image Segmenter são uma lista de dados de Image e podem incluir uma máscara de categoria, de confiança ou ambas, dependendo do que foi definido quando você configurou a tarefa. Se você definir output_category_mask como True, a saída será uma lista que contém uma máscara segmentada única como uma imagem uint8. O valor do pixel indica se ele faz parte do objeto na área de interesse. Índice de categoria reconhecida da imagem de entrada. Se você definir output_confidence_masks como True, a saída será uma lista de canais que contêm valores de pixel no intervalo [0,1], representando a pontuação de confiança do pixel pertencente ao objeto na área de interesse.

As seções a seguir explicam melhor os dados de saída dessa tarefa:

Máscara de categoria

As imagens a seguir mostram uma visualização da saída da tarefa para uma máscara de valor de categoria com uma área de interesse indicada. Cada pixel é um valor uint8 que indica se o pixel faz parte do objeto localizado na área de interesse. O círculo preto e branco na segunda imagem indica a área de interesse selecionada.

Saída original da máscara de imagem e categoria. Imagem de origem do conjunto de dados Pascal VOC 2012.

Máscara de confiança

A saída de uma máscara de confiança contém valores flutuantes entre [0, 1] para cada canal de entrada de imagem. Valores mais altos indicam uma confiança maior de que o pixel da imagem faz parte do objeto localizado na área de interesse.