Rozpoznawanie tekstu i twarzy za pomocą ML Kit: Android

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 iOS w zaawansowanym i łatwym w obsłudze pakiecie. 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 musisz mieć szczegółowej wiedzy o sieciach neuronowych ani optymalizacji modeli, aby zacząć korzystać z tej funkcji.

Jeśli podczas wykonywania ćwiczeń z programowania napotkasz jakieś problemy (błędy w kodzie, błędy gramatyczne, niejasne sformułowania itp.), zgłoś je, klikając link Zgłoś błąd w lewym dolnym rogu ćwiczenia.

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 modeli na urządzeniu Mobile Vision w czasie rzeczywistym, czy elastyczności niestandardowych modeli TensorFlow Lite, ML Kit Ci pomoże.

W tym ćwiczeniu z programowania przeprowadzimy Cię przez proces tworzenia własnej aplikacji na Androida, która automatycznie wykrywa tekst i cechy twarzy na obrazie.

Co utworzysz

W tym ćwiczeniu z programowania utworzysz aplikację na Androida za pomocą ML Kit. Twoja aplikacja będzie:

  • Wykrywanie tekstu na obrazach za pomocą interfejsu ML Kit Text Recognition API
  • Używanie interfejsu ML Kit Face Contour API do rozpoznawania rysów twarzy na obrazach

Czego się nauczysz

  • Jak używać pakietu ML Kit SDK, aby łatwo dodawać zaawansowane funkcje systemów uczących się, takie jak rozpoznawanie tekstu czy wykrywanie twarzy

Czego potrzebujesz

  • najnowsza wersja Android Studio (3.0 lub nowsza);
  • emulator Android Studio lub fizyczne urządzenie z Androidem,
  • Przykładowy kod
  • Podstawowa wiedza o programowaniu na Androida w Javie
  • podstawowa znajomość modeli uczenia maszynowego,

Ten moduł dotyczy ML Kit. Nieistotne koncepcje i bloki kodu zostały zamaskowane. Można je po prostu skopiować i wkleić.

2. Konfiguracja

Pobieranie kodu

Kliknij poniższy link, aby pobrać cały kod tego ćwiczenia z programowania:

Rozpakuj pobrany plik ZIP. Spowoduje to rozpakowanie folderu głównego (mlkit-android-master) ze wszystkimi potrzebnymi zasobami. W tym ćwiczeniu będziesz potrzebować tylko zasobów z podkatalogu vision.

Podkatalog vision w repozytorium mlkit-android-master zawiera 2 katalogi:

  • android_studio_folder.pngstarter – kod startowy, na którym możesz budować w tym ćwiczeniu z programowania.
  • android_studio_folder.pngfinal – gotowy kod gotowej przykładowej aplikacji.

3. Sprawdź zależności ML Kit

Sprawdzanie zależności ML Kit

Na końcu pliku build.gradle w katalogu app projektu powinny już znajdować się te wiersze:

build.gradle

dependencies {
  // Face features
  implementation 'com.google.mlkit:face-detection:16.0.0'

  // Text features
  implementation 'com.google.android.gms:play-services-mlkit-text-recognition:16.0.0'
}

Oto konkretne zależności ML Kit, które są potrzebne do implementacji funkcji opisanych w tym ćwiczeniu z programowania.

4. Uruchamianie aplikacji startowej

Po zaimportowaniu projektu do Android Studio i sprawdzeniu zależności pakietu ML Kit możesz uruchomić aplikację po raz pierwszy. Uruchom emulator Android Studio i kliknij Uruchom ( execute.png) na pasku narzędzi Android Studio.

Aplikacja powinna uruchomić się w emulatorze. W tym momencie powinien wyświetlić się podstawowy układ z menu, w którym możesz wybrać 1 z 3 obrazów. W następnej sekcji dodasz do swojej aplikacji funkcję rozpoznawania tekstu, aby rozpoznawać tekst na obrazach.

5. Dodawanie rozpoznawania tekstu na urządzeniu

W tym kroku dodamy do Twojej aplikacji funkcję rozpoznawania tekstu na obrazach.

Konfigurowanie i uruchamianie rozpoznawania tekstu na obrazie na urządzeniu

Dodaj do metody runTextRecognition klasy MainActivity te elementy:

MainActivity.java

private void runTextRecognition() {
   InputImage image = InputImage.fromBitmap(mSelectedImage, 0);
   TextRecognizer recognizer = TextRecognition.getClient();
   mTextButton.setEnabled(false);
   recognizer.process(image)
           .addOnSuccessListener(
                   new OnSuccessListener<Text>() {
                       @Override
                       public void onSuccess(Text texts) {
                           mTextButton.setEnabled(true);
                           processTextRecognitionResult(texts);
                       }
                   })
           .addOnFailureListener(
                   new OnFailureListener() {
                       @Override
                       public void onFailure(@NonNull Exception e) {
                           // Task failed with an exception
                           mTextButton.setEnabled(true);
                           e.printStackTrace();
                       }
                   });
}

Powyższy kod konfiguruje detektor rozpoznawania tekstu i wywołuje funkcję processTextRecognitionResult z odpowiedzią.

Przetwarzanie odpowiedzi rozpoznawania tekstu

Dodaj ten kod do funkcji processTextRecognitionResult w klasie MainActivity, aby przeanalizować wyniki i wyświetlić je w aplikacji.

MainActivity.java

