Rozpoznawanie kwiatów za pomocą TensorFlow Lite na Androidzie

Rozpoznawanie kwiatów za pomocą TensorFlow Lite na Androidzie

Informacje o tym ćwiczeniu (w Codelabs)

subjectOstatnia aktualizacja: kwi 7, 2025
account_circleAutorzy: Hoi Lam (revamping author), Yash Katariya (original author)

1. Wprowadzenie

657431be3173fa86.png android.png

Uwaga: w tym ćwiczeniu do testowania potrzebne jest fizyczne urządzenie.

TensorFlow to wielofunkcyjna platforma uczenia maszynowego. TensorFlow można stosować wszędzie, od trenowania ogromnych modeli na klastrach w chmurze po uruchamianie modeli lokalnie na systemie wbudowanym, takim jak telefon.

W tym ćwiczeniu z programowania dowiesz się, jak używać TensorFlow Lite do uruchamiania modelu rozpoznawania obrazów na urządzeniu z Androidem.

Zainstaluj Android Studio w wersji 4.1 lub nowszej.

Jeśli nie masz jeszcze zainstalowanego Android Studio, pobierz i zainstaluj wersję 4.1 lub nowszą podczas trenowania modelu TensorFlow Lite.

Czego się nauczysz

  • Jak wytrenować własny niestandardowy klasyfikator obrazów za pomocą narzędzia TensorFlow Lite Model Maker.
  • Jak za pomocą Android Studio zaimportować model TensorFlow Lite, aby zintegrować niestandardowy model w aplikacji na Androida za pomocą CameraX.
  • Jak korzystać z GPU na telefonie, aby przyspieszyć działanie modelu.

Co utworzysz

Prosta aplikacja do obsługi aparatu, która uruchamia program rozpoznawania obrazów TensorFlow do identyfikowania kwiatów.

f11c2821f2c8311d.png

Licencja: dostępna bezpłatnie

2. Trenowanie rozpoznawacza kwiatów za pomocą Colab

Zanim rozpoczniesz trenowanie modelu, pobierz i zainstaluj Android Studio w wersji 4.1 lub nowszej.

Otwórz notebooka Colab, w którym pokazano, jak wytrenować klasyfikator za pomocą Keras do rozpoznawania kwiatów przy użyciu uczenia transferowego TensorFlow Lite.

3. Konfigurowanie katalogu roboczego

Klonowanie repozytorium Git

Poniższe polecenie spowoduje sklonowanie repozytorium Git zawierającego pliki wymagane w tym laboratorium:

git clone https://github.com/hoitab/TFLClassify.git

Następnie otwórz katalog, do którego właśnie sklonowano repozytorium. Tutaj będziesz pracować do końca tego ćwiczenia:

cd TFLClassify

4. Konfigurowanie szablonu aplikacji na Androida

android.png

Zainstaluj Android Studio w wersji 4.1 lub nowszej.

Jeśli nie masz jeszcze zainstalowanego Android Studio, zainstaluj wersję 4.1 lub nowszą.

Otwieranie projektu w Android Studio

Aby otworzyć projekt w Android Studio, wykonaj te czynności:

  1. Otwórz Android Studio 7f2480ded53a193b.png. Po załadowaniu wybierz „Otwórz istniejący projekt” w wyskakującym okienku:

f3b8bea7e3b39376.png

  1. W selektorze plików wybierz TFLClassify/build.gradle z katalogu roboczego.
  1. Gdy po raz pierwszy otworzysz projekt, zobaczysz wyskakujące okienko „Synchronizacja Gradle”, w którym zostaniesz poproszony(-a) o użycie owijarki Gradle. Kliknij przycisk „OK”.

