Criando um Pet Sticker App no Android com Segmentação Pet Fritz

Jameson Toole Segue 15 de jul · 4 min ler

Quanto mais a câmera do telefone entende, mais poderosas e criativas podem ser as aplicações móveis. Poucos assuntos são mais importantes de entender do que nossos animais de estimação: cachorros, floofs, fluffers, nuvens, woofers e até gatos (ou assim me disseram).

Neste post, aprenderemos como usar o , uma plataforma de aprendizado de máquina móvel para iOS e Android, para dar a um aplicativo Android a capacidade de gerar máscaras de segmentação com pixels perfeitos de animais de estimação em fotos e vídeos.

Usaremos essa máscara para criar adesivos divertidos que você pode compartilhar em aplicativos como WhatsApp ou Messenger, mas você também pode usá-los para acompanhar o crescimento deles ao longo do tempo ou alterar a cor da pele deles.

Definindo a tarefa

Há muitas tarefas que poderíamos ensinar a câmera do nosso celular a realizar: identificar uma raça, localizar a posição exata de um animal, verificar se um cachorro está sentado, etc. No nosso caso, queremos saber exatamente quais pixels em uma imagem pertencem à imagem. animal e que são simplesmente de fundo. .

As redes neurais profundas são muito boas na realização de segmentação de imagens. Na Fritz, nos esforçamos muito para treinar redes neurais que são pequenas o suficiente e rápidas o suficiente para segmentar imagens em um aplicativo móvel. Como tudo é executado no dispositivo, ele pode ser usado em tempo real e sem conectividade com a Internet, além de manter os dados do usuário privados.

Configure sua conta Fritz e inicialize o SDK

Primeiro, você precisará de uma conta gratuita do Fritz se ainda não tiver uma. e siga para inicializar e configurar nosso SDK para seu aplicativo.

Se você não tiver um aplicativo, mas quiser começar rapidamente, recomendamos clonar nosso .

 git clone  

Para seguir adiante, importe o CameraBoilerplateApp como um novo projeto no Android Studio e adicione o código relevante ao longo deste tutorial no .

Adicione o modelo de Segmentação Pet via Gradle

No seu arquivo app / build.gradle, você pode incluir a dependência com o seguinte:

 dependências { implementação 'ai.fritz: core: 3+' 
implementação 'ai.fritz: visão: 3+'
Implementação 'ai.fritz: modelo de segmentação de pet-visão: 3+'
}

Isso inclui o modelo de segmentação de animais de estimação no aplicativo. Sob o capô, usamos o como nossa estrutura de aprendizado de máquina móvel. Para garantir que o modelo não seja compactado quando o APK for criado, você precisará adicionar o seguinte no mesmo arquivo de criação na opção android.

 android { 
aaptOptions {
noCompress "tflite"
}
}

* Você também pode optar por preguiçoso carregar o modelo de segmentação de animais para reduzir o tamanho inicial do APK. Siga as em "Obter um preditor de segmentação".

Criar um preditor de segmentação com um modelo de segmentação de animal de estimação

Para executar a segmentação em uma imagem, criamos uma classe do Predictor que simplifica todo o pré e pós-processamento para a execução de um modelo no seu aplicativo. Crie um novo preditor com o seguinte:

Executar previsão em uma imagem para detectar pet

As imagens podem vir de uma câmera, um rolo de fotos ou um vídeo ao vivo.

Um bom menino.

Nós usaremos essa imagem de amostra como entrada.

No código abaixo, convertemos um objeto android.media.Image (YUV_420_888format) em um objeto FritzVisionImage para prepará-lo para previsão. Este é geralmente o caso quando se lê a partir de uma sessão de captura de câmera ao vivo.

Você também pode converter um bitmap em um FritzVisionImage .

 FritzVisionImage visionImage = FritzVisionImage. fromBitmap (bitmap); 

Depois de criar um objeto FritzVisionImage , chame predictor.predict.

Isso retornará um segmentResult que você pode usar para exibir a máscara de animal de estimação. Para mais detalhes sobre os diferentes métodos de acesso, dê uma olhada na .

Use a máscara para criar um adesivo

Agora que temos o resultado do modelo, vamos criar uma máscara e usar isso para fazer um adesivo do nosso animal de estimação. O Preditor de Segmentação possui um método chamado createMaskedBitmap que retorna um bitmap contendo apenas pixels pertencentes aos pets. Os argumentos adicionais são os valores de corte máximo e mínimo, respectivamente. Os escores de máscara acima do valor máximo são recortados para 1 (totalmente opacos), enquanto os valores de máscara abaixo do escore mínimo são recortados para 0 (completamente transparentes).

 Bitmap petBitmap = segmentResult.createMaskedBitmap (MaskType.PET, .6f, .4f); 

Abaixo está uma imagem de apenas a própria máscara com o valor de máscara usado como o canal alfa.

A imagem final pode ser salva como um adesivo!

Confira nosso para a implementação finalizada.