Alura > Cursos de Inteligência Artificial > Cursos de IA para Mobile > Conteúdos de IA para Mobile > Primeiras aulas do curso Android com IA: implementando reconhecimento facial com ML Kit

Android com IA: implementando reconhecimento facial com ML Kit

Identificando o primeiro rosto - Apresentação

Olá! Boas-vindas a mais um curso da Alura. Sou o Junior e serei seu instrutor.

Audiodescrição: Junior Martins é um homem de pele clara e cabelos loiros escuros, que estão presos. Usa óculos de grau com armação preta e uma camiseta também preta. Ao fundo, uma parede lisa com iluminação degradê do azul ao roxo.

O que aprenderemos

Nessa jornada de aprendizado, descobriremos como utilizar o reconhecimento facial dentro do aplicativo. Usaremos o aplicativo Sorri.IA, uma rede social que exibe posts feitos pelas pessoas usuárias e que permite a navegação.

Nele, se gostarmos do conteúdo, ao dar um clique duplo, é exibido a animação de um coração. Além disso, podemos navegar por diferentes abas, como a de busca.

Nos solicitaram algumas implementações no aplicativo. Para essa missão, exploraremos as funcionalidades do Google ML Kit de reconhecimento facial.

Além disso, aprenderemos algumas técnicas que permitirão o reconhecimento de rostos no aplicativo. Pegaremos cada característica do rosto identificado para poder realizar ações específicas.

Por exemplo, criaremos a opção de dar like sem precisar do clique duplo. Faremos isso tanto de uma biblioteca mais focada quanto de outras similares que, embora não atendam exatamente o esperado, serão importantes para fornecer recursos iniciais para começarmos a explorar esse mundo.

Estudaremos técnicas que nos permitirão utilizar o reconhecimento facial de maneira local, sem precisar enviar a imagem de quem está utilizando o app para um servidor.

Esse é um recurso muito valioso atualmente, onde a privacidade é algo muito solicitado. Essas bibliotecas nos darão a possibilidade de realizar ações de maneira rápida e também confiável, sem precisar enviar o reconhecimento facial, que é um dado sensível.

Esse conhecimento é importante para você que está no mercado de trabalho focado em acessibilidade de aplicativos ou ações de reação das pessoas usuárias. Tudo isso de forma rápida, segura e com processamento do próprio dispositivo.

Pré-requisitos

Para poder acompanhar este conteúdo, é necessário que você tenha concluído o curso de Detecção de objetos em tempo real. Nele, exploramos um pouco sobre o reconhecimento de objetos e aprendemos conceitos sobre como lidar com a câmera nos aplicativos em Jetpack Compose.

Também é recomendado que tenha noção do gerenciamento de estados e do controle de ViewModels utilizando tecnologias mais recentes, como o Jetpack Compose e toda gerência de estados, que utilizaremos também ao longo do curso.

Juntos, exploraremos todo esse conteúdo e construir aplicações cada vez mais ricas.

Prepare-se para começar!

Identificando o primeiro rosto - Review do projeto

Para começarmos a entender como funciona o reconhecimento facial com o ML Kit, utilizaremos o projeto de aplicativo Sorri.IA. Trata-se de uma rede social que permite visualizar fotos e vídeos.

Conhecendo a estrutura do projeto Sorri.IA

Nosso projeto possui uma estrutura similar ao que já conhecemos em cursos anteriores. Com ele aberto no Android Studio, na lateral esquerda da ferramenta, encontramos a pasta central do projeto. Nela há a pasta "data" que adicionamos previamente para simular como se estivéssemos nos conectando a uma API real.

Nessa pasta, temos o PostLocalData com uma lista de usuários fictícios. Encontramos o BasePost com uma lista de posts fictícios com o User, os modelos. Além do PostRepository que devolve um flow, ou seja, uma lista de posts que vai se atualizar sempre que dermos um comando.

Também encontramos outras estruturas familiares, como, na pasta "di". Nela temos a injeção de dependência PostModule, que serve para os posts e o SpeecjToTectModule, para a parte que faz o reconhecimento de voz.

Temos também uma separação em relação aos modelos, mais especificamente dos posts, que representam dados fictícios que teremos no projeto.