d68b4d7189e6c1e4.png

  1. Włącz na telefonie tryb programisty i debugowanie przez USB (jeśli nie zostało to jeszcze zrobione). Jest to jednorazowa konfiguracja. Postępuj zgodnie z tymi instrukcjami.
  2. Gdy projekt i telefon są gotowe, możesz uruchomić projekt na prawdziwym urządzeniu. Aby to zrobić, kliknij TFL_Classify.start i na pasku narzędzi naciśnij przycisk uruchamiania 86934b7b01ad7565.png:

60a77ef126c1373d.png

  1. Teraz zezwól aplikacji Tensorflow Demo na dostęp do kamery:

b63cba02bb36b7e3.png

  1. Na telefonie zobaczysz taki ekran z losowymi liczbami zamiast rzeczywistych wyników.

82c603596afa35f1.png

5. Dodawanie TensorFlow Lite do aplikacji na Androida

  1. W eksploratorze projektu po lewej stronie wybierz moduł start:

cede7f2b8b23c1a7.png

  1. Kliknij prawym przyciskiem myszy moduł start lub kliknij File, a następnie New > Other > TensorFlow Lite Model.

bf243d9fdd27e20a.png

  1. Wybierz lokalizację modelu, w której wcześniej pobrałeś/pobraliś niestandardowy model FlowerModel.tflite.

cfee18cc6674a408.png

  1. Kliknij Finish.
  2. Na końcu zobaczysz ten komunikat. Model FlowerModel.tflite został zaimportowany i pokazuje ogólne informacje o nim, w tym dane wejściowe i wyjściowe, a także przykładowy kod, który ułatwi Ci rozpoczęcie pracy.

82840065f0d59def.png

6. Opcjonalnie: sprawdzanie wszystkich list zadań

Lista TODO ułatwia przejście do dokładnej lokalizacji, w której należy zaktualizować Codelab. Możesz też użyć go w projekcie na Androida, aby przypomnieć sobie o przyszłej pracy. Możesz dodawać elementy listy zadań, używając komentarzy kodu i pisząc słowo kluczowe TODO. Aby uzyskać dostęp do listy zadań do wykonania:

  1. Najlepszym sposobem na sprawdzenie, co zamierzamy zrobić, jest przejrzenie listy zadań. Aby to zrobić, w pasku menu u góry kliknij View > Tool Windows > TODO.

5de29b413574f25c.png

  1. Domyślnie zawiera on listę wszystkich zadań do wykonania we wszystkich modułach, co może być nieco mylące. Możemy posortować tylko TODO na samym początku, klikając przycisk grupowania po lewej stronie panelu TODO i wybierając Modules

5d8fe7b102340208.png

  1. Rozwiń wszystkie elementy w modułach początkowych:

8d0f14a039995b20.png

7. Uruchamianie niestandardowego modelu za pomocą TensorFlow Lite

  1. Kliknij TODO 1 na liście TODO lub otwórz plik MainActivity.kt i znajdź TODO 1. Aby zainicjować model, dodaj ten wiersz:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
        ImageAnalysis.Analyzer {

  ...
  // TODO 1: Add class variable TensorFlow Lite Model
  private val flowerModel = FlowerModel.newInstance(ctx)

  ...
}
  1. W ramach metody analizy w CameraX Analyzer musimy przekonwertować dane wejściowe z kamery ImageProxy na Bitmap i utworzyć obiekt TensorImage na potrzeby procesu wnioskowania.
override fun analyze(imageProxy: ImageProxy) {
 
...
 
// TODO 2: Convert Image to Bitmap then to TensorImage
  val tfImage
= TensorImage.fromBitmap(toBitmap(imageProxy))
 
...
}

  1. Przetwórz obraz i wykonaj na jego wyniku te operacje:
  • Posortuj wyniki według prawdopodobieństwa w atrybucie score, zaczynając od najwyższego prawdopodobieństwa.
  • Wybierz k najlepszych wyników zgodnie z wartością stałej MAX_RESULT_DISPLAY. Możesz dowolnie zmieniać wartość tej zmiennej, aby uzyskać więcej lub mniej wyników.
