Do platformy LiteRT w Usługach Google Play można też uzyskać dostęp za pomocą interfejsów Java API w z natywnym interfejsem API. W szczególności dotyczy to LiteRT w Google Play są dostępne za pomocą aplikacji LiteRT Interpreter API.
Korzystanie z interfejsów API tłumaczenia rozmowy
Interfejs LiteRT Interpreter API udostępniany przez środowisko wykonawcze TensorFlow udostępnia ogólny interfejs do tworzenia i uruchamiania modeli ML. Użyj te kroki, aby uruchomić wnioskowania za pomocą interfejsu Interpreter API za pomocą TensorFlow Lite w środowisku wykonawczym Usług Google Play.
1. Dodaj zależności projektu
Aby uzyskać dostęp do Google Play, dodaj te zależności do kodu projektu aplikacji API usług dla LiteRT:
dependencies {
...
// LiteRT dependencies for Google Play services
implementation 'com.google.android.gms:play-services-tflite-java:16.0.1'
// Optional: include LiteRT Support Library
implementation 'com.google.android.gms:play-services-tflite-support:16.0.1'
...
}
2. Dodaj inicjowanie LiteRT
Zainicjuj komponent LiteRT interfejsu Google Play Services API przed użyciem interfejsów API LiteRT:
Kotlin
val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }
Java
Task<Void> initializeTask = TfLite.initialize(context);
3. Tworzenie tłumaczenia rozmowy i ustawianie opcji środowiska wykonawczego
Utwórz interpreter za pomocą dodatku InterpreterApi.create()
i skonfiguruj go do używania
Środowisko wykonawcze Usług Google Play, wywołując InterpreterApi.Options.setRuntime()
,
jak w tym 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) }
Java
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())); });
Użyj tej implementacji, ponieważ pozwala ona uniknąć blokowania Androida
wątku interfejsu. Jeśli chcesz lepiej zarządzać wykonywaniem wątków,
może dodać wywołanie Tasks.await()
do tworzenia tłumaczenia rozmowy:
Kotlin
import androidx.lifecycle.lifecycleScope ... lifecycleScope.launchWhenStarted { // uses coroutine initializeTask.await() }
Java
@BackgroundThread InterpreterApi initializeInterpreter() { Tasks.await(initializeTask); return InterpreterApi.create(...); }
4. Uruchom wnioskowania
Za pomocą utworzonego obiektu interpreter
wywołaj metodę run()
, aby wygenerować
wnioskowania.
Kotlin
interpreter.run(inputBuffer, outputBuffer)
Java
interpreter.run(inputBuffer, outputBuffer);
Akceleracja sprzętowa
LiteRT pozwala przyspieszyć wydajność modelu przy użyciu specjalistyczne procesory sprzętowe, takie jak procesory graficzne (GPU). Ty mogą wykorzystać te specjalistyczne procesory za pomocą sterowników sprzętowych nazywanych delegatów.
Przekazywanie dostępu do GPU jest realizowane przez Usługi Google Play i jest dynamicznie ładowany, tak jak wersje Usług Google Play Interpreter API.
Sprawdzanie zgodności urządzeń
Nie wszystkie urządzenia obsługują akcelerację sprzętową GPU z użyciem TFLite. Aby
i eliminować ewentualne błędy, skorzystaj ze
Metoda TfLiteGpu.isGpuDelegateAvailable
, która pozwala sprawdzić, czy urządzenie
z delegatem GPU.
Użyj tej metody, aby sprawdzić, czy urządzenie jest zgodne z GPU, i używać procesora w sytuacji, gdy GPU nie jest obsługiwane.
useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)
Gdy masz już zmienną taką jak useGpuTask
, możesz jej używać do określenia, czy
urządzenia używają delegata GPU.
Kotlin
val interpreterTask = useGpuTask.continueWith { task -> val interpreterOptions = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) if (task.result) { interpreterOptions.addDelegateFactory(GpuDelegateFactory()) } InterpreterApi.create(FileUtil.loadMappedFile(context, MODEL_PATH), interpreterOptions) }
Java
Task<InterpreterApi.Options> interpreterOptionsTask = useGpuTask.continueWith({ task -> InterpreterApi.Options options = new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY); if (task.getResult()) { options.addDelegateFactory(new GpuDelegateFactory()); } return options; });
GPU z interfejsami API tłumaczenia rozmowy
Aby użyć delegata GPU w interfejsach API tłumaczenia rozmowy:
Zaktualizuj zależności projektu, aby używać przedstawicieli GPU z Usług Google Play:
implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
Włącz opcję przekazywania dostępu do GPU podczas inicjowania pliku TFlite:
Kotlin
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build())
Java
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build());
Włącz przekazywanie dostępu do GPU w opcjach tłumaczenia rozmowy: ustaw fabrykę przekazywania na GpuDelegateFactory przez wywołanie
addDelegateFactory() within
InterpreterApi.Options():Kotlin
val interpreterOption = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(GpuDelegateFactory())
Java
Options interpreterOption = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(new GpuDelegateFactory());
Migracja z samodzielnej platformy LiteRT
Jeśli planujesz migrację swojej aplikacji z samodzielnej platformy LiteRT do Play Services API; zapoznaj się z tymi dodatkowymi wskazówkami dotyczącymi aktualizacji kod projektu aplikacji:
- Zapoznaj się z sekcją Ograniczenia na tej stronie, aby upewnić się, dla danego przypadku użycia.
- Przed aktualizacją kodu sprawdź skuteczność i dokładność modeli, zwłaszcza jeśli korzystasz z wcześniejszych wersji LiteRT. niż w wersji 2.1, więc masz punkt odniesienia do porównania implementacji.
- Jeśli cały kod został przeniesiony, aby korzystać z interfejsu Play Services API
LiteRT, usuń istniejące środowisko wykonawcze LiteRT
zależności biblioteki (wpisy z
org.tensorflow:tensorflow-lite:*
) z pliku build.gradle aby zmniejszyć rozmiar aplikacji. - Zidentyfikuj wszystkie wystąpienia w kodzie tworzenia obiektu
new Interpreter
, i zmodyfikować każdy z nich tak, aby używał wywołania InterpreterApi.create(). Polecenie nowego TfLite.initialize jest asynchroniczne, co oznacza, że w większości przypadków wymiana bezdotykowa: musisz zarejestrować detektor, gdy połączenie . Skorzystaj z fragmentu kodu w kroku 3. - Dodaj
import org.tensorflow.lite.InterpreterApi;
iimport org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime;
do dowolnego źródła za pomocą tagóworg.tensorflow.lite.Interpreter
luborg.tensorflow.lite.InterpreterApi
zajęć. - Jeśli któreś z wywołań
InterpreterApi.create()
ma tylko pojedynczy argument, dołącznew InterpreterApi.Options()
do listy argumentów. - Dołącz
.setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
do ostatniego argumentu argumentu wszystkich połączeń z numeremInterpreterApi.create()
. - Zastąp wszystkie pozostałe wystąpienia klasy
org.tensorflow.lite.Interpreter
dziękiorg.tensorflow.lite.InterpreterApi
.
Jeśli chcesz używać samodzielnej platformy LiteRT i interfejsu Play Services API obok siebie, musisz używać LiteRT 2.9 (lub nowszej wersji). LiteRT 2.8 i wcześniejszych wersji nie są zgodne z wersją interfejsu Play Services API.