TensorFlow Lite w usługach Google Play (BETA)

TensorFlow Lite jest dostępny w interfejsie API usług Google Play jako publiczna wersja beta na wszystkich urządzeniach z systemem Android z obecną wersją usług Play od 17 lutego 2022 r. Ten interfejs API umożliwia uruchamianie modeli uczenia maszynowego bez statycznego łączenia bibliotek TensorFlow Lite w Twojej aplikacji, pozwalając na:

  • Zmniejsz rozmiar aplikacji
  • Uzyskaj lepszą wydajność dzięki najnowszej, stabilnej wersji TensorFlow Lite

Ta strona zawiera krótkie omówienie korzystania z nowego TensorFlow Lite w interfejsach API usług Google Play w aplikacji na Androida.

Więcej informacji o usługach Google Play można znaleźć w witrynie usług Google Play .

Dodaj TensorFlow Lite do swojej aplikacji

Możesz użyć TensorFlow Lite w interfejsie API usług Google Play, wprowadzając kilka zmian w zależnościach modułu aplikacji, inicjując nowy interfejs API i używając określonej klasy jako obiektu interpretera. Poniższe instrukcje zawierają więcej informacji na temat modyfikowania kodu aplikacji.

1. Dodaj zależności projektu

Dodaj następujące zależności do kodu projektu aplikacji, aby uzyskać dostęp do interfejsu API usług Play dla TensorFlow Lite:

dependencies {
...
    // Tensorflow Lite dependencies for Google Play services
    implementation 'com.google.android.gms:play-services-tflite-java:16.0.0-beta02'
    // Optional: include Tensorflow Lite Support Library
    implementation 'com.google.android.gms:play-services-tflite-support:16.0.0-beta02'
...
}

2. Dodaj inicjalizację TensorFlow Lite

Zainicjuj komponent TensorFlow Lite interfejsu API usług Google Play przed użyciem interfejsów API TensorFlow Lite:

Kotlin

val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }

Jawa

Task<Void> initializeTask = TfLite.initialize(context);

3. Utwórz interpreter i ustaw opcję czasu działania

Utwórz interpreter za pomocą InterpreterApi.create() i skonfiguruj go do korzystania ze środowiska uruchomieniowego usług Google Play, wywołując InterpreterApi.Options.setRuntime() , jak pokazano w poniższym przykładowym kodzie:

Kotlin

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private lateinit var interpreter: InterpreterApi
...
initializeTask.addOnSuccessListener {
  val interpreterOption =
    InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  interpreter = InterpreterApi.create(
    modelBuffer,
    interpreterOption
  )}
  .addOnFailureListener { e ->
    Log.e("Interpreter", "Cannot initialize interpreter", e)
  }

Jawa

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private InterpreterApi interpreter;
...
initializeTask.addOnSuccessListener(a -> {
    interpreter = InterpreterApi.create(modelBuffer,
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY));
  })
  .addOnFailureListener(e -> {
    Log.e("Interpreter", String.format("Cannot initialize interpreter: %s",
          e.getMessage()));
  });

Powinieneś użyć powyższej implementacji, ponieważ pozwala uniknąć blokowania wątku interfejsu użytkownika Androida. Jeśli potrzebujesz dokładniej zarządzać wykonywaniem wątków, możesz dodać Tasks.await() do tworzenia interpretera:

Kotlin

import androidx.lifecycle.lifecycleScope
...
lifecycleScope.launchWhenStarted { // uses coroutine
  initializeTask.await()
}

Jawa

@BackgroundThread
InterpreterApi initializeInterpreter() {
    Tasks.await(initializeTask);
    return InterpreterApi.create(...);
}

4. Uruchom wnioskowanie

Korzystając z utworzonego obiektu interpreter , wywołaj metodę run() , aby wygenerować wnioskowanie.

Kotlin

interpreter.run(inputBuffer, outputBuffer)

Jawa

interpreter.run(inputBuffer, outputBuffer);

TensorFlow Lite w usługach Google Play

TensorFlow Lite w interfejsie API usług Google Play umożliwia dostęp do rzeczywistego interfejsu API Java TensorFlow Lite w Twojej aplikacji po zainicjowaniu jej przy użyciu nowej metody w usługach Play. Takie podejście pozwala ograniczyć zmiany kodu dla istniejących aplikacji do minimum i upraszcza nowe implementacje. Więcej informacji na temat interfejsu API dla tej funkcji można znaleźć w dokumentacji TensorFlow Lite API

