Guia interativo de segmentação de imagens para Web

A tarefa do MediaPipe Interactive Image Segmenter usa um local em uma imagem, estima os limites de um objeto nesse local e retorna a segmentação do objeto como dados de imagem. Estas instruções mostram como usar o Segmentador de imagem interativo para apps da Web e do Node.js. Para mais informações sobre os recursos, modelos e opções de configuração desta tarefa, consulte a Visão geral.

Exemplo de código

O código de exemplo do Segmentador de imagem interativo oferece uma implementação completa dessa tarefa em JavaScript para sua referência. Esse código ajuda a testar essa tarefa e começar a criar seu próprio app interativo de segmentação de imagens. É possível visualizar, executar e editar o exemplo de código do Segmentador interativo de imagens usando apenas o navegador da Web. Você também pode conferir o código desse exemplo no GitHub.

Configuração

Esta seção descreve as principais etapas para configurar seu ambiente de desenvolvimento e projetos de código especificamente para usar o Segmentador de imagem interativo. Para informações gerais sobre como configurar seu ambiente de desenvolvimento para usar tarefas do MediaPipe, incluindo os requisitos da versão da plataforma, consulte o Guia de configuração para a Web.

Pacotes JavaScript

O código do segmentador de imagem interativa está disponível no pacote @mediapipe/tasks-vision NPM do MediaPipe. É possível encontrar e fazer o download dessas bibliotecas nos links fornecidos no guia de configuração da plataforma.

É possível instalar os pacotes necessários com o seguinte código para preparação local usando este comando:

npm install --save @mediapipe/tasks-vision

Se você quiser importar o código da tarefa usando uma rede de fornecimento de conteúdo (CDN), adicione o código abaixo à tag no arquivo HTML:

<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
    crossorigin="anonymous"></script>
</head>

Modelo

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

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

<dev-project-root>/app/shared/models/

Criar a tarefa

Use uma das funções createFrom...() do segmentador de imagem interativa para preparar a tarefa para executar inferências. Use a função createFromModelPath() com um caminho relativo ou absoluto para o arquivo do modelo treinado. Se o modelo já estiver carregado na memória, use o método createFromModelBuffer().

O exemplo de código abaixo demonstra o uso da função createFromOptions() para configurar a tarefa. A função createFromOptions permite personalizar o segmentador de imagem interativo com opções de configuração. Para mais informações sobre as opções de configuração, consulte Opções de configuração.

O código abaixo demonstra como criar e configurar a tarefa com opções personalizadas:

async function createSegmenter() {
  const vision = await FilesetResolver.forVisionTasks(
    "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
  );

  interactiveSegmenter = await InteractiveSegmenter.createFromOptions(vision, {
    baseOptions: {
      modelAssetPath:
        "https://storage.googleapis.com/mediapipe-tasks/interactive_segmenter/ptm_512_hdt_ptm_woid.tflite"
    },
  });
}
createSegmenter();

Opções de configuração

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

Nome da opção Descrição Intervalo de valor Valor padrão
outputCategoryMask Se definido como True, a saída inclui 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
outputConfidenceMasks Se definido como True, a saída inclui 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
displayNamesLocale Define o idioma dos rótulos a serem usados para os nomes de exibição fornecidos nos metadados do modelo da tarefa, se disponível. O padrão é en para o inglês. É possível adicionar rótulos localizados aos metadados de um modelo personalizado usando a API Writer de metadados do TensorFlow Lite. Código de localidade en

Preparar dados

O Segmentador de imagem interativo pode segmentar objetos em imagens em qualquer formato aceito pelo navegador host. A tarefa também processa a entrada de dados, incluindo redimensionamento, rotação e normalização de valores.

As chamadas para os métodos segment() e segmentForVideo() do segmentador de imagem interativo são executadas de forma síncrona e bloqueiam a linha de execução da interface do usuário. Se você segmentar objetos em frames de vídeo da câmera de um dispositivo, cada tarefa de segmentação bloqueará a linha de execução principal. Para evitar isso, implemente workers da Web para executar segment() e segmentForVideo() em outra linha de execução.

Executar a tarefa

O segmentador de imagem interativo usa o método segment() para acionar inferências. O segmentador de imagem interativo retorna os segmentos detectados como dados de imagem para uma função de callback definida ao executar uma inferência para a tarefa.

O código abaixo demonstra como executar o processamento com o modelo de tarefa:

const image = document.getElementById("image") as HTMLImageElement;
interactiveSegmenter.segment(
  image,
  {
    keypoint: {
      x: event.offsetX / event.target.width,
      y: event.offsetY / event.target.height
    }
  },
  callback);

Para uma implementação mais completa da execução de uma tarefa do segmentador de imagem interativa, consulte o exemplo de código.

Processar e mostrar resultados

Ao executar a inferência, a tarefa do segmentador de imagem interativa retorna dados de segmentação de imagem para uma função de callback. O conteúdo da saída é de dados de imagem e pode incluir uma máscara de categoria, máscaras de confiança ou ambas, dependendo do que você definiu ao configurar a tarefa.

As seções a seguir explicam melhor os dados de saída desta 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.

Um cachorro em pé em meio a uma pilha de folhas A forma contornada do cachorro da imagem anterior

Saída da máscara de imagem original 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.

O código de exemplo do segmentador de imagem interativo demonstra como mostrar os resultados de classificação retornados pela tarefa. Consulte o exemplo de código para saber mais.