private void processTextRecognitionResult(Text texts) {
   List<Text.TextBlock> blocks = texts.getTextBlocks();
   if (blocks.size() == 0) {
       showToast("No text found");
       return;
   }
   mGraphicOverlay.clear();
   for (int i = 0; i < blocks.size(); i++) {
       List<Text.Line> lines = blocks.get(i).getLines();
       for (int j = 0; j < lines.size(); j++) {
           List<Text.Element> elements = lines.get(j).getElements();
           for (int k = 0; k < elements.size(); k++) {
               Graphic textGraphic = new TextGraphic(mGraphicOverlay, elements.get(k));
               mGraphicOverlay.add(textGraphic);

           }
       }
   }
}

Uruchamianie aplikacji w emulatorze

Teraz kliknij Uruchom ( execute.png) na pasku narzędzi Android Studio. Po załadowaniu aplikacji sprawdź, czy w polu menu wybrana jest opcja Test Image 1(Text), a potem kliknij przycisk FIND TEXT.

Aplikacja powinna teraz wyglądać tak, jak na ilustracji poniżej. Zobaczysz na niej wyniki rozpoznawania tekstu oraz ramki ograniczające nałożone na obraz.

10b12d0e8822eaf5.png

Zdjęcie: Kai Schreiber / Wikimedia Commons / CC BY-SA 2.0

Gratulacje! Właśnie dodałeś/dodałaś do aplikacji rozpoznawanie tekstu na urządzeniu za pomocą ML Kit. Rozpoznawanie tekstu na urządzeniu jest przydatne w wielu przypadkach, ponieważ działa nawet wtedy, gdy aplikacja nie ma połączenia z internetem. Jest też wystarczająco szybkie, aby wykorzystywać je w przypadku obrazów statycznych i ramek wideo na żywo.

6. Dodaj wykrywanie konturu twarzy na urządzeniu

W tym kroku dodamy do Twojej aplikacji funkcję rozpoznawania kontur twarzy na zdjęciach.

Konfigurowanie i uruchamianie wykrywania konturów twarzy na zdjęciu na urządzeniu

Dodaj ten kod do metody runFaceContourDetection klasy MainActivity:

MainActivity.java

private void runFaceContourDetection() {
   InputImage image = InputImage.fromBitmap(mSelectedImage, 0);
   FaceDetectorOptions options =
           new FaceDetectorOptions.Builder()
                   .setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_FAST)
                   .setContourMode(FaceDetectorOptions.CONTOUR_MODE_ALL)
                   .build();

   mFaceButton.setEnabled(false);
   FaceDetector detector = FaceDetection.getClient(options);
   detector.process(image)
           .addOnSuccessListener(
                   new OnSuccessListener<List<Face>>() {
                       @Override
                       public void onSuccess(List<Face> faces) {
                           mFaceButton.setEnabled(true);
                           processFaceContourDetectionResult(faces);
                       }
                   })
           .addOnFailureListener(
                   new OnFailureListener() {
                       @Override
                       public void onFailure(@NonNull Exception e) {
                           // Task failed with an exception
                           mFaceButton.setEnabled(true);
                           e.printStackTrace();
                       }
                   });

}

Powyższy kod konfiguruje wykrywacz kontur twarzy i wywołuje funkcję processFaceContourDetectionResult z odpowiedzią.

Przetwarzanie odpowiedzi na wykrywanie konturu twarzy

Dodaj ten kod do polecenia processFaceContourDetectionResult w klasie MainActivity, aby przeanalizować wyniki i wyświetlić je w aplikacji.

MainActivity.java

private void processFaceContourDetectionResult(List<Face> faces) {
   // Task completed successfully
   if (faces.size() == 0) {
       showToast("No face found");
       return;
   }
   mGraphicOverlay.clear();
   for (int i = 0; i < faces.size(); ++i) {
       Face face = faces.get(i);
       FaceContourGraphic faceGraphic = new FaceContourGraphic(mGraphicOverlay);
       mGraphicOverlay.add(faceGraphic);
       faceGraphic.updateFace(face);
   }
}

Uruchamianie aplikacji w emulatorze

Teraz na pasku narzędzi Android Studio kliknij Uruchom ( execute.png). Po załadowaniu aplikacji upewnij się, że w polu menu wybrana jest opcja Test Image 2 (Face) , a potem kliknij przycisk FIND FACE CONTOUR.

Aplikacja powinna teraz wyglądać jak na obrazie poniżej. Wyświetlane są na nim wyniki wykrywania kontur twarzy oraz kontury twarzy jako punkty nałożone na oryginalny obraz.

f9ff2fcbf63f0f3b.png

Gratulacje! Właśnie dodałeś/dodałaś do aplikacji wykrywanie konturu twarzy na urządzeniu za pomocą ML Kit. Wykrywanie kontur twarzy na urządzeniu jest przydatne w wielu przypadkach, ponieważ działa nawet wtedy, gdy aplikacja nie ma połączenia z internetem. Jest też wystarczająco szybkie, aby wykorzystywać je w przypadku zdjęć i ramek wideo na żywo.

7. Gratulacje!

Udało Ci się użyć pakietu ML Kit, aby łatwo dodać zaawansowane funkcje systemów uczących się do Twojej aplikacji.

Omówione zagadnienia

  • Jak dodać ML Kit do aplikacji na Androida
  • Jak używać rozpoznawania tekstu na urządzeniu w ML Kit do znajdowania tekstu na obrazach
  • Jak używać na urządzeniu funkcji konturowania twarzy w ML Kit do rozpoznawania cech twarzy na zdjęciach

Następne kroki

  • Użyj ML Kit w swojej aplikacji na Androida.

Więcej informacji