Na pasta "extensions", temos extensões que facilitam como lidamos com o Jetpack Compose. A pasta "sampleData", contém o arquivo de SampleImages, afinal nosso aplicativo trabalha bastante com imagens. Para facilitar esse processo, já deixamos todas no projeto, mas ela simula justamente uma lista que poderíamos pegar de uma web API.

A pasta "speechToText" vamos entender como funciona ao longo do curso. Logo abaixo, temos a pasta principal do projeto, a "ui". Nela, temos a pasta "camera", que contém uma lógica bem similar ao que estudamos anteriormente no curso de detecção de objetos.

Ela armazena alguns arquivos, como o CameraAnalyzer.kt, responsável por pegar o feed da câmera e devolver cada uma das imagens para serem trabalhadas. Já o CameraContainer lida com a questão de permissões.

Encontramos também os arquivos CameraPreview, CameraScreen, que trabalharemos mais adiante, mas que seguem uma estrutura padrão. Nessa segunda pasta, próximo à linha 44, temos a câmera, seguido do CameraPreview(), que embora não seja muito útil nesse curso, já está configurado também com cameraController.

Além disso, quando quisermos desenhar algo sobre a câmera, teremos o overlay, próximo à linha 59. Portanto, essa pasta de câmera tem bastante código utilizaremos.

Outro detalhe é que já configuramos um CameraUiState e um CameraViewModel para poder fazer a gerência de estados, já fizemos essa separação.

Na pasta "components" temos componentes do Jetpack Compose que foram desenhados para poder ficar separados e não precisarmos observar enquanto trabalhamos em outros códigos.

Na pasta "screens", temos as principais telas do projeto. Nela, temos a pasta "home" que possui o arquivo HomeNavHost.kt que contém a guia principal e toda a navegação de telas.

Além disso, temos uma pasta de "utils", com algumas extensões, especialmente relacionadas às previsões. Temos o arquivo MainActivity, que é a tela principal do app.

Como já trabalhamos com uma estrutura similar de projeto, muita coisa já está pronta. Podemos imaginar que esse é um projeto que pegaríamos no dia a dia de trabalho comum, no qual boa parte dele já foi concluída e outra está sendo desenvolvida. Nosso trabalho será adicionar funções que foram solicitadas.

Funcionalidades de acessibilidade

Foi solicitado adicionar algumas funções de acessibilidade. Quando o aplicativo estiver sendo usado e a pessoa usuária sorrir para a tela, a função de like deverá acionada no post.

Outra função é para ser possível, por exemplo, deslizar a tela para cima ou para baixo apenas com o movimento da cabeça. Além da navegação por voz e disparar essa navegação com algum gesto feito com o rosto.

Utilizando o Google ML Kit

Para isso, utilizaremos o Google ML Kit que possui algumas bibliotecas que lidam com o reconhecimento facial, com a definição de rosto.

No navegador, ao acessarmos a página inicial do ML Kit, encontramos bibliotecas. Algumas são voltadas à segmentação de selfie, outras para a malha do rosto, para pegar o que está atrás da pessoa quando ela está utilizando o dispositivo.

Comparando bibliotecas do ML Kit

Nesse caso, como temos muitas opções, acaba sendo difícil escolher a ideal. Por isso, existe outro trecho da documentação, especificamente dessa biblioteca de detecção da malha facial, que traz um pequeno resumo sobre algumas dessas bibliotecas.

Se descermos essa página, encontramos alguns exemplos de como ela funciona destacando algumas fotos, mostrando os pontos faciais das pessoas.

Mais abaixo, existe uma seção chamada Comparação com o SDK de detecção facial do ML Kit. Nela, temos uma tabela comparando duas das principais bibliotecas de reconhecimento facial, para escolher qual poderíamos utilizar, dependendo do tipo de implementação que estamos buscando.

Temos a API de detecção de malha facial e a API de face detection, que não é tão voltada a malha do rosto e sim alguns aspectos pontuais.

Analisando a tabela, conseguimos identificar o caso de uso de cada uma das opções. A primeira é mais voltada a efeitos de Realidade Aumentada, já a segunda é voltada a detectar quantos rostos existem em uma foto. Além disso, há outras características que definem melhor cada opção de uso.

