1. Wprowadzenie
ML Kit to mobilny pakiet SDK, który udostępnia doświadczenie Google w dziedzinie systemów uczących się w aplikacjach na Androida i Androida w ramach zaawansowanego i łatwego w użyciu pakietu. Niezależnie od tego, czy dopiero zaczynasz swoją przygodę z systemami uczącymi się, czy masz już doświadczenie w tej dziedzinie, możesz łatwo wdrożyć potrzebne funkcje za pomocą kilku linijek kodu. Nie trzeba mieć dogłębnej wiedzy o sieciach neuronowych ani optymalizacji modeli.
Jak to działa?
ML Kit ułatwia stosowanie technik ML w aplikacjach dzięki połączeniu technologii ML od Google, takich jak Mobile Vision i TensorFlow Lite, w jednym pakiecie SDK. Niezależnie od tego, czy potrzebujesz możliwości działających w czasie rzeczywistym możliwości modeli na urządzeniu Mobile Vision czy elastyczności niestandardowych modeli TensorFlow Lite, ML Kit to umożliwia, ponieważ wystarczy do tego kilka linijek kodu.
Dzięki nim dowiesz się, jak w prosty sposób dodać rozpoznawanie tekstu, identyfikację języka i tłumaczenie z obrazu z kamery w czasie rzeczywistym do aplikacji na Androida. W ramach tego ćwiczenia w programie wyróżnione zostaną też sprawdzone metody dotyczące korzystania z aplikacji CameraX z interfejsami API ML Kit.
Co utworzysz
W ramach tego ćwiczenia w Codelabs dowiesz się, jak utworzyć aplikację na Androida przy użyciu ML Kit. Twoja aplikacja będzie używać interfejsu API rozpoznawania tekstu ML Kit na urządzeniu do rozpoznawania tekstu z pliku danych z kamery w czasie rzeczywistym. Do określenia języka rozpoznanego tekstu zostanie użyty interfejs ML Kit Language Identification API. Na koniec aplikacja przetłumaczy ten tekst na dowolny wybrany język z 59 opcji za pomocą interfejsu ML Kit Translation API.
W ostatecznym rozrachunku powinien pojawić się obraz podobny do tego poniżej.
Czego się nauczysz
- Jak używać pakietu ML Kit SDK, aby łatwo dodawać możliwości systemów uczących się do dowolnej aplikacji na Androida.
- Rozpoznawanie tekstu, identyfikacja języka, interfejsy tłumaczeniowe i ich możliwości w systemach ML Kit.
- Jak korzystać z biblioteki CameraX z interfejsami API ML Kit.
Czego potrzebujesz
- najnowszą wersję Android Studio (4.0 lub nowszą),
- fizyczne urządzenie z Androidem,
- Przykładowy kod
- Podstawowa wiedza o programowaniu na Androida w Kotlin
To ćwiczenia w programowaniu koncentrują się na ML Kit. Nieistotne koncepcje i bloki kodu zostały już podane i zaimplementowane.
2. Przygotowanie
Pobieranie kodu
Kliknij poniższy link, aby pobrać cały kod do tego ćwiczenia w Codelabs:
Rozpakuj pobrany plik ZIP. Spowoduje to rozpakowanie folderu głównego (mlkit-android
) ze wszystkimi potrzebnymi zasobami. W tym ćwiczeniu w Codelabs będziesz potrzebować tylko zasobów z podkatalogu translate
.
Podkatalog translate
w repozytorium mlkit-android
zawiera ten katalog:
starter – kod początkowy, który opracujesz w ramach tego ćwiczenia z programowania.
3. Zaimportuj projekt i sprawdź zależności ML Kit i CameraX
Zaimportuj projekt początkowy do Android Studio. Sprawdź, czy plik app/build.gradle
zawiera 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. Uruchom aplikację startową
Po zaimportowaniu projektu do Android Studio i sprawdzeniu zależności ML Kit możesz uruchomić aplikację po raz pierwszy. Kliknij Uruchom ( ) na pasku narzędzi Android Studio.
Aplikacja powinna się uruchomić na urządzeniu. Możesz skierować aparat na wybrany tekst, aby zobaczyć podgląd transmisji na żywo, jednak funkcja rozpoznawania tekstu nie jest jeszcze wdrożona.
5. Dodaj rozpoznawanie tekstu
W tym kroku dodamy do Twojej aplikacji funkcję rozpoznawania tekstu z kamery wideo.
Tworzenie wystąpienia narzędzia do wykrywania tekstu ML Kit
Zastąp TODO
na górze TextAnalyzer.kt
, aby utworzyć instancję TextRecognition
. W ten sposób otrzymasz uchwyt modułu rozpoznawania tekstu, którego użyjesz w następnych krokach. Musimy też dodać detektor jako obserwator cyklu życia, aby prawidłowo zamykać detektor, gdy nie jest już potrzebny.
TextAnalyzer.kt
private val detector = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
init {
lifecycle.addObserver(detector)
}
Uruchamianie rozpoznawania tekstu na obrazie wejściowym (utworzonym w buforze z aparatu)
Biblioteka CameraX udostępnia strumień obrazów z aparatu gotowy do analizy. Zastąp metodę recognizeText()
w klasie Text Analysisr, aby używać rozpoznawania tekstu przez narzędzie ML Kit w każdej ramce 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()
}
}
}
W poniższym wierszu pokazano, jak wywołujemy powyższą metodę, aby rozpocząć rozpoznawanie tekstu. Dodaj poniższy wiersz na końcu metody analyze()
. Pamiętaj, że po zakończeniu analizy obrazu musisz wywołać funkcję imageProxy.close
. W przeciwnym razie obraz z kamery nie będzie w stanie przetworzyć kolejnych obrazów na potrzeby analizy.
TextAnalyzer.kt
recognizeText(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
imageProxy.close()
}
Uruchamianie aplikacji na urządzeniu
Teraz kliknij Uruchom ( ) na pasku narzędzi Android Studio. Po załadowaniu aplikacja powinna w czasie rzeczywistym rozpoznawać tekst z aparatu. Skieruj aparat na dowolny tekst, aby go potwierdzić. Jeśli aplikacja nie rozpoznaje żadnego tekstu, spróbuj zresetować go poprzez skierowanie aparatu na puste miejsce, a następnie na tekst.
6. Dodaj rozpoznawanie języków
Utwórz instancję identyfikatora języka ML Kit
MainViewModel.kt
znajduje się w głównym folderze. Przejdź do pliku i dodaj do pliku MainViewModel.kt
to pole: W ten sposób uzyskasz nick dla identyfikatora języka, którego użyjesz w następnym kroku.
MainViewModel.kt
private val languageIdentifier = LanguageIdentification.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
Warto też upewnić się, że klienty są prawidłowo wyłączane, gdy nie są już potrzebne. Aby to zrobić, zastąp metodę onCleared()
właściwości ViewModel
.
MainViewModel.kt
override fun onCleared() {
languageIdentifier.close()
translators.evictAll()
}
Uruchamianie identyfikacji języka na urządzeniu w przypadku wykrytego tekstu
Użyj identyfikatora języka ML Kit, aby ustalić język wykrytego tekstu na podstawie obrazu.
Zastąp TODO
w definicji pola sourceLang
w pliku MainViewModel.kt
poniższym kodem. Ten fragment kodu wywołuje metodę identyfikacji języka i przypisuje wynik, jeśli nie jest niezdefiniowany („und”). Jeżeli język jest niezdefiniowany, oznacza to, że interfejs API nie był w stanie 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
}
Uruchamianie aplikacji na urządzeniu
Teraz kliknij Uruchom ( ) na pasku narzędzi Android Studio. Po załadowaniu aplikacja powinna na bieżąco rozpoznawać tekst z aparatu i identyfikować jego język. Skieruj aparat na dowolny tekst, aby go potwierdzić.
7. Dodaj tłumaczenie
Zastąp funkcję translate()
w obiekcie MainViewModel.kt
poniższym kodem. Ta funkcja wykonuje tłumaczenie na podstawie wartości języka źródłowego, docelowego i tekstu źródłowego. Zwróć uwagę, że jeśli wybrany model języka docelowego nie został jeszcze pobrany na urządzenie, wywołujemy aplikację downloadModelIfNeeded()
, 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 kliknij Uruchom ( ) na pasku narzędzi Android Studio. Po załadowaniu aplikacja powinna wyglądać jak ruchomy obraz poniżej. Pokazuje rozpoznawanie tekstu, rozpoznane języki oraz przetłumaczony tekst na wybrany język. Możesz wybrać dowolny z 59 języków.
8. Gratulacje!
Gratulujemy! Właśnie udało Ci się dodać do aplikacji rozpoznawanie tekstu na urządzeniu, rozpoznawanie języków i tłumaczenie za pomocą ML Kit. Teraz możesz rozpoznawać tekst i jego język na podstawie obrazu 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ć identyfikacji języka na urządzeniu w ML Kit do identyfikacji języka tekstu
- Jak korzystać z funkcji 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 API ML Kit
Następne kroki
- Użyj ML Kit i CameraX we własnej aplikacji na Androida.