override fun analyze(imageProxy: ImageProxy) {
 
...
 
// TODO 3: Process the image using the trained model, sort and pick out the top results
  val outputs
= flowerModel.process(tfImage)
     
.probabilityAsCategoryList.apply {
          sortByDescending
{ it.score } // Sort with highest confidence first
     
}.take(MAX_RESULT_DISPLAY) // take the top results

 
...
}
  1. Przekształć posortowane i przefiltrowane wyniki w obiekty danych Recognition, które są gotowe do użycia przez RecyclerView za pomocą wiązania danych:
override fun analyze(imageProxy: ImageProxy) {
 
...
 
// TODO 4: Converting the top probability items into a list of recognitions
 
for (output in outputs) {
      items
.add(Recognition(output.label, output.score))
 
}
 
...
}
  1. Zmień w komentarzu lub usuń te wiersze, które pomagają generować fałszywe wyniki:
// START - Placeholder code at the start of the codelab. Comment this block of code out.
for (i in 0..MAX_RESULT_DISPLAY-1){
    items.add(Recognition("Fake label $i", Random.nextFloat()))
}
// END - Placeholder code at the start of the codelab. Comment this block of code out.
  1. Uruchom aplikację na prawdziwym urządzeniu, wybierając TFL_Classify.start i na pasku narzędzi klikając przycisk Uruchom 86934b7b01ad7565.png:

60a77ef126c1373d.png

  1. Na telefonie zobaczysz taki ekran z losowymi liczbami zamiast rzeczywistych wyników:

f11c2821f2c8311d.png

8. Opcjonalnie: przyspieszenie wnioskowania za pomocą delegowania do GPU

TensorFlow Lite obsługuje kilka akceleratorów sprzętowych, które przyspieszają wnioskowanie na urządzeniu mobilnym. GPU to jeden z akceleratorów, z którego TensorFlow Lite może korzystać za pomocą mechanizmu delegowania. Jest on dość łatwy w użyciu.

  1. Otwórz plik build.gradle w ramach modułu start lub kliknij ZADANIE 5 na liście ZADAŃ i dodaj tę zależność:
// TODO 5: Optional GPU Delegates    
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
  1. Wróć do pliku MainActivity.kt lub kliknij ZADANIE 6 na liście ZADAŃ. Zastąp proste inicjowanie flowerModel następującym kodem: pobierz instancję z listy zgodności GPU i inicjuj GPU w zależności od tego, czy jest to jeden z wymienionych zgodnych procesorów. W przeciwnym razie uruchom 4 wątki procesora, aby uruchomić model:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
        ImageAnalysis.Analyzer {
  ...

  // TODO 1: Add class variable TensorFlow Lite Model
  // Initializing the flowerModel by lazy so that it runs in the same thread when the process
  // method is called.
  private val flowerModel: FlowerModel by lazy{

    // TODO 6. Optional GPU acceleration
    val compatList = CompatibilityList()

    val options = if(compatList.isDelegateSupportedOnThisDevice){
        Log.d(TAG, "This device is GPU Compatible ")
        Model.Options.Builder().setDevice(Model.Device.GPU).build()
    } else {
        Log.d(TAG, "This device is GPU Incompatible ")
        Model.Options.Builder().setNumThreads(4).build()
    }

  ...
}
  1. Aby użyć tej funkcji, zmień inicjalizator modelu, dodając options do wejścia metody:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
        ImageAnalysis.Analyzer {

  private val flowerModel: FlowerModel by lazy{

    ...

    // Initialize the Flower Model
    FlowerModel.newInstance(ctx, options)
  }
}

  1. Uruchom aplikację na prawdziwym urządzeniu, wybierając TFL_Classify.start i na pasku narzędzi klikając przycisk Uruchom 86934b7b01ad7565.png:

60a77ef126c1373d.png

9. Co dalej?

Oto kilka linków do artykułów, które mogą zawierać dodatkowe, przydatne informacje: