Reconhecer texto e características faciais com o Kit de ML: Android

1. Introdução

O Kit de ML é um SDK para dispositivos móveis que leva a experiência em machine learning do Google para apps Android e iOS em um pacote eficiente e fácil de usar. Não importa se você é novo ou experiente em machine learning, é possível implementar a funcionalidade necessária com apenas algumas linhas de código. Não é preciso ter um conhecimento profundo de redes neurais ou otimização de modelos para começar.

Se você encontrar algum problema (bugs no código, erros gramaticais, instruções pouco claras, etc.) neste codelab, informe o problema no link Informar um erro no canto inferior esquerdo do codelab.

Como funciona?

O Kit de ML facilita a aplicação de técnicas de ML nos seus apps ao reunir as tecnologias de ML do Google, como o Mobile Vision e o TensorFlow Lite, em um único SDK. Se você precisa dos recursos em tempo real dos modelos no dispositivo do Mobile Vision ou da flexibilidade dos modelos personalizados do TensorFlow Lite, o Kit de ML tem o que você precisa.

Neste codelab, você vai aprender a criar seu próprio app Android que pode detectar automaticamente texto e traços faciais em uma imagem.

O que você criará

Neste codelab, você vai criar um app Android com o Kit de ML. Esse app vai:

  • Usar a API Kit de ML Text Recognition para detectar texto em imagens
  • Use a API Face Contour do Kit de ML para identificar traços faciais em imagens

O que você vai aprender

  • Como usar o Kit de ML SDK para adicionar recursos avançados de aprendizado de máquina com facilidade, como reconhecimento de texto e detecção de recursos faciais

O que é necessário

  • Uma versão recente do Android Studio (v3.0 ou mais recente)
  • Emulador do Android Studio ou um dispositivo Android físico
  • Código de amostra
  • Conhecimento básico de desenvolvimento para Android em Java.
  • Compreensão básica de modelos de machine learning

Este codelab é focado no Kit de ML. Conceitos e blocos de códigos sem relevância não serão abordados. Eles são incluídos somente para você copiar e colar.

2. Etapas da configuração

Fazer o download do código

Clique no link abaixo para fazer o download de todo o código para este codelab:

Descompacte o arquivo ZIP transferido por download. Isso descompacta uma pasta raiz (mlkit-android-master) com todos os recursos necessários. Neste codelab, você só vai precisar dos recursos no subdiretório vision.

O subdiretório vision no repositório mlkit-android-master contém dois diretórios:

  • android_studio_folder.pngstarter: o código inicial que você vai usar como base neste codelab.
  • android_studio_folder.pngfinal: código completo do app de exemplo finalizado.

3. Verificar as dependências do Kit de ML

Verificar as dependências do Kit de ML

As linhas a seguir já devem estar adicionadas ao final do arquivo build.gradle no diretório app do seu projeto. Verifique para confirmar:

build.gradle

dependencies {
  // Face features
  implementation 'com.google.mlkit:face-detection:16.0.0'

  // Text features
  implementation 'com.google.android.gms:play-services-mlkit-text-recognition:16.0.0'
}

Estas são as dependências específicas do Kit de ML necessárias para implementar os recursos deste codelab.

4. Executar o app inicial

Agora que você importou o projeto para o Android Studio e verificou as dependências do Kit de ML, já pode executar o app pela primeira vez. Inicie o emulador do Android Studio e clique em Executar ( execute.png) na barra de ferramentas do Android Studio.

O app será iniciado no emulador. Neste ponto, você vai ver um layout básico com um campo suspenso que permite selecionar entre três imagens. Na próxima seção, você vai adicionar o reconhecimento de texto ao app para identificar texto em imagens.

5. Adicionar reconhecimento de texto no dispositivo

Nesta etapa, vamos adicionar a funcionalidade ao app para reconhecer texto em imagens.

Configurar e executar o reconhecimento de texto no dispositivo em uma imagem

Adicione o seguinte ao método runTextRecognition da classe MainActivity:

MainActivity.java

private void runTextRecognition() {
   InputImage image = InputImage.fromBitmap(mSelectedImage, 0);
   TextRecognizer recognizer = TextRecognition.getClient();
   mTextButton.setEnabled(false);
   recognizer.process(image)
           .addOnSuccessListener(
                   new OnSuccessListener<Text>() {
                       @Override
                       public void onSuccess(Text texts) {
                           mTextButton.setEnabled(true);
                           processTextRecognitionResult(texts);
                       }
                   })
           .addOnFailureListener(
                   new OnFailureListener() {
                       @Override
                       public void onFailure(@NonNull Exception e) {
                           // Task failed with an exception
                           mTextButton.setEnabled(true);
                           e.printStackTrace();
                       }
                   });
}

O código acima configura o detector de reconhecimento de texto e chama a função processTextRecognitionResult com a resposta.

Processar a resposta de reconhecimento de texto

Adicione o seguinte código a processTextRecognitionResult na classe MainActivity para analisar os resultados e mostrá-los no app.

