1. Introdução
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 e Android em um pacote eficiente e fácil de usar. Não importa se você é iniciante ou experiente em machine learning, é possível implementar facilmente a funcionalidade de que precisa com apenas algumas linhas de código. Não é necessário ter profundo conhecimento 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 reunindo as tecnologias de ML do Google, como o Mobile Vision e o TensorFlow Lite em um único SDK. Não importa se você precisa da potência em tempo real 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 torna isso possível com apenas algumas linhas de código.
Este codelab mostra etapas simples para adicionar reconhecimento de texto, identificação de idioma e tradução do feed de câmera em tempo real ao seu app Android. Este codelab também destaca as práticas recomendadas para o uso do CameraX com as APIs do Kit de ML.
O que você criará
Neste codelab, você criará um app Android com o Kit de ML. Seu app vai usar a API de reconhecimento de texto do kit de ML no dispositivo para reconhecer texto da transmissão da câmera em tempo real. Ele vai usar a API ML Kit Language Identification para identificar o idioma do texto reconhecido. Por fim, o app vai traduzir esse texto para qualquer idioma entre 59 opções usando a API Translation do Kit de ML.
No final, você verá algo semelhante à imagem abaixo.
O que você vai aprender
- Como usar o SDK do kit de ML para adicionar recursos de machine learning com facilidade a qualquer app Android.
- Reconhecimento de texto do Kit de ML, identificação de idiomas, APIs Translation e os respectivos recursos.
- 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+)
- Um dispositivo Android físico
- Código de amostra
- Conhecimento básico de desenvolvimento para Android em Kotlin.
Este codelab é focado no Kit de ML. Conceitos não relevantes e blocos de código já foram fornecidos e implementados para você.
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 vai descompactar uma pasta raiz (mlkit-android
) com todos os recursos necessários. Para este codelab, você só 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 neste codelab.
3. Importe o projeto e verifique as dependências do Kit de ML e do CameraX
Importe o projeto inicial para o Android Studio. 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'
4. Executar o app inicial
Agora que você importou o projeto para o Android Studio e verificou as dependências do Kit de ML, você já pode executar o app pela primeira vez. Clique em Run ( ) na barra de ferramentas do Android Studio.
O app será iniciado no dispositivo, e você poderá apontar a câmera para vários textos para ver um feed ao vivo, mas a funcionalidade de reconhecimento de texto ainda não foi implementada.
5. Adicionar reconhecimento de texto
Nesta etapa, adicionaremos uma funcionalidade ao app para reconhecer texto da câmera de vídeo.
Instanciar o detector de texto do kit de ML
Substitua o TODO
na parte de cima do TextAnalyzer.kt
para instanciar o TextRecognition
. É assim que você cria um identificador para que o reconhecedor de texto use nas etapas posteriores. Também precisamos adicionar o detector como um observador do ciclo de vida para fechar corretamente o detector quando ele não for mais necessário.
TextAnalyzer.kt
private val detector = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
init {
lifecycle.addObserver(detector)
}
Executar reconhecimento de texto em uma imagem de entrada (criado com um buffer da câmera)
A biblioteca CameraX fornece um fluxo de imagens da câmera pronto para análise. Substitua o método recognizeText()
na classe TextAnalyzer para usar o reconhecimento de texto do Kit de ML em cada frame de imagem.
TextAnalyzer.kt
private fun recognizeText(
image: InputImage
): Task<Text> {
// Pass image to an ML Kit Vision API
return detector.process(image)
.addOnSuccessListener { text ->
// Task completed successfully
result.value = text.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 iniciar o reconhecimento de texto. Adicione a linha mostrada abaixo ao final do método analyze()
. É necessário chamar imageProxy.close
quando a análise for concluída na imagem. Caso contrário, o feed da câmera em tempo real não vai poder processar mais imagens para análise.
TextAnalyzer.kt
recognizeText(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 é carregado, ele passa a reconhecer o texto da câmera em tempo real. Aponte a câmera para qualquer texto para confirmar. Se o app não estiver reconhecendo texto, tente "redefinir" a detecção apontando a câmera para um espaço em branco antes de apontar a câmera para o texto.
6. Adicionar identificação de idioma
Instanciar o identificador de idioma do kit de ML
MainViewModel.kt
está localizado na pasta principal. Navegue até o arquivo e 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 languageIdentifier = LanguageIdentification.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
Além disso, você também quer ter certeza de que os clientes foram encerrados corretamente quando não forem mais necessários. Para fazer isso, substitua o método onCleared()
da ViewModel
.
MainViewModel.kt
override fun onCleared() {
languageIdentifier.close()
translators.evictAll()
}
Executar a identificação de idioma no dispositivo com o texto detectado
Use o identificador de idioma do kit de ML para descobrir 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 for indefinido ("und"). Um idioma indefinido significa que a API não conseguiu identificar o idioma com base na lista de idiomas compatíveis.
MainViewModel.kt
val sourceLang = Transformations.switchMap(sourceText) { text ->
val result = MutableLiveData<Language>()
languageIdentifier.identifyLanguage(text)
.addOnSuccessListener { languageCode ->
if (languageCode != "und")
result.value = Language(languageCode)
}
result
}
Executar o app no seu dispositivo
Agora clique em Run ( ) na barra de ferramentas do Android Studio. Após o carregamento, o app precisa começar a reconhecer o texto da câmera e identificar o idioma em tempo real. Aponte a câmera para qualquer texto para confirmar.
7. Adicionar tradução
Substitua a função translate()
em MainViewModel.kt
pelo código a seguir. Essa função usa os valores do idioma de origem, do idioma de destino e do texto de origem e realiza a tradução. Se o modelo de idioma de destino escolhido ainda não tiver sido transferido por download para o dispositivo, chamaremos downloadModelIfNeeded()
para fazer isso e, em seguida, continuaremos 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. Depois que o app for carregado, ele terá a aparência da imagem em movimento abaixo, mostrando o reconhecimento de texto e os resultados de idiomas identificados, além do texto traduzido para o idioma escolhido. Você pode escolher qualquer um dos 59 idiomas.
8. Parabéns!
Parabéns! Você adicionou o reconhecimento de texto, a identificação de idioma e a tradução no dispositivo ao seu app usando o Kit de ML. Agora você pode reconhecer o texto e o idioma dele no feed da câmera ao vivo e traduzi-lo para um idioma escolhido 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 no Kit de ML para traduzir texto dinamicamente para 59 idiomas
- Como usar o CameraX com as APIs do Kit de ML.
Próximas etapas
- Use o Kit de ML e o CameraX no seu app Android.