Rozpoznawanie tekstu i twarzy za pomocą ML Kit: Android

1. Wprowadzenie

ML Kit to mobilny pakiet SDK, który udostępnia w prosty sposób zaawansowane funkcje uczenia maszynowego Google w aplikacjach na Androida i iOS. 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.

Jeśli podczas wykonywania tego laboratorium napotkasz jakiekolwiek 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 laboratorium.

Jak to działa?

ML Kit ułatwia stosowanie technik uczenia maszynowego w aplikacjach, ponieważ łączy technologie uczenia maszynowego Google, takie jak Mobile VisionTensorFlow Lite, w jednym pakiecie SDK. Niezależnie od tego, czy potrzebujesz funkcji w czasie rzeczywistym, jakie oferują modele Mobile Vision na urządzeniu, czy elastyczności niestandardowych modeli TensorFlow Lite, ML Kit Ci pomoże.

W tych ćwiczeniach z programowania dowiesz się, jak utworzyć własną aplikację na Androida, która może automatycznie wykrywać tekst i cechy twarzy na obrazie.

Co utworzysz

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

  • Wykrywanie tekstu na obrazach za pomocą interfejsu ML Kit Text Recognition API
  • Używanie interfejsu Face Contour API z ML Kit do identyfikowania elementó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 i wykrywanie cech twarzy

Czego potrzebujesz

  • Najnowsza wersja Androida Studio (3.0 lub nowsza)
  • Emulator Androida Studio lub fizyczne urządzenie z Androidem
  • Przykładowy kod
  • Podstawowa wiedza na temat tworzenia aplikacji na Androida w Javie
  • Podstawowa wiedza o modelach uczenia maszynowego

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

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-master) ze wszystkimi potrzebnymi zasobami. W tym ćwiczeniu potrzebne będą tylko zasoby z podkatalogu vision.

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

  • android_studio_folder.pngstarter – kod początkowy, na którym będziesz pracować w tym ćwiczeniu z programowania.
  • android_studio_folder.pngfinal – ukończony kod gotowej aplikacji przykładowej.

3. Sprawdzanie zależności ML Kit

Sprawdzanie zależności ML Kit

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

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'
}

Są to konkretne zależności ML Kit, które musisz zaimplementować, aby korzystać z funkcji opisanych w tym laboratorium.

4. Uruchamianie aplikacji startowej

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

Aplikacja powinna uruchomić się na emulatorze. Powinien być teraz widoczny podstawowy układ z polem menu, w którym możesz wybrać jeden z 3 obrazów. W następnej sekcji dodasz do aplikacji funkcję rozpoznawania tekstu, aby identyfikować tekst na obrazach.

5. Dodawanie rozpoznawania tekstu na urządzeniu

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

Konfigurowanie i uruchamianie rozpoznawania tekstu na obrazie na urządzeniu

Dodaj do metody runTextRecognition klasy MainActivity te wiersze:

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 na rozpoznawanie tekstu

Dodaj ten kod do elementu 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 na pasku narzędzi Android Studio kliknij Uruchom ( execute.png). Po wczytaniu aplikacji sprawdź, czy w menu wyboru jest zaznaczona opcja Test Image 1(Text), a następnie kliknij przycisk FIND TEXT.

Aplikacja powinna teraz wyglądać jak na obrazie poniżej, wyświetlając wyniki rozpoznawania tekstu i ramki ograniczające nałożone na oryginalny obraz.

10b12d0e8822eaf5.png

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

Gratulacje! Właśnie udało Ci się dodać do aplikacji rozpoznawanie tekstu na urządzeniu za pomocą ML Kit. Rozpoznawanie tekstu na urządzeniu sprawdza się w wielu zastosowaniach, ponieważ działa nawet wtedy, gdy aplikacja nie ma połączenia z internetem, i jest wystarczająco szybkie, aby można było go używać zarówno w przypadku zdjęć, jak i klatek wideo na żywo.

6. Dodawanie wykrywania konturów twarzy na urządzeniu

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

Konfigurowanie i uruchamianie na obrazie wykrywania konturów twarzy na urządzeniu

Dodaj do metody runFaceContourDetection klasy MainActivity te wiersze:

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 detektor konturu twarzy i wywołuje funkcję processFaceContourDetectionResult z odpowiedzią.

Przetwarzanie odpowiedzi dotyczącej wykrywania konturów twarzy

Dodaj ten kod do elementu 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 wczytaniu aplikacji sprawdź, czy w menu wyboru jest zaznaczona opcja Test Image 2 (Face), i kliknij przycisk FIND FACE CONTOUR.

Aplikacja powinna teraz wyglądać jak na obrazie poniżej. Powinny być widoczne wyniki wykrywania konturów twarzy oraz kontury twarzy w postaci punktów nałożonych na oryginalny obraz.

f9ff2fcbf63f0f3b.png

Gratulacje! Właśnie udało Ci się dodać do aplikacji wykrywanie konturów twarzy na urządzeniu za pomocą ML Kit. Wykrywanie konturów twarzy na urządzeniu sprawdza się w wielu zastosowaniach, ponieważ działa nawet wtedy, gdy aplikacja nie ma połączenia z internetem, i jest wystarczająco szybkie, aby można było go używać zarówno w przypadku zdjęć, jak i klatek wideo na żywo.

7. Gratulacje!

Udało Ci się użyć ML Kit, aby łatwo dodać do aplikacji zaawansowane funkcje uczenia maszynowego.

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 korzystać z konturu twarzy na urządzeniu w ML Kit do identyfikowania cech twarzy na obrazach

Następne kroki

  • Korzystaj z ML Kit w swojej aplikacji na Androida.

Więcej informacji