TensorFlow Lite trong API C của dịch vụ Google Play (Beta)

TensorFlow Lite trong thời gian chạy dịch vụ Google Play cho phép bạn chạy các mô hình machine learning (ML) mà không cần gói tĩnh các thư viện TensorFlow Lite vào ứng dụng của bạn. Hướng dẫn này cung cấp hướng dẫn về cách sử dụng API C cho các dịch vụ của Google Play.

Trước khi làm việc với TensorFlow Lite trong API C của dịch vụ Google Play, hãy đảm bảo bạn đã cài đặt công cụ xây dựng CMake .

Cập nhật cấu hình bản dựng của bạn

Thêm các phần phụ thuộc sau vào mã dự án ứng dụng của bạn để truy cập API dịch vụ Play cho TensorFlow Lite:

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

Sau đó, bật tính năng Prefab để truy cập API C từ tập lệnh CMake bằng cách cập nhật khối android của tệp build.gradle của mô-đun:

buildFeatures {
  prefab = true
}

Cuối cùng, bạn cần thêm gói tensorflowlite_jni_gms_client được nhập từ AAR làm phần phụ thuộc trong tập lệnh CMake của bạn:

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)

Khởi tạo thời gian chạy TensorFlow Lite

Trước khi gọi API gốc TensorFlow Lite, bạn phải khởi tạo thời gian chạy TfLiteNative trong mã Java/Kotlin của mình.

Java

Task tfLiteInitializeTask = TfLiteNative.initialize(context);
      

Kotlin

val tfLiteInitializeTask: Task = TfLiteNative.initialize(context)
        

Bằng cách sử dụng API tác vụ của dịch vụ Google Play, TfLiteNative.initialize tải không đồng bộ thời gian chạy TFLite từ các dịch vụ Google Play vào quy trình thời gian chạy của ứng dụng của bạn. Sử dụng addOnSuccessListener() để đảm bảo tác vụ TfLite.initialize() hoàn thành trước khi thực thi mã truy cập API TensorFlow Lite. Khi tác vụ đã hoàn thành thành công, bạn có thể gọi tất cả API gốc TFLite có sẵn.

Triển khai mã gốc

Để sử dụng TensorFlow Lite trong các dịch vụ của Google Play bằng mã gốc của mình, bạn có thể thực hiện một trong những thao tác sau:

  • khai báo các hàm JNI mới để gọi các hàm gốc từ mã Java của bạn
  • Gọi API gốc TensorFlow Lite từ mã C gốc hiện có của bạn.

Chức năng JNI:

Bạn có thể khai báo một hàm JNI mới để làm cho thời gian chạy TensorFlow Lite được khai báo trong Java/Kotlin có thể truy cập được bằng mã gốc của bạn như sau:

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
}
        

Khớp các hàm gốc loadModelrunInference sau:

#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

Sau đó, bạn có thể gọi các hàm C từ mã Java/Kotlin của mình:

Java

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 trong mã C

Bao gồm tệp tiêu đề API thích hợp để bao gồm TfLite với API dịch vụ Google Play:

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

Sau đó, bạn có thể sử dụng API TensorFlow Lite C thông thường:

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

TensorFlow Lite với các tiêu đề API gốc của dịch vụ Google Play cung cấp API giống như API TensorFlow Lite C thông thường, ngoại trừ các tính năng không được dùng nữa hoặc mang tính thử nghiệm. Hiện tại, các hàm và kiểu từ các tiêu c_api.h , c_api_types.hcommon.h đều có sẵn. Xin lưu ý rằng các chức năng từ tiêu đề c_api_experimental.h không được hỗ trợ. Các tài liệu có thể được tìm thấy trực tuyến .

Bạn có thể sử dụng các chức năng dành riêng cho TensorFlow Lite với Dịch vụ của Google Play bằng cách bao gồm tflite.h .