Entre para a LISTA VIP da Black Friday

00

DIAS

00

HORAS

00

MIN

00

SEG

Clique para saber mais
Alura > Cursos de Inteligência Artificial > Cursos de IA para Mobile > Conteúdos de IA para Mobile > Primeiras aulas do curso Android com IA: identificando imagens com Machine Learning

Android com IA: identificando imagens com Machine Learning

Analisando a primeira imagem - Apresentação

Olá! Boas-vindas a mais um conteúdo de Android na Alura. Meu nome é Júnior, serei seu instrutor.

Audiodescrição: Junior Martins é uma pessoa de pele clara. Tem olhos castanhos e cabelos loiro-escuros, longos e amarrados atrás da cabeça. Usa óculos de grau com armação arredondada preta e está com uma camiseta também preta. Ao fundo, uma parede clara e lisa com iluminação em degradê, que vai do azul até o rosa.

O que aprenderemos no curso?

Neste curso, vamos explorar mais utilidades da Biblioteca de Machine Learning (Aprendizado de Máquina) da Google para Android. Para isso, vamos utilizar o aplicativo Galeri-IA, que permite analisar imagens de diversas fontes, como do dispositivo da pessoa usuária final e aquelas de dentro do aplicativo em si.

Vamos ver como fazer a análise de uma imagem selecionada. Podemos selecionar, por exemplo, a imagem de um bolo. Quando selecionamos, são trazidas algumas tags, como, por exemplo, Food e Cake, indicando que é uma comida e que há um bolo presente.

Vamos ver que, além de conseguir analisar uma única imagem da galeria em que vamos focar, a aplicação também fará a análise de várias imagens simultaneamente.

Para cada imagem que clicarmos, vamos trazer seus respectivos rótulos. Para isso, vamos utilizar uma biblioteca da Google, a Image Labeling, focada na rotulagem de imagens para dispositivos móveis.

Vamos entender como definir alguns parâmetros, para que, por exemplo, não apareçam tantas tags, ou para fazer com que alguns rótulos apareçam de maneiras diferentes. Vamos entender como integrar toda a estrutura dessa biblioteca dentro do nosso projeto para trabalhar da maneira mais eficiente possível.

Vamos estudar, principalmente, como podemos utilizar a informação dessa biblioteca para implementar funções dentro dos aplicativos. Com o Galeri-IA, temos uma sessão de inteligência artificial, que, quando clicamos, faz uma organização e exibe todas as imagens pré-selecionadas em grupos. Com isso, temos uma facilidade muito maior para poder acessar algum conteúdo de interesse.

Também vamos entender como criar um modelo específico a depender da situação. No nosso caso, treinaremos um modelo com nossas próprias imagens para trazer um padrão personalizado para além do que a Google possui. Tudo isso rodando diretamente no dispositivo final, sem precisar de acesso à internet.

Quais são os pré-requisitos?

Para poder seguir com esse curso, alguns pré-requisitos são necessários. Nosso projeto utiliza Android e Jetpack Compose. Você também pode utilizar esse conhecimento com o sistema de Views. Contudo, o essencial é saber lidar com o sistema de gerenciamento de estados e de ViewModels.

Vamos abordar outros detalhes ao longo do curso, mas a qualquer momento, se houver alguma dúvida ou se quiser conversar sobre o conteúdo do curso, acesse e participe da nossa comunidade no Discord.

Dito isso, esperamos que tenha se animado para começar. Vamos lá!

Analisando a primeira imagem - Review do projeto

O aplicativo que recebemos para adicionar recursos de inteligência artificial é o Galeri-IA. Por enquanto, ele é bastante semelhante a uma galeria que temos instalada em nossos dispositivos.

Tela do aplicativo com texto 'GALERI-IA' na parte superior, seguido por um ícone de pasta estilizado e o texto 'Selecione uma pasta para continuar' abaixo. Na parte inferior, um botão retangular com o texto 'Testar uma imagem' e um ícone de imagem à esquerda está presente. O esquema de cores é roxo e branco.

Conhecendo o aplicativo

Quando o abrimos, ele possui um botão quadrado com um ícone de pasta centralizado na tela para conceder acesso aos arquivos. Ao clicar nesse botão, ele abre o seletor de arquivos do Android, permitindo navegar por pastas do dispositivo.

Vamos selecionar, por exemplo, a pasta "Exemplo 1", clicando duas vezes nela para abri-la. Na tela que exibe seu interior, vamos clicar no botão "Usar essa pasta", na parte inferior da tela, e selecionar "Permitir" na janela modal para conceder permissão.

Com isso, seremos direcionados para a tela da galeria, que exibe várias imagens. Ao clicar em alguma delas, uma tela é expandida mostrando a imagem selecionada, e abaixo dela, um espaço vazio que preencheremos com algum conteúdo em breve.

Na parte inferior da tela, temos dois botões: "Galeria", selecionado atualmente, e "IA". Ao clicar neste último, acessaremos a tela de IA que, por enquanto, não faz nada além de mostrar uma tela de carregamento.

Antes das imagens, no canto superior esquerdo da galeria, há um ícone de pasta. Se clicarmos nele, voltamos para a tela inicial, em cuja parte inferior temos o botão "Testar uma imagem". Ao clicar nele, veremos uma tela que serve como demonstração.

Vamos trabalhar para poder selecionar alguma imagem do dispositivo, clicar nela e, na seção "Tags" na parte inferior da tela, possamos substituir as tags pré-definidas #descrição #da #imagem por aquelas que a biblioteca vai retornar como rótulos.

Esperamos que você nos acompanhe nessa jornada.

Conhecendo o código

Agora que conhecemos o aplicativo, vamos dar uma olhada no código que está por trás de tudo isso. No Android Studio, já temos o projeto baixado, e deixamos previamente configurado tudo que é relacionado à parte de UI e de lógica, que não está relacionado com o que vamos mexer, de modo a evitar esse trabalho.

Vamos entender rapidamente a estrutura das pastas do projeto, no explorador de arquivos da lateral esquerda.

Acessando o caminho "app > src > main > java/com/br/alura/galeria", temos uma pasta "data" com alguns modelos que vamos utilizar. Temos algumas data classes com informações como, por exemplo, o nome da imagem e uma lista de rótulos.

Dentro da pasta "dataStore", temos um pequeno sistema para que, ao clicar em uma pasta, o aplicativo lembre qual foi o caminho, e ao abrir novamente o app, ele já mostra as imagens daquela pasta.

Também deixamos pronta boa parte da injeção de dependência. Na pasta "di.module", temos, por exemplo, o ImageClassifierModule. Quando clicamos e damos um "Ctrl+B" em ImageClassifier, seremos direcionados para o arquivo ImageClassifier.kt, no qual podemos perceber que boa parte dessas classes possui apenas a injeção de dependência já feita, para não nos preocuparmos com isso. Já a implementação interna ficará a nosso cargo.

Lembrando que temos cursos sobre injeção de dependência e vários desses tópicos que estamos comentando. Nesse projeto, isso já está pronto, como, por exemplo, já estaria em um projeto que você trabalha no dia a dia. Vamos apenas mexer apenas na biblioteca.

Outro detalhe é que na pasta "extensions", temos a classe ContextExtensions, que vai trabalhar com arquivos. Vamos abordar esses tópicos ao longo do curso, mas como se trata de um conteúdo denso que está fora do nosso escopo, recomendamos que você veja outros conteúdos que produzimos sobre isso. Mesmo assim, caso tenha interesse, o código já está pronto.

Dentro da pasta "mlkit", teremos apenas um único arquivo, por enquanto. Ele tem um contexto pronto, no qual vamos fazer a parte da biblioteca. Além disso, teremos a pasta "navigation", com componentes de navegação do próprio Jetpack Compose.

Já dentro da pasta "ui", teremos a parte de interface do usuário, as telas e o carregamento das imagens. Vamos explorar cada uma dessas telas e dessas pastas, conforme manipulamos certos fluxos do aplicativo.

Por fim, um detalhe que é interessante notarmos, é que no arquivo build.gradle.kts oriundo de Module :app, que está na pasta "Gradle Scripts", podemos perceber que ele já está atualizado para utilizar as dependências com o novo padrão recomendado pela equipe oficial do Android. Caso você não conheça, vamos deixar um material sobre esse assunto.

Não se preocupe, porque quando instalarmos alguma dependência, vamos explicar qual é a diferença dele em relação ao antigo e comentaremos um pouco melhor sobre essa situação.

Feita essa revisão, conhecemos o projeto. A seguir, vamos começar a fazer as implementações.

Analisando a primeira imagem - Conhecendo e instalando a lib

O primeiro desafio com esse aplicativo será trabalhar com uma tela que serve como uma espécie de tela de testes. Ela aparece quando clicamos no botão "Testar uma imagem". Ao clicar nela, visualizamos uma imagem de uma rua com algumas pessoas caminhando. No entanto, por enquanto, o que está na parte inferior não é a descrição da imagem, mas textos aleatórios.

Conhecendo a biblioteca image-labeling

Podemos utilizar uma biblioteca da própria Google, que utiliza o ML Kit: a biblioteca Marcação de imagens (Image Labeling, em inglês) que temos aberta no navegador. Essa biblioteca serve para extrair informações sobre entidades dentro de imagens.

Na página da biblioteca, é descrito de forma mais detalhada o que essa biblioteca é capaz de fazer, especialmente na seção "Principais recursos", que explica a existência de um classificador que reconhece mais de 400 categorias de objetos. Em seções posteriores, há exemplos disso.

Esta seção também explica que a biblioteca é capaz de se adaptar a diferentes casos de uso, porque além do modelo padrão, podemos colocar um modelo que nós mesmos somos capazes de treinar, além do modelo padrão que vem junto com a biblioteca. Aliás, vamos fazer isso também neste curso.

