O Kit de ML é um SDK para dispositivos móveis que leva a experiência em aprendizado de máquina do Google para apps Android em um pacote eficiente e fácil de usar. Não importa se você é novo ou experiente em aprendizado de máquina, é 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.
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 Mobile Vision e TensorFlow Lite, em um único SDK. Seja para aproveitar os recursos em tempo real dos modelos no dispositivo da Mobile Vision ou a flexibilidade dos modelos personalizados do TensorFlow Lite, o Kit de ML permite isso com apenas algumas linhas de código.
Neste codelab, você vai aprender a adicionar reconhecimento de texto, identificação de idioma e tradução do feed da câmera em tempo real ao seu app Android. Também vamos destacar as práticas recomendadas para usar a CameraX com as APIs do Kit de ML.
O que você criará
Neste codelab, você vai criar um app Android com o ML Kit. O app vai usar a API Text Recognition no dispositivo do Kit de ML para reconhecer texto do feed da câmera em tempo real. Ele vai usar a API Language Identification do Kit de ML para identificar o idioma do texto reconhecido. Por fim, o app vai traduzir esse texto para qualquer idioma escolhido entre 59 opções usando a API de tradução do Kit de ML.
No final, você vai ver algo parecido com a imagem abaixo.
O que você aprenderá
- Como usar o SDK do Kit de ML para adicionar recursos de aprendizado de máquina a qualquer app Android.
- Reconhecimento de texto do Kit de ML, identificação de idioma, APIs de tradução e os recursos delas.
- Como usar a biblioteca CameraX com as APIs do Kit de ML.
O que é necessário
- Uma versão recente do Android Studio (v4.0 ou mais recente)
- Um dispositivo Android físico
- O exemplo de código
- Conhecimento básico de desenvolvimento para Android em Kotlin
Este codelab é focado no Kit de ML. Conceitos e blocos de código sem relevância já foram fornecidos e implementados.
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
) com todos os recursos necessários. Para este codelab, você só vai precisar dos recursos no subdiretório translate
.
O subdiretório translate
no repositório mlkit-android
contém o seguinte diretório:
starter: código inicial que você vai usar como base neste codelab.
No arquivo app/build.gradle
, verifique se as dependências necessárias do Kit de ML e da CameraX estão incluídas:
// CameraX dependencies
def camerax_version = "1.0.0-beta05"
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:${camerax_version}"
implementation "androidx.camera:camera-lifecycle:$camerax_version"
implementation "androidx.camera:camera-view:1.0.0-alpha12"
// ML Kit dependencies
implementation 'com.google.android.gms:play-services-mlkit-text-recognition:16.0.0'
implementation 'com.google.mlkit:language-id:16.0.0'
implementation 'com.google.mlkit:translate:16.0.0'
Agora que você importou o projeto para o Android Studio e verificou as dependências do ML Kit, está tudo pronto para executar o app pela primeira vez. Inicie o emulador do Android Studio e clique em Run () na barra de ferramentas do Android Studio.
O app será iniciado no seu dispositivo, e você poderá apontar a câmera para vários textos para conferir um feed ao vivo, mas a funcionalidade de reconhecimento de texto ainda não foi implementada.
Nesta etapa, vamos adicionar uma funcionalidade ao app para reconhecer texto da câmera de vídeo.
Criar uma instância do detector de texto do Kit de ML
Adicione o campo abaixo à parte de cima de TextAnalyzer.kt
. É assim que você recebe um identificador do reconhecedor de texto para usar nas etapas seguintes.
TextAnalyzer.kt
private val detector = TextRecognition.getClient()
Executar o reconhecimento de texto no dispositivo em uma imagem do Vision ( criada com buffer da câmera)
A biblioteca CameraX fornece um stream de imagens da câmera pronto para análise. Substitua o método recognizeTextOnDevice()
na classe TextAnalyzer para usar o reconhecimento de texto do Kit de ML em cada frame de imagem.
TextAnalyzer.kt
private fun recognizeTextOnDevice(
image: InputImage
): Task<Text> {
// Pass image to an ML Kit Vision API
return detector.process(image)
.addOnSuccessListener { visionText ->
// Task completed successfully
result.value = visionText.text
}
.addOnFailureListener { exception ->
// Task failed with an exception
Log.e(TAG, "Text recognition error", exception)
val message = getErrorMessage(exception)
message?.let {
Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
}
}
}
A linha a seguir mostra como chamamos o método acima para começar a realizar o reconhecimento de texto. Adicione a seguinte linha no final do método analyze()
. É necessário chamar imageProxy.close
quando a análise da imagem for concluída. Caso contrário, o feed de câmera ao vivo não poderá processar outras imagens para análise.
TextAnalyzer.kt
recognizeTextOnDevice(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
imageProxy.close()
}
Executar o app no seu dispositivo
Agora clique em Run () na barra de ferramentas do Android Studio. Depois que o app for carregado, ele vai começar a reconhecer o texto da câmera em tempo real. Aponte a câmera para qualquer texto para confirmar.
Criar uma instância do identificador de idioma do Kit de ML
Adicione o seguinte campo a MainViewModel.kt
. É assim que você consegue um identificador de idioma para usar na próxima etapa.
MainViewModel.kt
private val languageIdentification = LanguageIdentification.getClient()
Executar a identificação de idioma no dispositivo no texto detectado
Use o Identificador de idioma do Kit de ML para saber o idioma do texto detectado na imagem.
Substitua o TODO na definição do campo sourceLang
em MainViewModel.kt
pelo código abaixo. Esse snippet chama o método de identificação de idioma e atribui o resultado se ele não estiver indefinido ("und").
MainViewModel.kt
languageIdentification.identifyLanguage(text)
.addOnSuccessListener {
if (it != "und")
result.value = Language(it)
}
Executar o app no seu dispositivo
Agora clique em Run () na barra de ferramentas do Android Studio. Depois que o app for carregado, ele vai começar a reconhecer o texto da câmera e identificar o idioma do texto em tempo real. Aponte a câmera para qualquer texto para confirmar.
Substitua a função translate()
em MainViewModel.kt
pelo código abaixo. Essa função recebe o valor do idioma de origem, o valor do idioma de destino e o texto de origem e realiza a tradução. Se o modelo de idioma de destino escolhido ainda não tiver sido transferido para o dispositivo, vamos chamar downloadModelIfNeeded()
para fazer isso e, em seguida, prosseguir com a tradução.
MainViewModel.kt
private fun translate(): Task<String> {
val text = sourceText.value
val source = sourceLang.value
val target = targetLang.value
if (modelDownloading.value != false || translating.value != false) {
return Tasks.forCanceled()
}
if (source == null || target == null || text == null || text.isEmpty()) {
return Tasks.forResult("")
}
val sourceLangCode = TranslateLanguage.fromLanguageTag(source.code)
val targetLangCode = TranslateLanguage.fromLanguageTag(target.code)
if (sourceLangCode == null || targetLangCode == null) {
return Tasks.forCanceled()
}
val options = TranslatorOptions.Builder()
.setSourceLanguage(sourceLangCode)
.setTargetLanguage(targetLangCode)
.build()
val translator = translators[options]
modelDownloading.setValue(true)
// Register watchdog to unblock long running downloads
Handler().postDelayed({ modelDownloading.setValue(false) }, 15000)
modelDownloadTask = translator.downloadModelIfNeeded().addOnCompleteListener {
modelDownloading.setValue(false)
}
translating.value = true
return modelDownloadTask.onSuccessTask {
translator.translate(text)
}.addOnCompleteListener {
translating.value = false
}
}
Executar o app no simulador
Agora clique em Run () na barra de ferramentas do Android Studio. Quando o app for carregado, ele vai ficar parecido com a imagem em movimento abaixo, mostrando o reconhecimento de texto e os resultados de idioma identificados, além do texto traduzido para o idioma escolhido. Você pode escolher qualquer um dos 59 idiomas.
Parabéns! Você acabou de adicionar reconhecimento de texto, identificação de idioma e tradução no dispositivo ao seu app usando o Kit de ML. Agora você pode reconhecer o texto e o idioma dele no feed ao vivo da câmera e traduzir esse texto para o idioma que você escolher, tudo em tempo real.
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 reconhecer texto em imagens
- Como usar a identificação de idioma no dispositivo no Kit de ML para identificar o idioma do texto
- Como usar a tradução no dispositivo do Kit de ML para traduzir texto dinamicamente para 59 idiomas
- Como usar o CameraX com as APIs do Kit de ML
A seguir
- Use o Kit de ML e o CameraX no seu próprio app Android.