Witam ponownie w cyklu związanym z Huawei Mobile Services. W dzisiejszym odcinku druga część dotycząca bibliotek ML Kit, które wstępnie przedstawiłem Wam tydzień temu. Wtedy skupialiśmy się na rozpoznawaniu obrazów, a dzisiaj między innymi wyciągniemy z nich tekst.

Landmark recognition – ML Kit w turystyce

przetwarzanie obiektów krajobrazu ml kit Huawei hms

Pod tą nazwą ukrywa się część biblioteki Huawei, która pozwala na rozpoznawanie wielu popularnych elementów krajobrazu. Znajdziemy tutaj ponad 17000 najpopularniejszych zabytków, rzeźb, pomników oraz innych charakterystycznych obiektów. Rozpoznawanie odbywa się w chmurze, więc należy pamiętać o odpowiednim przygotowaniu konta developerskiego przed przystąpieniem do testów.

Samo API nie sprawia żadnych problemów. Jego obsługa jest bardzo prosta, a działanie szybkie. Spójrzmy na poniższy kod:

val mlFrame = MLFrame.Creator().setBitmap(bitmap).create()
val analyzer = MLAnalyzerFactory.getInstance().getRemoteLandmarkAnalyzer(settings)
analyzer.asyncAnalyseFrame(mlFrame)
        .addOnSuccessListener { landmarkResults ->
            displaySuccess(landmarkResults[0])
        }
        .addOnFailureListener {
            displayFailure()
        }

Osobiście uważam, że Huawei postarało się i nie komplikowało nadmiernie obsługi. W wyniku wywołania usługi dostajemy w odpowiedzi następujące elementy: nazwę obiektu, jego współrzędne GPS oraz współrzędne pozwalające nam znaleźć go na obrazie (np. w celu otoczenia go ramką). Oczywiście nie można w pełni zaufać bibliotek i on też mogą się mylić. W większość przypadków obiekty z wymienionej listy 17000 znajdujących się we wspieranej bazie zostaną rozpoznane prawidłowo, ale trzeba się liczyć z tym, że część może zostać pomylona. Podobnie jak w przypadku rozpoznawania twarzy HMS zwraca nam tutaj prawdopodobieństwo poprawności rezultatu. Jest to bardzo ważne, aby nie ufać niskim wynikom.

Zastosowania tego API będą ograniczały się głównie do aplikacji podróżniczych. Przykładem może być program, dzięki któremu samotny turysta skanuje zabytek na broszurze, a aplikacja po rozpoznaniu go sugeruje najlepszy dojazd.

Dla przypomnienia dodam jeszcze, że aplikacje wykorzystujące HMS mogą działać na urządzeniach innych producentów niż Huawei, jeśli zainstalowany jest na nich HMS Core.

Language, czyli poznajmy nowe języki za pomocą ML Kit

Ta część bibliotek, a w zasadzie dwie części, ułatwią pracę przy tłumaczeniach tekstu. Co tak naprawdę oferuje nam ML Kit w zakresie tłumaczenia? Tak jak wspomniałem już wcześniej, dostępne są dwie funkcjonalności. Pierwszą z nich jest rozpoznawanie języka używanego w przetwarzanym tekście. Drugą natomiast jest usługa tłumaczenia rozpoznanego tekstu na inne języki.

tłumaczenie tekstu ml kit Huawei hms

Na chwilę obecną API jest w stanie rozpoznać 50 języków, w tym także polski. Jedną z jego zalet jest umiejętność rozpoznania wielu języków w pojedynczym tekście. Jeśli więc przetwarzany przez nas tekst zawiera kilka części pisanych w różnych językach, możemy je wszystkie rozpoznać.

val setting = MLRemoteLangDetectorSetting.Factory().create()
val langDetector = MLLangDetectorFactory.getInstance().getRemoteLangDetector(setting)
val task = langDetector.probabilityDetect(sourceText)
task.addOnSuccessListener { text -> 
    remoteDisplaySuccess(text)
}.addOnFailureListener {
    displayFailure()
}

A co potem? Potem można ten tekst przetłumaczyć na język użytkownika. Podobnie jak w przypadku rozpoznawania obiektów krajobrazu, pierwszą myślą jest aplikacja dla turystyki, ale nie ograniczałbym się tutaj jedynie do takich rozwiązań.

val setting = MLRemoteTranslateSetting.Factory().setTargetLangCode(langCode).create()
val translator = MLTranslatorFactory.getInstance().getRemoteTranslator(setting)
val task = translator.asyncTranslate(sourceText)
task.addOnSuccessListener { text ->
    remoteDisplaySuccess(text, true)
}.addOnFailureListener {
    DisplayFailure()
}

Rozpoznawanie tekstu z użyciem ML Kit

