Google Play hizmetleri çalışma zamanındaki TensorFlow Lite, TensorFlow Lite kitaplıklarını uygulamanıza statik olarak paketlemeden makine öğrenimi (ML) modellerini çalıştırmanıza olanak tanır. Bu kılavuz, Google Play hizmetleri için C API'lerinin nasıl kullanılacağına ilişkin talimatlar sağlar.
Google Play hizmetleri C API'sinde TensorFlow Lite ile çalışmaya başlamadan önce CMake derleme aracının kurulu olduğundan emin olun.
Yapı yapılandırmanızı güncelleyin
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ının android bloğunu güncelleyerek CMake betiğinizden C API'sine erişmek için Prefab özelliğini etkinleştirin:
buildFeatures {
prefab = true
}
Son olarak AAR'dan içe aktarılan tensorflowlite_jni_gms_client
paketini CMake betiğinize 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şlatın
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ı sürecine eşzamansız olarak yükler. TensorFlow Lite API'lerine erişen kodu çalıştırmadan önce TfLite.initialize()
görevinin tamamlandığından emin olmak için addOnSuccessListener()
kullanın. Görev başarıyla tamamlandıktan sonra mevcut tüm TFLite Yerel API'lerini çağırabilirsiniz.
Yerel kod uygulaması
TensorFlow Lite'ı Google Play hizmetlerinde yerel kodunuzla kullanmak için aşağıdakilerden birini yapabilirsiniz:
- Java kodunuzdan yerel işlevleri çağırmak için yeni JNI işlevleri bildirin
- Mevcut yerel C kodunuzdan TensorFlow Lite Yerel API'sini çağırın.
JNI'nın işlevleri:
Java/Kotlin'de bildirilen TensorFlow Lite çalışma zamanının yerel kodunuz tarafından erişilebilir olmasını sağlamak için yeni bir JNI işlevi bildirebilirsiniz:
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 }
Aşağıdaki loadModel
ve runInference
yerel işlevleriyle eşleşme:
#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
Daha sonra C işlevlerinizi Java/Kotlin kodunuzdan arayabilirsiniz:
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'ı Google Play hizmetleri API'sine dahil etmek 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, kullanımdan kaldırılan veya deneysel olan özellikler hariç olmak üzere normal TensorFlow Lite C API ile aynı API'yi sağlar. Şimdilik c_api.h
, c_api_types.h
ve common.h
başlıklarındaki işlevler ve türler mevcuttur. Lütfen c_api_experimental.h
başlığındaki işlevlerin desteklenmediğini unutmayın. Dokümantasyon çevrimiçi olarak bulunabilir.
tflite.h
dosyasını ekleyerek TensorFlow Lite'a özel işlevleri Google Play Hizmetleriyle kullanabilirsiniz.