No nosso caso específico, existe um item comparativo de Classificação de rostos, como se um sorriso está sendo detectado ou não. Na tabela, observamos que a biblioteca de malha de rosto não oferece esse suporte.

Já a biblioteca de reconhecimento facial, oferece esse suporte e também à orientação do rosto. Isso é importante para nós, afinal, uma das funções de acessibilidade será controlar o feed do aplicativo com o movimento da cabeça.

Com isso, concluímos que a melhor opção será a API Face Detection, voltada para reconhecimento de características.

No vídeo seguinte, vamos explorá-la para então adicionar seus recursos no projeto. Te esperamos lá!

Identificando o primeiro rosto - Entendendo a malha de rosto e detecção facial

Agora que já conhecemos o projeto, sabemos o problema que precisa resolvido e que usaremos a biblioteca de detecção de rostos do ML Kit, descobriremos como fazer a integração do projeto com a biblioteca.

Como a biblioteca é similar as que utilizamos no último curso, já fizemos a configuração. Se preferir, pode consultar a documentação do ML Kit e pegar a versão mais atualizada. Nesse caso, a 16.1.6, conforme o momento da gravação desse conteúdo.

O projeto que disponibilizamos já está com a biblioteca instalada. Como ela depende do uso da câmera, podemos voltar no projeto no Android Studio e começar a trabalhar em um ponto do aplicativo que tem acesso à câmera para poder fazer essas detecções.

Analisando o AnalyzeScreen()

Acessamos ui > screens > home > HomeNavHost.kt. O HomeNavHost, além de toda a navegação, próximo à linha 120, temos a chamada do AnalyzeScreen().

Se deixarmos o cursor em cima e pressionarmos Ctrl + B, podemos visualizar que ele está chamando o CameraScreen() próximo à linha 39, que faz uso do cameraAnalyzer, que serve para pegar cada frame da câmera. Assim, conseguimos convertê-lo em um objeto compatível para trabalharmos.

Já o cameraAnalyzer é passado para o cameraController. O que precisamos fazer é pegar os frames que teremos acesso na câmera e passar para um modelo que detecte o que está acontecendo em cada imagem.

Primeiro minimizamos a janela na lateral esquerda da tela que exibe as pastas e arquivos. Lembrando que, uma vez que pegamos o frame da câmera, já foi feito um trabalho para criar uma variável, val image, próximo à linha 37, deixando-o compatível.

Configurando o faceDetector no Compose

Para isso, utilizamos o input.image.fromMediaImage() passamos a imagem em si, além do grau de rotação. Assim, temos acesso a esta variável, que pode ser utilizada.

Para isso, primeiramente configuraremos o faceDetector no compose. Para não ser preciso utilizar uma recomposição cíclica, vamos fazê-lo com um remember.

Na linha acima de val cameraAnalyzer, próximo à linha 33, criaremos uma nova variável passando val faceDetector = remember{}. Nas chaves, chamamos o FaceDetection.getClient().

Para fazermos o import, clicamos em remember e pressionamos "Alt + Enter", seguido de "Ctrl + Alt + L" para formatar o código.

//Código omitido

val faceDetector = remember {
    FaceDetection.getClient()
}

//Código omitido

O FaceDetector é justamente um detector que pode receber as imagens conforme for necessário. Dentro do CameraAnalyzer, abaixo da declaração da variável, próximo à linha 45, podemos chamar o faceDetector.process() recebendo image.

//Código omitido

faceDetector.process(image)

//Código omitido

Dentro desse método já temos o processamento sendo feito, mas precisaremos fazer alguns retornos, lidar também com o fechamento do fluxo dessa imagem, para não perdermos.

Faremos isso a seguir. Te esperamos lá!

Sobre o curso Android com IA: implementando reconhecimento facial com ML Kit

O curso Android com IA: implementando reconhecimento facial com ML Kit possui 118 minutos de vídeos, em um total de 44 atividades. Gostou? Conheça nossos outros cursos de IA para Mobile em Inteligência Artificial, ou leia nossos artigos de Inteligência Artificial.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda IA para Mobile acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas