Google Play Hizmetleri çalışma zamanında TensorFlow Lite, TensorFlow Lite kitaplıklarını statik olarak uygulamanıza yüklemeden makine öğrenimi (ML) modellerini çalıştırmanızı sağlar. Bu rehberde, Google Play hizmetleri için C API'lerinin nasıl kullanılacağı hakkında talimatlar yer almaktadır.
Google Play hizmetleri C API'sinde TensorFlow Lite ile çalışmaya başlamadan önce, CMake derleme aracının yüklü olduğundan emin olun.
Derleme yapılandırmanızı güncelleme
TensorFlow Lite için Play hizmetleri API'sine erişmek üzere uygulama proje kodunuza aşağıdaki bağımlılıkları ekleyin:
implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"
Ardından, modülünüzün build.gradle dosyasındaki Android bloğunu güncelleyerek CMake komut dosyanızdan C API'ye erişmek için Prefab özelliğini etkinleştirin:
buildFeatures {
prefab = true
}
Son olarak, AAR'den içe aktarılan tensorflowlite_jni_gms_client
paketini CMake komut dosyanıza bir bağımlılık olarak eklemeniz gerekir:
find_package(tensorflowlite_jni_gms_client REQUIRED CONFIG)
target_link_libraries(tflite-jni # your JNI lib target
tensorflowlite_jni_gms_client::tensorflowlite_jni_gms_client
android # other deps for your target
log)
# Also add -DTFLITE_IN_GMSCORE -DTFLITE_WITH_STABLE_ABI
# to the C/C++ compiler flags.
add_compile_definitions(TFLITE_IN_GMSCORE)
add_compile_definitions(TFLITE_WITH_STABLE_ABI)
TensorFlow Lite çalışma zamanını başlatma
TensorFlow Lite Native API'yi çağırmadan önce Java/Kotlin kodunuzda TfLiteNative
çalışma zamanını başlatmalısınız.
Java
Task tfLiteInitializeTask = TfLiteNative.initialize(context);
Kotlin
val tfLiteInitializeTask: Task= TfLiteNative.initialize(context)
TfLiteNative.initialize
, Google Play Hizmetleri Görev API'sini kullanarak TFLite çalışma zamanını Google Play hizmetlerinden uygulamanızın çalışma zamanı işlemine eşzamansız olarak yükler. TensorFlow Lite API'lerine erişen kodu yürütmeden önce TfLite.initialize()
görevinin tamamlandığından emin olmak için addOnSuccessListener()
komutunu kullanın. Görev başarıyla tamamlandıktan sonra mevcut tüm TFLite Yerel API'lerini çağırabilirsiniz.
Yerel kod uygulaması
Google Play hizmetlerinde TensorFlow Lite'ı yerel kodunuzla kullanmak için aşağıdakilerden birini yapabilirsiniz:
- Java kodunuzdan yerel işlevleri çağırmak için yeni JNI işlevleri bildirme
- Mevcut yerel C kodunuzdan TensorFlow Lite Native API'yi çağırın.
JNI işlevleri:
Java/Kotlin'de tanımlanan TensorFlow Lite çalışma zamanını yerel kodunuz tarafından erişilebilir hale getirmek için aşağıdaki gibi yeni bir JNI işlevi tanımlayabilirsiniz:
Java
package com.google.samples.gms.tflite.c; public class TfLiteJni { static { System.loadLibrary("tflite-jni"); } public TfLiteJni() { /**/ }; public native void loadModel(AssetManager assetManager, String assetName); public native float[] runInference(float[] input); }
Kotlin
package com.google.samples.gms.tflite.c class TfLiteJni() { companion object { init { System.loadLibrary("tflite-jni") } } external fun loadModel(assetManager: AssetManager, assetName: String) external fun runInference(input: FloatArray): FloatArray }
Şu loadModel
ve runInference
yerel işlevleri eşleştiriliyor:
#ifdef __cplusplus
extern "C" {
#endif
void Java_com_google_samples_gms_tflite_c_loadModel(
JNIEnv *env, jobject tflite_jni, jobject asset_manager, jstring asset_name){
//...
}
jfloatArray Java_com_google_samples_gms_tflite_c_TfLiteJni_runInference(
JNIEnv* env, jobject tfliteJni, jfloatArray input) {
//...
}
#ifdef __cplusplus
} // extern "C".
#endif
Ardından, C işlevlerinizi Java/Kotlin kodunuzdan çağırabilirsiniz:
Java
tfLiteHandleTask.onSuccessTask(unused -> { TfLiteJni jni = new TfLiteJni(); jni.loadModel(getAssets(), "add.bin"); //... });
Kotlin
tfLiteHandleTask.onSuccessTask { val jni = TfLiteJni() jni.loadModel(assets, "add.bin") // ... }
C kodunda TensorFlow Lite
TfLite with Google Play services API'yi eklemek için uygun API başlık dosyasını ekleyin:
#include "tensorflow/lite/c/c_api.h"
Daha sonra normal TensorFlow Lite C API'sini kullanabilirsiniz:
auto model = TfLiteModelCreate(model_asset, model_asset_length);
// ...
auto options = TfLiteInterpreterOptionsCreate();
// ...
auto interpreter = TfLiteInterpreterCreate(model, options);
Google Play hizmetleri Yerel API başlıklarına sahip TensorFlow Lite, normal TensorFlow Lite C API ile aynı API'yi sağlar. Ancak desteği sonlandırılmış veya deneysel olan özellikler hariçtir. Şimdilik c_api.h
, c_api_types.h
ve common.h
başlıklarındaki işlevler ve türler kullanılabilir. c_api_experimental.h
başlığındaki işlevlerin desteklenmediğini lütfen unutmayın.
tflite.h
ekleyerek Google Play Hizmetleri ile TensorFlow Lite'a özgü işlevleri kullanabilirsiniz.