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 trzeba mieć dogłębnej wiedzy o sieciach neuronowych ani optymalizacji modeli.

Jeśli w trakcie wykonywania tych ćwiczeń natrafisz na błędy (błędy w kodzie, błędy gramatyczne, niejasne sformułowania itp.), zgłoś je, korzystając z linku 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 działających w czasie rzeczywistym możliwości modeli na urządzeniu Mobile Vision czy elastyczności niestandardowych modeli TensorFlow Lite, ML Kit Ci w tym pomoże.

Dzięki nim dowiesz się, jak utworzyć własną aplikację na Androida, która będzie automatycznie wykrywać tekst i twarze na zdjęciach.

Co utworzysz

W ramach tego ćwiczenia w Codelabs dowiesz się, jak utworzyć aplikację na Androida przy użyciu ML Kit. Twoja aplikacja będzie:

  • Wykrywanie tekstu na obrazach przy użyciu 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 uczenia maszynowego, takie jak rozpoznawanie tekstu czy wykrywanie twarzy

Czego potrzebujesz

  • najnowszą wersję Android Studio (3.0 lub nowszą),
  • Emulator Android Studio lub fizyczne urządzenie z Androidem
  • Przykładowy kod
  • Podstawowa wiedza o programowaniu na Androida w Javie
  • Podstawowa znajomość modeli systemów uczących się

To ćwiczenia w programowaniu koncentrują się na ML Kit. Nieistotne koncepcje i bloki kodu zostały zamaskowane. Można je po prostu skopiować i wkleić.

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-master) ze wszystkimi potrzebnymi zasobami. W tym ćwiczeniu w Codelabs będziesz potrzebować tylko zasobów z podkatalogu vision.

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

  • android_studio_folder.pngstarter – kod początkowy, który opracujesz w ramach tego ćwiczenia z programowania.
  • android_studio_folder.pngfinal – kompletny kod gotowej przykładowej aplikacji.

3. Sprawdzanie zależności ML Kit

Sprawdzanie zależności ML Kit

Te wiersze powinny już zostać dodane na końcu pliku build.gradle w katalogu app projektu (sprawdź, czy chcesz potwierdzić):

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. Uruchom aplikację startową

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 ( Wykonaj.png) na pasku narzędzi Android Studio.

Aplikacja powinna uruchomić się w emulatorze. Teraz powinien być widoczny układ podstawowy z polem, w którym możesz wybrać 3 obrazy. W następnej sekcji dodasz do swojej aplikacji funkcję rozpoznawania tekstu, aby rozpoznawać tekst na obrazach.

5. Dodaj rozpoznawanie 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 ten kod do metody runTextRecognition klasy MainActivity:

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 w odpowiedzi funkcję processTextRecognitionResult.

Przetwarzanie odpowiedzi z rozpoznawaniem tekstu

Dodaj ten kod do polecenia 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 ( Wykonaj.png) na pasku narzędzi Android Studio. Po załadowaniu aplikacji upewnij się, że w menu wybrana jest opcja Test Image 1(Text), i 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

Gratulujemy. Udało Ci się dodać do aplikacji rozpoznawanie tekstu na urządzeniu za pomocą ML Kit. Rozpoznawanie tekstu na urządzeniu świetnie sprawdza się w wielu przypadkach, ponieważ działa nawet wtedy, gdy aplikacja nie ma połączenia z internetem i jest wystarczająco szybkie, aby obsługiwać zarówno zdjęcia, jak i klatki wideo na żywo.

6. Dodaj wykrywanie konturu twarzy na urządzeniu

W tym kroku dodamy do aplikacji funkcję rozpoznawania konturów 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 w odpowiedzi wywołuje funkcję processFaceContourDetectionResult.

Przetwarzanie odpowiedzi wykrywania konturów 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 kliknij Uruchom ( Wykonaj.png) na pasku narzędzi Android Studio. Po załadowaniu aplikacji upewnij się, że w menu wybrana jest opcja Test Image 2 (Face), i kliknij przycisk FIND FACE CONTOUR.

Aplikacja powinna teraz wyglądać tak, jak na ilustracji poniżej. Pokazuje wyniki wykrywania konturów twarzy i pokazuje kontury twarzy jako punkty nałożone na oryginalne zdjęcie.

f9ff2fcbf63f0f3b.png

Gratulacje! Właśnie udało Ci się dodać wykrywanie kontur twarzy na urządzeniu za pomocą ML Kit. Funkcja wykrywania konturu twarzy na urządzeniu sprawdza się w wielu przypadkach, ponieważ działa nawet wtedy, gdy aplikacja nie ma połączenia z internetem i działa na tyle szybko, że świetnie sprawdza się zarówno na zdjęciach, jak i na nagraniach 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ć funkcji konturów twarzy na urządzeniu w ML Kit do rozpoznawania cech twarzy na obrazach

Następne kroki

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

Więcej informacji