1. Wprowadzenie
ML Kit to mobilny pakiet SDK, który udostępnia zaawansowane, ale łatwe w użyciu narzędzia do uczenia maszynowego od Google na Androida i do aplikacji na Androida. Niezależnie od tego, czy dopiero zaczynasz, czy masz już doświadczenie w uczeniu maszynowym, możesz łatwo wdrożyć potrzebne funkcje za pomocą kilku linii kodu. Aby zacząć, nie musisz mieć zaawansowanej wiedzy o sieciach neuronowych ani optymalizacji modeli.
Jak to działa?
ML Kit ułatwia stosowanie technik uczenia maszynowego w aplikacjach, ponieważ łączy technologie uczenia maszynowego Google, takie jak Mobile Vision i TensorFlow Lite, w jednym pakiecie SDK. Niezależnie od tego, czy potrzebujesz mocy modeli na urządzeniu Mobile Vision w czasie rzeczywistym, czy elastyczności niestandardowych modeli TensorFlow Lite, ML Kit umożliwia to za pomocą zaledwie kilku wierszy kodu.
W tym ćwiczeniu z programowania dowiesz się, jak w prosty sposób dodać do istniejącej aplikacji na Androida funkcje rozpoznawania tekstu, identyfikacji języka i tłumaczenia z przekazu z kamery w czasie rzeczywistym. Poznasz też sprawdzone metody korzystania z interfejsów CameraX i ML Kit API.
Co utworzysz
W tym ćwiczeniu z programowania utworzysz aplikację na Androida z ML Kit. Aplikacja będzie używać interfejsu ML Kit Text Recognition na urządzeniu do rozpoznawania tekstu z przekazu z kamery w czasie rzeczywistym. Użyje interfejsu ML Kit Language Identification API, aby rozpoznać język rozpoznanego tekstu. Na koniec aplikacja przetłumaczy ten tekst na dowolny z 59 języków za pomocą interfejsu ML Kit Translation API.
Efekt powinien być podobny do tego na obrazie 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 Text Recognition, Language Identification i Translation API oraz ich możliwości.
- Jak używać biblioteki CameraX z interfejsami API ML Kit.
Czego potrzebujesz
- Najnowsza wersja Androida Studio (4.0 lub nowsza)
- fizyczne urządzenie z Androidem,
- Przykładowy kod
- Podstawowa wiedza na temat tworzenia aplikacji na Androida w języku Kotlin
Ten moduł Codelab dotyczy ML Kit. Nieistotne koncepcje i bloki kodu zostały już podane i wdrożone.
2. Przygotowania
Pobieranie kodu
Kliknij ten link, aby pobrać cały kod do tych ćwiczeń:
Rozpakuj pobrany plik ZIP. Spowoduje to rozpakowanie folderu głównego (mlkit-android) ze wszystkimi potrzebnymi zasobami. W tym ćwiczeniu potrzebne będą tylko zasoby z podkatalogu translate.
Podkatalog translate w repozytorium mlkit-android zawiera ten katalog:
starter – kod początkowy, na którym będziesz pracować w tym ćwiczeniu z programowania.
3. Importowanie projektu i weryfikowanie zależności ML Kit i CameraX
Zaimportuj projekt początkowy do Android Studio. W pliku app/build.gradle sprawdź, czy są uwzględnione 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'
4. Uruchamianie aplikacji startowej
Po zaimportowaniu projektu do Android Studio i sprawdzeniu zależności ML Kit możesz po raz pierwszy uruchomić aplikację. Na pasku narzędzi Android Studio kliknij Uruchom (
).
Aplikacja powinna się uruchomić na urządzeniu. Możesz skierować aparat na różne teksty, aby zobaczyć obraz na żywo, ale funkcja rozpoznawania tekstu nie została jeszcze wdrożona.