MainActivity.java

private void processTextRecognitionResult(Text texts) {
   List<Text.TextBlock> blocks = texts.getTextBlocks();
   if (blocks.size() == 0) {
       showToast("No text found");
       return;
   }
   mGraphicOverlay.clear();
   for (int i = 0; i < blocks.size(); i++) {
       List<Text.Line> lines = blocks.get(i).getLines();
       for (int j = 0; j < lines.size(); j++) {
           List<Text.Element> elements = lines.get(j).getElements();
           for (int k = 0; k < elements.size(); k++) {
               Graphic textGraphic = new TextGraphic(mGraphicOverlay, elements.get(k));
               mGraphicOverlay.add(textGraphic);

           }
       }
   }
}

Execute o app no emulador

Agora clique em Executar ( execute.png) na barra de ferramentas do Android Studio. Depois que o app carregar, verifique se Test Image 1(Text) está selecionado no campo suspenso e clique no botão FIND TEXT.

Agora, o app vai ficar parecido com a imagem abaixo, mostrando os resultados do reconhecimento de texto e as caixas delimitadoras sobrepostas à imagem original.

10b12d0e8822eaf5.png

Foto: Kai Schreiber / Wikimedia Commons / CC BY-SA 2.0

Parabéns! Você acabou de adicionar o reconhecimento de texto no dispositivo ao seu app usando o Kit de ML. O reconhecimento de texto no dispositivo é ótimo para muitos casos de uso, já que funciona mesmo quando o app não tem conectividade com a Internet e é rápido o suficiente para ser usado em imagens estáticas e frames de vídeo ao vivo.

6. Adicionar detecção de contorno facial no dispositivo

Nesta etapa, vamos adicionar funcionalidade ao app para reconhecer os contornos de rostos em imagens.

Configurar e executar a detecção de contorno facial no dispositivo em uma imagem

Adicione o seguinte ao método runFaceContourDetection da classe MainActivity:

MainActivity.java

private void runFaceContourDetection() {
   InputImage image = InputImage.fromBitmap(mSelectedImage, 0);
   FaceDetectorOptions options =
           new FaceDetectorOptions.Builder()
                   .setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_FAST)
                   .setContourMode(FaceDetectorOptions.CONTOUR_MODE_ALL)
                   .build();

   mFaceButton.setEnabled(false);
   FaceDetector detector = FaceDetection.getClient(options);
   detector.process(image)
           .addOnSuccessListener(
                   new OnSuccessListener<List<Face>>() {
                       @Override
                       public void onSuccess(List<Face> faces) {
                           mFaceButton.setEnabled(true);
                           processFaceContourDetectionResult(faces);
                       }
                   })
           .addOnFailureListener(
                   new OnFailureListener() {
                       @Override
                       public void onFailure(@NonNull Exception e) {
                           // Task failed with an exception
                           mFaceButton.setEnabled(true);
                           e.printStackTrace();
                       }
                   });

}

O código acima configura o detector de contorno facial e chama a função processFaceContourDetectionResult com a resposta.

Processar a resposta de detecção de contorno do rosto

Adicione o seguinte código a processFaceContourDetectionResult na classe MainActivity para analisar os resultados e mostrá-los no app.

MainActivity.java

private void processFaceContourDetectionResult(List<Face> faces) {
   // Task completed successfully
   if (faces.size() == 0) {
       showToast("No face found");
       return;
   }
   mGraphicOverlay.clear();
   for (int i = 0; i < faces.size(); ++i) {
       Face face = faces.get(i);
       FaceContourGraphic faceGraphic = new FaceContourGraphic(mGraphicOverlay);
       mGraphicOverlay.add(faceGraphic);
       faceGraphic.updateFace(face);
   }
}

Execute o app no emulador

Agora clique em Executar ( execute.png) na barra de ferramentas do Android Studio. Depois que o app carregar, verifique se Test Image 2 (Face) está selecionado no campo suspenso e clique no botão FIND FACE CONTOUR.

O app vai ficar parecido com a imagem abaixo, mostrando os resultados da detecção de contorno facial e os contornos do rosto como pontos sobrepostos à imagem original.

f9ff2fcbf63f0f3b.png

Parabéns, você acabou de adicionar a detecção de contorno facial no dispositivo ao seu app usando o Kit de ML. A detecção de contorno facial no dispositivo é ótima para muitos casos de uso, já que funciona mesmo quando o app não tem conectividade com a Internet e é rápida o suficiente para ser usada em imagens estáticas e frames de vídeo ao vivo.

7. Parabéns!

Você usou o Kit de ML para adicionar recursos avançados de aprendizado de máquina ao seu app.

O que vimos

  • Como adicionar o Kit de ML ao seu app Android
  • Como usar o reconhecimento de texto no dispositivo no Kit de ML para encontrar texto em imagens
  • Como usar o contorno facial no dispositivo no Kit de ML para identificar características faciais em imagens

Próximas etapas

  • Use o Kit de ML no seu próprio app Android.

Saiba mais