A tarefa MediaPipe Interactive Image Segmenter usa uma localização em uma imagem, estima os limites da um objeto nesse local e retorna a segmentação do objeto como dados de imagem. Estas instruções mostram como usar o segmentador de imagens interativo com Apps Android. O exemplo de código descrito nestas instruções está disponível em GitHub. Para mais informações sobre recursos, modelos e opções de configuração, desta tarefa, consulte a Visão geral.
Exemplo de código
O exemplo de código do MediaPipe Tasks é uma implementação simples de um segmentador de imagem interativo para Android. O exemplo funciona com imagens selecionadas na galeria do dispositivo.
Você pode usar o app como ponto de partida para seu próprio app Android ou consultá-lo ao modificar um aplicativo existente. O exemplo de código do segmentador de imagem interativo está hospedado em GitHub.
Fazer o download do código
As instruções a seguir mostram como criar uma cópia local do exemplo. usando a ferramenta de linha de comando git.
Para fazer o download do código de exemplo:
- Clone o repositório git usando o seguinte comando:
git clone https://github.com/google-ai-edge/mediapipe-samples
- Como opção, configure sua instância do Git para usar a finalização esparsa.
Portanto, você tem apenas os arquivos do aplicativo de exemplo do segmentador de imagens interativo:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/interactive_segmentation/android
Depois de criar uma versão local do código de exemplo, você pode importar o projeto no Android Studio e executar o app. Para instruções, consulte a Guia de configuração para Android.
Principais componentes
Os arquivos a seguir contêm o código crucial para esta imagem Exemplo de aplicativo de segmentação:
- InteractiveSegmentationHelper.kt: Inicializa a tarefa do segmentador de imagem interativo e manipula o modelo e o delegado
- OverlayView.kt: Processa e formata os resultados da segmentação.
Configuração
Esta seção descreve as principais etapas para configurar seu ambiente de desenvolvimento e projetos de código para usar o segmentador de imagens interativo. Para informações gerais a configuração do seu ambiente de desenvolvimento para usar tarefas do MediaPipe, incluindo requisitos de versão da plataforma, consulte Guia de configuração para Android.
Dependências
O segmentador de imagem interativo usa a biblioteca com.google.mediapipe:tasks-vision
. Adicionar
dependência do arquivo build.gradle
da
Projeto de desenvolvimento de apps Android. Importe as dependências necessárias com
o seguinte código:
dependencies {
...
implementation 'com.google.mediapipe:tasks-vision:latest.release'
}
Modelo
A tarefa do segmentador de imagem interativo do MediaPipe requer um modelo treinado que seja compatível com essa tarefa. Para mais informações sobre os modelos treinados disponíveis para o segmentador de imagens interativas, consulte na seção de visão geral da tarefa Modelos.
Selecione e faça o download do modelo e armazene-o no diretório do projeto:
<dev-project-root>/src/main/assets
Use o método BaseOptions.Builder.setModelAssetPath()
para especificar o caminho.
usados pelo modelo. Esse método é mostrado no exemplo de código nos próximos
nesta seção.
No segmento de imagem interativo
exemplo de código,
o modelo é definido em InteractiveSegmenterHelper.kt
classe na função setupInteractiveSegmenter()
.
Criar a tarefa
Use a função createFromOptions
para criar a tarefa. A
A função createFromOptions
aceita opções de configuração, incluindo
máscara de entrada. Para mais informações sobre configurações
opções, consulte Visão geral da configuração.
InteractiveSegmenterOptions options = InteractiveSegmenterOptions.builder() .setBaseOptions( BaseOptions.builder().setModelAssetPath("model.tflite").build()) .setOutputCategoryMask(true) .setOutputConfidenceMasks(false) .setResultListener((result, inputImage) -> { // Process the segmentation result here. }) .setErrorListener(exception -> { // Process the segmentation errors here. }) .build(); interactivesegmenter = InteractiveSegmenter.createFromOptions(context, options);
Para um exemplo mais detalhado da configuração desta tarefa, consulte o
InteractiveSegmenterHelper
função setupInteractiveSegmenter()
da classe.
Opções de configuração
Esta tarefa tem as seguintes opções de configuração para apps Android:
Nome da opção | Descrição | Intervalo de valor | Valor padrão |
---|---|---|---|
outputCategoryMask |
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
o objeto na área de interesse. |
{True, False } |
False |
outputConfidenceMasks |
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
que o pixel é parte do objeto localizado na área de interesse. |
{True, False } |
True |
displayNamesLocale |
Define o idioma dos rótulos a serem usados para nomes de exibição fornecidos no
metadados do modelo da tarefa, se disponíveis. O padrão é en para
inglês. É possível adicionar rótulos localizados aos metadados de um modelo personalizado
usando a API Metadata Writer do TensorFlow Lite;
| Código da localidade | en |
errorListener |
Define um listener de erro opcional. | N/A | Não definido |
Preparar dados
O segmentador interativo de imagens funciona com imagens, e a tarefa processa a entrada de dados
pré-processamento, incluindo redimensionamento, rotação e normalização de valores.
Você precisa converter a imagem de entrada
com.google.mediapipe.framework.image.MPImage
antes de transmiti-lo ao
tarefa.
import com.google.mediapipe.framework.image.BitmapImageBuilder; import com.google.mediapipe.framework.image.MPImage; // Load an image on the user’s device as a Bitmap object using BitmapFactory. // Convert an Android’s Bitmap object to a MediaPipe’s Image object. MPImage mpImage = new BitmapImageBuilder(bitmap).build();
RegionOfInterest roi = RegionOfInterest.create( NormalizedKeypoint.create( normX * it.width, normY * it.height ) ); ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);
No código de exemplo do segmentador de imagem interativo, as funções segment
são definidas no
InteractiveSegmenterHelper.kt
.
Gerenciar e exibir resultados
Ao executar a inferência, a tarefa segmentador de imagem interativo retorna uma
O objeto ImageSegmenterResult
, que contém os resultados do
tarefa de segmentação. O conteúdo da saída pode incluir uma máscara de categoria,
máscara de confiança, ou ambas, dependendo do que você definir ao
configurou a tarefa.
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 categoria
máscara de valor com a indicação de uma área de interesse. Cada pixel é um 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 o
área de interesse.
Imagem original e saída de máscara de categoria. Imagem de origem do Pascal VOC 2012 (em inglês) no conjunto de dados.
Máscara de confiança
A saída de uma máscara de confiança contém valores flutuantes entre [0, 1]
para
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.