Jeśli dobrze się zastanowić, to obsługa może być nieco uciążliwa dla użytkowników. Jakby na to nie patrzeć, każemy im aby wpisali ręcznie często dość długi tekst? Pierwszym rozwiązaniem może być na przykład przetwarzanie tekstu na mowę. Takie rozwiązanie jest już dobrym startem, ale ma pewien poważny minus: zadziała tylko, jeśli chcemy tłumaczyć tekst z języka, który użytkownik nieco już zna. W przypadku, gdy język nie jest znany, mogą wystąpić kłopoty z poprawnym przeczytaniem tekstu. Problematyczne mogą być zarówno z wymową obcych wyrazów, jak i z samym alfabetem. Nie każdy zna przecież np. cyrylicę lub hangul (alfabet koreański).

Zobacz też: Jak działają dymki czatu od kuchni?

Ułatwieniem w takim przypadku byłoby, aby użytkownik mógł po prostu zeskanować tekst przy pomocy telefonu. Do tego celu można wykorzystać kolejną część ML Kit, a mianowicie rozpoznawanie pojedynczego tekstu lub całych dokumentów.

Jeśli zależy nam na rozpoznaniu krótkiego tekstu, można to zrobić lokalnie. Jest tu jednak pewien haczyk – przetwarzanie lokalne obsługuje jedynie część języków i jeśli akurat naszego nie ma na liście, to musimy użyć po raz kolejny chmury. Takiego wyboru nie mamy już w przypadku rozpoznawania całych dokumentów z podziałem na paragrafy. Jak można wyczytać na stronie Huawei, jest to operacja wymagająca dużych mocy obliczeniowych i działa jedynie w Sieci.

przetwarzanie i rozpoznawanie dokumentów ML Kit Huawei hms

W powyższym przykładzie użyłem części mojego artykułu z poprzedniego tygodnia. Jak widać, API nie miało żadnego problemu z językiem polskim, co zdecydowanie podnosi jego wartość dla aplikacji pisanych na nasz rynek.

Wracając jednak do tematu ułatwiania życia użytkownikom, nie powinniśmy zawsze szukać sposobów, aby to zrobić bezboleśnie dla nas, a w sposób intuicyjny dla nich. Moim zdaniem Huawei dostarcza nam do tego bardzo dobre narzędzia.

Wykrywanie i śledzenie obrazów

Przedstawiłem już kilka przykładów na to, że ML Kit potrafi przetwarzać obrazy. Można łatwo rozpoznać, co takiego znajduje się przed użytkownikiem lub przetłumaczyć dla niego tekst. Jestem pewien, że odbiorcy docenią nasze starania, ale czasem to nie wystarczy. Poprzednie przykłady były bardzo statyczne. Poza rozpoznawaniem w trybie rzeczywistym twarzy opieraliśmy się o pojedynczy obraz. Nie ważne, czy szukaliśmy dla użytkownika najlepszej drogi to wieży Eiffla, czy piramid, i tak w optymistycznym przypadku potrzebowaliśmy jednego zdjęcia. Co, jeśli nasza aplikacja miałaby znaleźć dla użytkownika jego klucze do samochodu? Te klucze, które leżą tuż przed nim, ale jak zawsze ich nie widać.

W powyższym nieco abstrakcyjnym przykładzie pomocna byłoby właśnie wykrywanie i śledzenie przedmiotów. Ta część ML Kit może wykryć i śledzić do 8 obiektów jednocześnie. Co ważne, jest w stanie to robić w czasie rzeczywistym. API wykrywa na przykład takie kategorie jak: obiekty gospodarstwa domowego, twarze, rośliny i inne.

przetwarzanie i śledzenie obrazów w czasie rzeczywistym

A co jeśli chcemy czegoś więcej? Co, jeśli nasz przedmiot nie mieści się w żadnej z powyższych kategorii? Mając dostarczone granice naszego obiektu, jesteśmy w stanie wyciąć go i używając uprzednio omawianej klasyfikacji spróbować rozpoznać go przy użyciu chmury. Ogranicza nas jedynie wyobraźnia, ale bardzo podoba mi się jak wspominane tutaj części ML Kit, mogą być używane w celu uzupełniania się.

Zobacz też: Huawei może odetchnąć – istotny spór sądowy właśnie dobiegł końca.

W tym artykule starałem się ukazać możliwości ML Kit, ale jednocześnie pokazałem, że one mogą się uzupełniać. Ja podałem tylko dwa przykłady, ale wierzę, że Wy znajdziecie ich o wiele więcej. Swoimi pomysłami naturalnie możecie dzielić się w komentarzach, ale też na naszym forum dla programistów, gdzie chętnie pomogę Wam we wdrażaniu HMS do aplikacji. Tradycyjnie zachęcam Was do stałego śledzenia naszej sekcji programowania – nowości i ciekawych przykładów na pewno nie zabraknie.

Tomasz Orłowski

Programista Androida z 12-letnim doświadczeniem. Aktualnie współpracuje z Aberit Sp. z o.o. Interactive Agency & Software House