TensorFlow Lite di layanan Google Play C API (Beta)

TensorFlow Lite di runtime layanan Google Play memungkinkan Anda menjalankan model machine learning (ML) tanpa menggabungkan pustaka TensorFlow Lite secara statis ke dalam aplikasi Anda. Panduan ini memberikan petunjuk tentang cara menggunakan C API untuk layanan Google Play.

Sebelum bekerja dengan TensorFlow Lite di layanan Google Play C API, pastikan Anda telah menginstal alat build CMake .

Perbarui konfigurasi build Anda

Tambahkan dependensi berikut ke kode proyek aplikasi Anda untuk mengakses API layanan Play untuk TensorFlow Lite:

implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"

Kemudian, aktifkan fitur Prefab untuk mengakses C API dari skrip CMake Anda dengan memperbarui blok Android dari file build.gradle modul Anda:

buildFeatures {
  prefab = true
}

Anda akhirnya perlu menambahkan paket tensorflowlite_jni_gms_client yang diimpor dari AAR sebagai dependensi dalam skrip CMake Anda:

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)

Inisialisasi waktu proses TensorFlow Lite

Sebelum memanggil TensorFlow Lite Native API, Anda harus menginisialisasi runtime TfLiteNative dalam kode Java/Kotlin Anda.

Jawa

Task tfLiteInitializeTask = TfLiteNative.initialize(context);
      

Kotlin

val tfLiteInitializeTask: Task = TfLiteNative.initialize(context)
        

Menggunakan API Tugas layanan Google Play, TfLiteNative.initialize secara asinkron memuat waktu proses TFLite dari layanan Google Play ke dalam proses waktu proses aplikasi Anda. Gunakan addOnSuccessListener() untuk memastikan tugas TfLite.initialize() selesai sebelum mengeksekusi kode yang mengakses TensorFlow Lite API. Setelah tugas berhasil diselesaikan, Anda dapat memanggil semua TFLite Native API yang tersedia.

Implementasi kode asli

Untuk menggunakan TensorFlow Lite di layanan Google Play dengan kode asli, Anda dapat melakukan salah satu hal berikut:

  • mendeklarasikan fungsi JNI baru untuk memanggil fungsi asli dari kode Java Anda
  • Panggil TensorFlow Lite Native API dari kode C asli Anda yang sudah ada.

Fungsi JNI:

Anda dapat mendeklarasikan fungsi JNI baru agar runtime TensorFlow Lite yang dideklarasikan di Java/Kotlin dapat diakses oleh kode asli Anda sebagai berikut:

Jawa

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
}
        

Mencocokkan fungsi asli loadModel dan runInference berikut:

#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

Anda kemudian dapat memanggil fungsi C dari kode Java/Kotlin Anda:

Jawa

tfLiteHandleTask.onSuccessTask(unused -> {
    TfLiteJni jni = new TfLiteJni();
    jni.loadModel(getAssets(), "add.bin");
    //...
});
    

Kotlin

tfLiteHandleTask.onSuccessTask {
    val jni = TfLiteJni()
    jni.loadModel(assets, "add.bin")
    // ...
}
      

TensorFlow Lite dalam kode C

Sertakan file header API yang sesuai untuk menyertakan TfLite dengan API layanan Google Play:

#include "tensorflow/lite/c/c_api.h"

Anda kemudian dapat menggunakan TensorFlow Lite C API biasa:

auto model = TfLiteModelCreate(model_asset, model_asset_length);
// ...
auto options = TfLiteInterpreterOptionsCreate();
// ...
auto interpreter = TfLiteInterpreterCreate(model, options);

TensorFlow Lite dengan header Native API layanan Google Play menyediakan API yang sama dengan TensorFlow Lite C API biasa, tidak termasuk fitur yang tidak digunakan lagi atau bersifat eksperimental. Untuk saat ini fungsi dan tipe dari header c_api.h , c_api_types.h dan common.h tersedia. Harap dicatat bahwa fungsi dari header c_api_experimental.h tidak didukung. Dokumentasinya dapat ditemukan online .

Anda dapat menggunakan fungsi khusus untuk TensorFlow Lite dengan Layanan Google Play dengan menyertakan tflite.h .