Migracja z samodzielnego TensorFlow Lite

Jeśli planujesz migrację aplikacji z samodzielnego TensorFlow Lite do interfejsu API usług Play, zapoznaj się z następującymi dodatkowymi wskazówkami dotyczącymi aktualizowania kodu projektu aplikacji:

  1. Zapoznaj się z sekcją Ograniczenia na tej stronie, aby upewnić się, że Twój przypadek użycia jest obsługiwany.
  2. Przed aktualizacją kodu przeprowadź kontrolę wydajności i dokładności modeli, zwłaszcza jeśli używasz wersji TensorFlow Lite wcześniejszych niż wersja 2.1, aby uzyskać punkt odniesienia do porównania z nową implementacją.
  3. Jeśli przeprowadziłeś migrację całego kodu, aby korzystać z interfejsu API usług Play dla TensorFlow Lite, powinieneś usunąć istniejące zależności biblioteki wykonawczej TensorFlow Lite (wpisy z org.tensorflow: tensorflow-lite :* ) z pliku build.gradle, aby może zmniejszyć rozmiar aplikacji.
  4. Zidentyfikuj wszystkie wystąpienia new Interpreter w kodzie i zmodyfikuj go tak, aby używał wywołania InterpreterApi.create(). Ten nowy interfejs API jest asynchroniczny, co oznacza, że ​​w większości przypadków nie jest zamiennikiem typu drop-in i musisz zarejestrować odbiornik po zakończeniu wywołania. Zapoznaj się z fragmentem kodu w kodzie kroku 3 .
  5. Dodaj import org.tensorflow.lite.InterpreterApi; i import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime; do dowolnych plików źródłowych przy użyciu klas org.tensorflow.lite.Interpreter lub org.tensorflow.lite.InterpreterApi .
  6. Jeśli którekolwiek z wynikowych wywołań InterpreterApi.create() ma tylko jeden argument, dołącz new InterpreterApi.Options() do listy argumentów.
  7. Dołącz .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) do ostatniego argumentu wszystkich wywołań funkcji InterpreterApi.create() .
  8. Zamień wszystkie inne wystąpienia klasy org.tensorflow.lite.Interpreter na org.tensorflow.lite.InterpreterApi .

Jeśli chcesz używać samodzielnego TensorFlow Lite i interfejsu API usług Play obok siebie, musisz użyć TensorFlow Lite 2.9 (lub nowszego). TensorFlow Lite 2.8 i wcześniejsze wersje nie są kompatybilne z wersją API usług Play.

Przykładowa aplikacja

Możesz przejrzeć i przetestować przykładową implementację TensorFlow Lite w usługach Google Play w przykładowej aplikacji .

Testowanie

Po wdrożeniu TensorFlow Lite w usługach Google Play, przetestuj swoją aplikację i skorzystaj z funkcji modelu uczenia maszynowego swojej aplikacji. Jeśli napotkasz błędy lub problemy, których nie możesz rozwiązać, zgłoś je, korzystając z kanałów opisanych w sekcji Wsparcie i opinie poniżej.

LoadingException: Brak dopuszczalnego modułu

Podczas testowania aplikacji w środowisku programistycznym w okresie uruchamiania wersji beta, możesz otrzymać wyjątek, gdy Twoja aplikacja próbuje zainicjować klasę TensorFlow Lite ( TfLite.intialize(context) ):

com.google.android.gms.dynamite.DynamiteModule$LoadingException:
  No acceptable module com.google.android.gms.tflite_dynamite found.
  Local version is 0 and remote version is 0.

Ten błąd oznacza, że ​​TensorFlow Lite w interfejsie API usług Google Play nie jest jeszcze dostępny na Twoim urządzeniu testowym. Możesz rozwiązać ten wyjątek, dołączając do tej grupy Google tflite-play-services-beta-access za pomocą konta użytkownika, którego używasz do testowania na swoim urządzeniu. Po dodaniu do grupy dostępu do wersji beta ten wyjątek powinien zostać rozwiązany.

