O ML Kit é um SDK móvel do Google que usa aprendizado de máquina para resolver problemas como reconhecimento de texto, tradução de texto, detecção de objetos, detecção de face/pose e muito mais!
As APIs podem ser executadas no dispositivo, permitindo que você processe casos de uso em tempo real sem enviar dados para servidores.
ML Kit fornece dois grupos de APIs:
- APIs de visão: Estes incluem varredura de código de barras, detecção de rosto, reconhecimento de texto, detecção de objetos e detecção de pose.
- APIs de linguagem natural: Você os usa sempre que precisar identificar idiomas, traduzir texto e executar respostas inteligentes em conversas de texto.
Este tutorial se concentrará em Reconhecimento de texto. Com esta API, você pode extrair texto de imagens, documentos e entrada da câmera em tempo real.
Neste tutorial, você aprenderá:
- O que é um reconhecedor de texto e como agrupa os elementos de texto.
- Os recursos de reconhecimento de texto do kit ML.
- Como reconhecer e extrair texto de uma imagem.
Começando
Ao longo deste tutorial, você trabalhará com Xtractor. Este aplicativo permite tirar uma foto e extrair os nomes de usuário X. Você pode usar esse aplicativo em uma conferência sempre que o palestrante mostrar seus dados de contato e gostaria de procurá -los mais tarde.
Use o Download de materiais Botão na parte superior ou inferior deste tutorial para baixar o projeto inicial.
Depois de baixado, abra o projeto inicial no Android Studio Meerkat ou mais recente. Construa e corra, e você verá a seguinte tela:
Clicando no mais O botão permitirá que você escolha uma foto da sua galeria. Mas, não haverá nenhum reconhecimento de texto.
Antes de adicionar funcionalidade de reconhecimento de texto, você precisa entender alguns conceitos.
Usando um reconhecedor de texto
Um reconhecedor de texto pode detectar e interpretar o texto de várias fontes, como imagens, vídeos ou documentos digitalizados. Este processo é chamado OCRque significa: reconhecimento óptico de caracteres.
Alguns casos de uso de reconhecimento de texto podem ser:
- Digitalizando recibos ou livros em texto digital.
- Traduzindo sinais de imagens estáticas ou da câmera.
- Reconhecimento automático de placas.
- Digitalizando formulários manuscritos.
Aqui está um colapso do que um reconhecedor de texto normalmente faz:
- Detecção: Descobre onde o texto está localizado dentro de uma imagem, vídeo ou documento.
- Reconhecimento: Converte os caracteres detectados ou manuscrito em texto legível por máquina.
- Saída: Retorna o texto reconhecido.
Segmentos de reconhecedor de texto do kit ML Texto em blocos, linhas, elementos e símbolos.
Aqui está uma breve explicação de cada uma:
- Bloquear: Mostra em vermelho, um conjunto de linhas de texto, por exemplo, um parágrafo ou coluna.
- Linha: Mostra em azul, um conjunto de palavras.
- Elemento: Mostra em verde, um conjunto de caracteres alfanuméricos, uma palavra.
- Símbolo: Caráter alfanumérico único.
Recursos de reconhecimento de texto do kit ML
A API tem os seguintes recursos:
- Reconhecer o texto em vários idiomas. Incluindo chinês, devanagari, japonês, coreano e latim. Estes foram incluídos na versão mais recente (V2). Verifique os idiomas suportados aqui.
- Pode diferenciar entre um personagem, uma palavra, um conjunto de palavras e um parágrafo.
- Identifique a linguagem de texto reconhecida.
- Retornar caixas delimitadoras, pontos de canto, informações de rotação, pontuação de confiança para todos os blocos, linhas, elementos e símbolos detectados
- Reconhecer o texto em tempo real.
Pacaco vs. Unbruclado
Todos os recursos do kit ML utilizam os modelos de aprendizado de máquina treinados pelo Google por padrão.
Particularmente, para reconhecimento de texto, os modelos podem ser instalados:
- Unbrutled: Os modelos são baixados e gerenciados por meio do Google Play Services.
- Pacado: os modelos estão estaticamente vinculados ao seu aplicativo no momento da construção.
Usando modelos em pacote significa que, quando o usuário instalar o aplicativo, eles também terão todos os modelos instalados e serão utilizados imediatamente. Sempre que o usuário desinstala o aplicativo, todos os modelos serão excluídos. Para atualizar os modelos, primeiro o desenvolvedor deve atualizar os modelos, publicar o aplicativo e o usuário deve atualizar o aplicativo.
Por outro lado, se você usa modelos sem pontes, eles são armazenados no Google Play Services. O aplicativo deve fazer o download antes do uso. Quando o usuário desinstala o aplicativo, os modelos não serão necessariamente excluídos. Eles só serão excluídos se todos os aplicativos que dependem desses modelos forem desinstalados. Sempre que uma nova versão dos modelos for lançada, eles serão atualizados para serem usados no aplicativo.
Dependendo do seu caso de uso, você pode escolher uma opção ou outra.
Sugeriu -se usar a opção sem construção se você quiser um tamanho de aplicativo menor e atualizações automatizadas de modelo do Google Play.
No entanto, você deve usar a opção agrupada se quiser que seus usuários tenham funcionalidade completa do recurso logo após a instalação do aplicativo.
Adicionando recursos de reconhecimento de texto
Para usar o reconhecedor de texto do kit ML, abra seu aplicativo build.gradle Arquivo do projeto inicial e adicione a seguinte dependência:
implementation("com.google.mlkit:text-recognition:16.0.1")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2")
Aqui, você está usando o text-recognition
versão em pacote.
Agora, sincronize seu projeto.
text-recognition
por favor, verifique aqui.Para obter a versão mais recente de
kotlinx-coroutines-play-services
verificar aqui. E, para apoiar outros idiomas, use a dependência correspondente. Você pode verificá -los aqui.
Agora, substitua o código de recognizeUsernames
com o seguinte:
val image = InputImage.fromBitmap(bitmap, 0)
val recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
val result = recognizer.process(image).await()
return emptyList()
Você primeiro recebe uma imagem de um bitmap. Então, você recebe uma instância de um TextRecognizer
Usando as opções padrão, com suporte ao idioma latino. Finalmente, você processa a imagem com o reconhecedor.
Você precisará importar o seguinte:
import com.google.mlkit.vision.text.TextRecognition
import com.google.mlkit.vision.text.latin.TextRecognizerOptions
import com.kodeco.xtractor.ui.theme.XtractorTheme
import kotlinx.coroutines.tasks.await
Você pode obter blocos, linhas e elementos como este:
// 1
val text = result.text
for (block in result.textBlocks) {
// 2
val blockText = block.text
val blockCornerPoints = block.cornerPoints
val blockFrame = block.boundingBox
for (line in block.lines) {
// 3
val lineText = line.text
val lineCornerPoints = line.cornerPoints
val lineFrame = line.boundingBox
for (element in line.elements) {
// 4
val elementText = element.text
val elementCornerPoints = element.cornerPoints
val elementFrame = element.boundingBox
}
}
}
Aqui está uma breve explicação do código acima:
- Primeiro, você recebe o texto completo.
- Então, para cada bloco, você recebe o texto, os pontos de canto e o quadro.
- Para cada linha em um bloco, você recebe o texto, os pontos de canto e o quadro.
- Finalmente, para cada elemento em uma linha, você recebe o texto, os pontos de canto e o quadro.
No entanto, você só precisa dos elementos que representam nomes de usuário X, então substitua o emptyList()
com o seguinte código:
return result.textBlocks
.flatMap { it.lines }
.flatMap { it.elements }
.filter { element -> element.text.isXUsername() }
.mapNotNull { element ->
element.boundingBox?.let { boundingBox ->
UsernameBox(element.text, boundingBox)
}
}
Você converteu os blocos de texto em linhas, para cada linha que você obtém os elementos e, para cada elemento, filtra aqueles que são nomes de usuário X. Finalmente, você os mapeia para UsernameBox
que é uma classe que contém o nome de usuário e a caixa delimitadora.
A caixa delimitadora é usada para desenhar retângulos sobre o nome de usuário.
Agora, execute o aplicativo novamente, escolha uma foto da sua galeria e você terá os nomes de usuário X reconhecidos:
Parabéns! Você acabou de aprender a usar Reconhecimento de texto.