Apesar de todas essas funcionalidades, ela é uma API de alto nível, fácil de utilizar. Ou seja, não é preciso códigos muito complicados para conseguirmos ter os primeiros resultados.

Se deslizarmos um pouco mais para baixo nessa página, existem algumas classificações que a biblioteca é capaz de fazer. Existe uma imagem que representa bem todo esse conceito: que exibe um jogo de futebol, no qual o goleiro está pulando para tentar pegar a bola.

Abaixo dessa imagem, existe uma tabela que mostra qual foi a análise feita pelo código que vamos utilizar. Ela tem uma linha de título com o nome do rótulo de exemplo, abaixo da qual há duas linhas: "Texto" e "Confiança", onde há o texto do rótulo e a confiança do quanto a biblioteca acredita ter contemplado algo presente nessa imagem ou o que ela representa.

Rótulo 0#
TextoEstádio
Confiança0,9205354
Rótulo 1#
----------------
TextoEsportes
Confiança0,7531109
Rótulo 2#
----------------
TextoEvento
Confiança0,66905296
Rótulo 3#
----------------
TextoLazer
Confiança0,59904146

Como mencionado, é uma imagem de um estádio de jogo de futebol, e a biblioteca tem 92% de certeza de que é um estádio, 75% de certeza que tem alguma relação com esportes, 66% de certeza que é um evento, entre outras palavras que foram analisadas, como "futebol", "rede" e "planta". Conseguimos extrair essas informações diretamente com o poder de processamento do próprio dispositivo, sem precisar fazer uma conexão com a internet para isso.

Após conhecer melhor essa biblioteca, existe um detalhe que é importante se atentar: voltando à seção "Principais recursos", é mencionado que essa é uma biblioteca destinada à classificação de imagens estáticas, como no nosso caso, em que vamos pegar uma imagem fixa e tentar extrair as informações dela. Contudo, existe uma API semelhante, também do ML Kit, que analisa objetos com movimento, por exemplo, utilizando rastreamento de objetos.

Instalando a biblioteca

Vamos acessar a seção "Como usar o modelo base", na qual temos dois botões: um para a versão de iOS e outra para a versão de Android vamos clicar no botão que diz "Android", e a partir da nova tela, podemos deslizar para o final da página, até achar a subseção "Para agrupar o modelo e o app".

Mencionamos essa subseção porque existem duas maneiras de lidar com essa biblioteca. A outra utiliza o Google Play Services. Não vamos utilizá-la porque ela necessita que façamos uma conexão com a internet.

Vamos copiar, então, a linha de código abaixo, no bloco da subseção que escolhemos. Nesse caso, a versão no momento é a 17.0.7:

implementation 'com.google.mlkit:image-labeling:17.0.7'

Vamos voltar para o Android Studio, abrir o projeto e acessar o arquivo build.gradle.kts dentro da pasta "app". Em seu interior, deslizaremos para o final do bloco dependencies e colaremos este código que copiamos acima da sua chave de fechamento.

build.gradle.kts

dependencies {

    # Código omitido
    
    implementation 'com.google.mlkit:image-labeling:17.0.7'

}

Vamos pular uma linha entre o código anterior e a linha que colamos e fazer alguns ajustes nesta última. Vamos trocar as aspas simples por aspas duplas. Se selecionarmos as aspas de abertura e a corrigirmos, a de fechamento será corrigida automaticamente. Também vamos envolver em parênteses o conteúdo entre aspas duplas.

Podemos perceber que o Android Studio vai acionar um alerta, sublinhando esse trecho em amarelo. Podemos posicionar o cursor em cima desse alerta, pressionar "Alt+Enter" e selecionar a opção "Replace with new library catalog declaration for image-labeling". Esse processo modificará o código, conforme vemos abaixo.

dependencies {

    # Código omitido
    
    implementation (libs.image.labeling)

}

Em seguida, podemos clicar no botão "Sync Now" em uma barra temporária que aparece no topo do arquivo, para que a biblioteca seja instalada no projeto. Depois, é só aguardar.

Após o projeto instalar a biblioteca, não temos mais erros na linha colada. Ao selecionar o labeling nessa linha e pressionar "Ctrl+B", seremos direcionados para o arquivo libs.versions.toml, no qual podemos perceber que aquela biblioteca foi adicionada entre as outras.

libs.versions.toml

[libraries]
# Código omitido
image-labeling = { module = "com.google.mlkit:image-labeling", version.ref = "image-labeling" }

Podemos subir o código para a seção de versões para perceber que ele criou o image-labeling na linha 4, com a versão 17. Se quisermos atualizar futuramente, acessaremos esse local.

[versions]
# Código omitido
image-labeling = "17.0.7"

A biblioteca já está instalada, sabemos um pouco melhor o que podemos fazer e sabemos que a biblioteca é capaz de fazer isso. A seguir, vamos começar os primeiros testes.

Sobre o curso Android com IA: identificando imagens com Machine Learning

O curso Android com IA: identificando imagens com Machine Learning possui 98 minutos de vídeos, em um total de 47 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