Odczekaj co najmniej jeden dzień roboczy po dołączeniu do tej grupy, aby uzyskać dostęp i usunąć błąd. Jeśli ten błąd nadal występuje, zgłoś go, korzystając z kanałów opisanych w sekcji Wsparcie i opinie poniżej.

Ograniczenia

TensorFlow Lite w usługach Google Play jest obecnie w publicznej wersji beta i ma następujące ograniczenia:

  • Tylko delegat NNAPI jest obecnie obsługiwany przez usługi Google Play. Inne delegatury TensorFlow Lite , w tym GPU i Flex, nie są obecnie obsługiwane.
  • Dostęp do TensorFlow Lite za pośrednictwem natywnych interfejsów API nie jest obsługiwany. Tylko interfejsy API Java TensorFlow Lite są dostępne w usługach Google Play.
  • Eksperymentalne lub przestarzałe interfejsy API TensorFlow Lite, w tym niestandardowe operacje, nie są obsługiwane.

Wsparcie i opinie

Możesz przekazać opinię i uzyskać wsparcie dla tej funkcji wersji beta za pośrednictwem narzędzia TensorFlow Issue Tracker. Zgłaszaj problemy i prośby o pomoc, korzystając z szablonu problemu dla TensorFlow Lite w usługach Google Play.

Regulamin i Polityka Prywatności

Korzystanie z TensorFlow Lite w usługach Google Play podlega Warunkom korzystania z usług interfejsów API Google . Należy pamiętać, że TensorFlow Lite w usługach Google Play jest w wersji beta i w związku z tym jego funkcjonalność oraz powiązane interfejsy API mogą ulec zmianie bez wcześniejszego powiadomienia.

Gdy używasz TensorFlow Lite w interfejsach API usług Google Play, przetwarzanie danych wejściowych, takich jak obrazy, wideo, tekst, odbywa się w całości na urządzeniu, a TensorFlow Lite w usługach Google Play nie wysyła tych danych na serwery Google. Dzięki temu możesz wykorzystać nasze API do przetwarzania danych, które nie powinny opuszczać urządzenia.

Interfejsy API usług TensorFlow Lite w usługach Google Play mogą od czasu do czasu kontaktować się z serwerami Google, aby otrzymywać takie informacje, jak poprawki błędów, zaktualizowane modele i informacje o zgodności akceleratorów sprzętowych. TensorFlow Lite w interfejsach API usług Google Play wysyła również metryki dotyczące wydajności i wykorzystania interfejsów API w Twojej aplikacji do Google. Google wykorzystuje te dane do pomiaru wydajności, debugowania, utrzymywania i ulepszania interfejsów API oraz wykrywania nadużyć lub nadużyć, zgodnie z dalszym opisem w naszej Polityce prywatności .

Ponosisz odpowiedzialność za informowanie użytkowników swojej aplikacji o przetwarzaniu przez Google TensorFlow Lite w danych metrycznych usług Google Play zgodnie z obowiązującym prawem.

Gromadzone przez nas dane obejmują:

  • Informacje o urządzeniu (takie jak producent, model, wersja i kompilacja systemu operacyjnego) oraz dostępne akceleratory sprzętowe ML (GPU i DSP). Używany do diagnostyki i analizy użytkowania.
  • Identyfikator urządzenia używany do diagnostyki i analizy użytkowania.
  • Informacje o aplikacji (nazwa pakietu, wersja aplikacji). Używany do diagnostyki i analizy użytkowania.
  • Konfiguracja interfejsu API (na przykład używanych delegatów). Używany do diagnostyki i analizy użytkowania.
  • Typ zdarzenia (np. tworzenie interpretera, wnioskowanie). Używany do diagnostyki i analizy użytkowania.
  • Kody błędów. Używany do diagnostyki.
  • Wskaźniki wydajności. Używany do diagnostyki.

Następne kroki

Aby uzyskać więcej informacji na temat wdrażania uczenia maszynowego w aplikacji mobilnej za pomocą TensorFlow Lite, zapoznaj się z Przewodnikiem programisty TensorFlow Lite . W TensorFlow Hub można znaleźć dodatkowe modele TensorFlow Lite do klasyfikacji obrazów, wykrywania obiektów i innych aplikacji.