5. Dodawanie rozpoznawania tekstu
W tym kroku dodamy do aplikacji funkcję rozpoznawania tekstu z kamery wideo.
Utwórz instancję detektora tekstu ML Kit
Zastąp symbol TODO u góry elementu TextAnalyzer.kt, aby utworzyć instancję elementu TextRecognition. W ten sposób uzyskasz dostęp do narzędzia do rozpoznawania tekstu, którego użyjesz w dalszych krokach. Musimy też dodać detektor jako obserwatora cyklu życia, aby prawidłowo go zamknąć, gdy nie będzie już potrzebny.
TextAnalyzer.kt
private val detector = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
init {
lifecycle.addObserver(detector)
}
Przeprowadź rozpoznawanie tekstu na obrazie wejściowym (utworzonym za pomocą bufora z aparatu)
Biblioteka CameraX udostępnia strumień obrazów z kamery gotowych do analizy. Zastąp metodę recognizeText() w klasie TextAnalyzer, aby używać rozpoznawania tekstu ML Kit w każdej klatce obrazu.
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()
}
}
}
Poniższa linia 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 przekaz na żywo z kamery nie będzie mógł przetwarzać kolejnych obrazów do analizy.
TextAnalyzer.kt
recognizeText(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
imageProxy.close()
}
Uruchom aplikację na urządzeniu
Teraz na pasku narzędzi Android Studio kliknij Uruchom (
). Po wczytaniu aplikacji powinna ona zacząć rozpoznawać tekst z kamery w czasie rzeczywistym. Skieruj aparat na dowolny tekst, aby potwierdzić. Jeśli aplikacja nie rozpoznaje żadnego tekstu, spróbuj „zresetować” wykrywanie, kierując aparat na puste miejsce, a następnie na tekst.
6. Dodawanie identyfikacji języka
Utwórz instancję identyfikatora języka ML Kit
MainViewModel.kt znajduje się w folderze głównym. Otwórz plik i dodaj do niego to pole: MainViewModel.kt. W ten sposób uzyskasz identyfikator języka, którego użyjesz w następnym kroku.
MainViewModel.kt
private val languageIdentifier = LanguageIdentification.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
Musisz też mieć pewność, że klienci są prawidłowo wyłączani, gdy nie są już potrzebni. Aby to zrobić, zastąp metodę onCleared() klasy ViewModel.
MainViewModel.kt
override fun onCleared() {
languageIdentifier.close()
translators.evictAll()
}
Uruchamianie na urządzeniu identyfikacji języka wykrytego tekstu
Użyj narzędzia ML Kit Language Identifier, aby uzyskać język wykrytego tekstu z obrazu.
Zastąp znak 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 niezdefiniowany („und”). Nieokreślony język oznacza, że API nie udało się zidentyfikować języka na podstawie listy obsługiwanych języków.
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
}
Uruchom aplikację na urządzeniu
Teraz na pasku narzędzi Android Studio kliknij Uruchom (
). Po wczytaniu aplikacja powinna zacząć rozpoznawać tekst z aparatu i identyfikować jego język w czasie rzeczywistym. Skieruj aparat na dowolny tekst, aby potwierdzić.
7. Dodaj tłumaczenie
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 kontynuujemy 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 w symulatorze
Teraz na pasku narzędzi Android Studio kliknij Uruchom (
). Po wczytaniu aplikacja powinna wyglądać jak na animacji poniżej, pokazując wyniki rozpoznawania tekstu i wykrytego języka oraz przetłumaczony tekst w wybranym języku. Możesz wybrać dowolny z 59 języków.

8. Gratulacje!
Gratulacje! Właśnie dodano do aplikacji rozpoznawanie tekstu na urządzeniu, identyfikację języka i tłumaczenie za pomocą ML Kit. Teraz możesz rozpoznawać tekst i jego język w przekazie na żywo z kamery i tłumaczyć go na wybrany język 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 używać tłumaczenia na urządzeniu w ML Kit do dynamicznego tłumaczenia tekstu na 59 języków
- Jak używać CameraX w połączeniu z interfejsami API ML Kit
Następne kroki
- Używaj ML Kit i CameraX we własnej aplikacji na Androida.