ML Kit to mobilny pakiet SDK, który udostępnia zaawansowane funkcje uczenia maszynowego Google w wysokiej jakości, a jednocześnie łatwym w użyciu pakiecie. Niezależnie od tego, czy dopiero zaczynasz korzystać z systemów uczących się, czy masz już doświadczenie w tej dziedzinie, możesz łatwo wdrożyć potrzebną funkcję za pomocą kilku linii kodu. Nie musisz mieć szczegółowej wiedzy o sieciach neuronowych ani optymalizacji modeli, aby zacząć korzystać z tej funkcji.
Jak to działa?
ML Kit ułatwia stosowanie technik uczenia maszynowego w aplikacjach, ponieważ łączy w jednym pakiecie SDK technologie uczenia maszynowego od Google, takie jak Mobile Vision i TensorFlow Lite. Niezależnie od tego, czy potrzebujesz potężnych możliwości modeli na urządzeniu Mobile Vision czy elastyczności niestandardowych modeli TensorFlow Lite, ML Kit umożliwia to za pomocą kilku linii kodu.
W tych ćwiczeniach z programowania poznasz proste kroki, które pozwolą Ci dodać do istniejącej aplikacji na Androida rozpoznawanie tekstu, identyfikację języka i tłumaczenie z obrazu z kamery w czasie rzeczywistym. Dowiesz się też, jak korzystać z interfejsów API CameraX i ML Kit.
Co utworzysz
W tym ćwiczeniu z programowania utworzysz aplikację na Androida za pomocą ML Kit. Aplikacja będzie używać interfejsu API do rozpoznawania tekstu w ML Kit na urządzeniu, aby rozpoznawać tekst z obrazu z kamery w czasie rzeczywistym. Do identyfikacji języka rozpoznanego tekstu zostanie użyte ML Kit Language Identification API. Na koniec aplikacja przetłumaczy ten tekst na dowolny z 59 dostępnych języków za pomocą interfejsu ML Kit Translation API.
Powinien pojawić się ekran podobny do tego poniżej.
Czego się nauczysz
- Jak za pomocą pakietu ML Kit SDK łatwo dodać funkcje uczenia maszynowego do dowolnej aplikacji na Androida
- Interfejsy ML Kit do rozpoznawania tekstu, identyfikacji języka i tłumaczenia oraz ich możliwości.
- Jak używać biblioteki CameraX z interfejsami ML Kit
Co będzie Ci potrzebne
- najnowsza wersja Android Studio (4.0 lub nowsza);
- fizyczne urządzenie z Androidem,
- Przykładowy kod
- podstawowa znajomość tworzenia aplikacji na Androida w Kotlinie;
Ten moduł dotyczy ML Kit. Nieistotne koncepcje i bloki kodu zostały już zaimplementowane.
Pobieranie kodu
Aby pobrać cały kod tego ćwiczenia, kliknij ten link:
Rozpakuj pobrany plik ZIP. Spowoduje to rozpakowanie folderu głównego (mlkit-android
) ze wszystkimi potrzebnymi zasobami. W tym ćwiczeniu będziesz potrzebować tylko zasobów z podkatalogu translate
.
Podkatalog translate
w repozytorium mlkit-android
zawiera ten katalog:
starter – kod startowy, na którym możesz budować w tym ćwiczeniu z programowania.
W pliku app/build.gradle
sprawdź, czy uwzględniono niezbędne zależności ML Kit i CameraX:
// 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'
Po zaimportowaniu projektu do Android Studio i sprawdzeniu zależności ML Kit możesz uruchomić aplikację po raz pierwszy. Uruchom emulator Android Studio i kliknij Uruchom () na pasku narzędzi Android Studio.
Aplikacja powinna się uruchomić na urządzeniu. Możesz skierować kamerę na różne teksty, aby zobaczyć obraz na żywo. Funkcja rozpoznawania tekstu nie została jeszcze zaimplementowana.
W tym kroku dodamy do Twojej aplikacji funkcję rozpoznawania tekstu z kamery wideo.
Tworzenie instancji wykrywacza tekstu w ML Kit
Dodaj to pole na początku TextAnalyzer.kt
. W ten sposób uzyskujesz dostęp do rozpoznawacza tekstu, który będzie używany w kolejnych krokach.
TextAnalyzer.kt
private val detector = TextRecognition.getClient()
Rozpoznawanie tekstu na urządzeniu na obrazie z Vision ( utworzonym za pomocą bufora z kamery)
Biblioteka CameraX udostępnia strumień obrazów z kamery gotowych do analizy. Zastąp metodę recognizeTextOnDevice()
w klasie TextAnalyzer, aby używać rozpoznawania tekstu za pomocą ML Kit na każdej klatce obrazu.
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()
}
}
}
Następujący wiersz kodu pokazuje, jak wywołujemy powyższą metodę, aby rozpocząć rozpoznawanie tekstu. Na końcu metody analyze()
dodaj ten wiersz. Pamiętaj, że po zakończeniu analizy obrazu musisz wywołać funkcję imageProxy.close
. W przeciwnym razie transmisja na żywo z kamery nie będzie mogła przetwarzać kolejnych obrazów na potrzeby analizy.
TextAnalyzer.kt
recognizeTextOnDevice(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
imageProxy.close()
}
Uruchom aplikację na urządzeniu
Teraz na pasku narzędzi Android Studio kliknij Uruchom (). Po załadowaniu aplikacji powinna ona zacząć rozpoznawać tekst z kamery w czasie rzeczywistym. Skieruj aparat na dowolny tekst, aby go odczytać.
Tworzenie instancji identyfikatora języka ML Kit
Dodaj do MainViewModel.kt
to pole: W ten sposób uzyskasz identyfikator języka, który będzie używany w następnym kroku.
MainViewModel.kt
private val languageIdentification = LanguageIdentification.getClient()
Wykonywanie identyfikacji języka na urządzeniu na podstawie wykrytego tekstu
Użyj identyfikatora języka ML Kit, aby poznać język wykrytego tekstu na obrazie.
Zastąp TODO w definicji pola sourceLang
w pliku MainViewModel.kt
tym kodem. Ten fragment kodu wywołuje metodę identyfikacji języka i przypisuje wynik, jeśli nie jest on nieokreślony („und”).
MainViewModel.kt
languageIdentification.identifyLanguage(text)
.addOnSuccessListener {
if (it != "und")
result.value = Language(it)
}
Uruchom aplikację na urządzeniu
Teraz na pasku narzędzi Android Studio kliknij Uruchom (). Po załadowaniu aplikacji powinna ona zacząć rozpoznawać tekst z kamery i określać język tekstu w czasie rzeczywistym. Skieruj aparat na dowolny tekst, aby go odczytać.
Zastąp funkcję translate()
w pliku MainViewModel.kt
tym kodem. Ta funkcja przyjmuje wartość języka źródłowego, wartość języka docelowego i tekst źródłowy, a następnie wykonuje tłumaczenie. Zwróć uwagę, że jeśli wybrany model języka docelowego nie został jeszcze pobrany na urządzenie, wywołujemy funkcję downloadModelIfNeeded()
, aby to zrobić, a następnie wykonujemy tłumaczenie.
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
}
}
Uruchamianie aplikacji na symulatorze
Teraz na pasku narzędzi Android Studio kliknij Uruchom (). Po załadowaniu aplikacji powinna ona wyglądać jak animowane zdjęcie poniżej. Widok obejmuje rozpoznawanie tekstu, rozpoznanie języka i przetłumaczony tekst w wybranym języku. Możesz wybrać dowolny z 59 języków.
Gratulacje! Korzystając z ML Kit, dodałeś/dodałaś do aplikacji rozpoznawanie tekstu, identyfikację języka i tłumaczenie. Teraz możesz rozpoznawać tekst i jego język na podstawie obrazu z kamery na żywo, a potem tłumaczyć go na wybrany język – wszystko w czasie rzeczywistym.
Omówione zagadnienia
- Jak dodać ML Kit do aplikacji na Androida
- Jak używać rozpoznawania tekstu na urządzeniu w ML Kit do rozpoznawania tekstu na obrazach
- Jak używać rozpoznawania języka na urządzeniu w ML Kit do identyfikowania języka tekstu
- Jak korzystać z tłumaczenia na urządzeniu w ML Kit, aby dynamicznie tłumaczyć tekst na 59 języków
- Jak używać CameraX w połączeniu z interfejsami ML Kit
Dalsze kroki
- Używaj ML Kit i CameraX w swojej aplikacji na Androida.