LiteRT di layanan Google Play C API (Beta)

LiteRT di runtime layanan Google Play memungkinkan Anda menjalankan mesin model learning (ML) tanpa menggabungkan library LiteRT secara statis ke dalam aplikasi Anda. Panduan ini berisi petunjuk cara menggunakan API C untuk Google Layanan Play.

Sebelum menggunakan LiteRT di layanan Google Play C API, pastikan Anda telah menginstal alat build CMake.

Memperbarui konfigurasi build

Tambahkan dependensi berikut ke kode project aplikasi Anda untuk mengakses Services API untuk LiteRT:

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

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

buildFeatures {
  prefab = true
}

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

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)

Melakukan inisialisasi runtime LiteRT

Sebelum memanggil LiteRT Native API, Anda harus melakukan inisialisasi pada Runtime TfLiteNative di kode Java/Kotlin Anda.

Java

Task tfLiteInitializeTask = TfLiteNative.initialize(context);
      

Kotlin

val tfLiteInitializeTask: Task = TfLiteNative.initialize(context)
        

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

Penerapan kode native

Untuk menggunakan LiteRT di layanan Google Play dengan kode native, Anda dapat melakukannya salah satu hal berikut:

  • mendeklarasikan fungsi JNI baru untuk memanggil fungsi native dari kode Java
  • Panggil LiteRT Native API dari kode C native yang sudah ada.

Fungsi JNI:

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

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
}
        

Mencocokkan fungsi native 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

Selanjutnya, Anda dapat memanggil fungsi C dari kode Java/Kotlin:

Java

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

Kotlin

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

LiteRT dalam kode C

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

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

Selanjutnya, Anda dapat menggunakan LiteRT C API reguler:

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

LiteRT dengan header Native API layanan Google Play menyediakan API yang sama dengan LiteRT C API, tidak termasuk fitur yang tidak digunakan lagi atau bersifat eksperimental. Untuk saat ini fungsi dan jenis dari header c_api.h, c_api_types.h, dan common.h tersedia. Memohon perhatikan bahwa fungsi dari header c_api_experimental.h tidak didukung.

Anda dapat menggunakan fungsi khusus untuk LiteRT dengan Layanan Google Play dengan termasuk tflite.h.