LiteRT ในรันไทม์ของบริการ Google Play ช่วยให้คุณเรียกใช้เครื่องได้ การเรียนรู้ (ML) โดยไม่ต้องรวมไลบรารี LiteRT ไว้อย่างคงที่ลงใน แอปของคุณ คู่มือนี้จะแสดงวิธีการใช้ C API สำหรับ Google บริการ Google Play
ก่อนที่จะทํางานกับ LiteRT ใน C API ของบริการ Google Play โปรดตรวจสอบว่า คุณได้ติดตั้งเครื่องมือสร้าง CMake ไว้
อัปเดตการกำหนดค่าบิลด์
เพิ่มทรัพยากร Dependency ต่อไปนี้ลงในโค้ดโปรเจ็กต์ของแอปเพื่อเข้าถึง Play API บริการสำหรับ LiteRT:
implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"
จากนั้นเปิดใช้ Prefab ฟีเจอร์เพื่อเข้าถึง C API จากสคริปต์ CMake โดยการอัปเดตการบล็อก Android ไฟล์ build.gradle ของโมดูล
buildFeatures {
prefab = true
}
ในที่สุดคุณต้องเพิ่มแพ็กเกจ tensorflowlite_jni_gms_client
ที่นำเข้าแล้ว
จาก AAR เป็นทรัพยากร Dependency ในสคริปต์ 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)
เริ่มต้นรันไทม์ LiteRT
ก่อนที่จะเรียกใช้ LiteRT Native API คุณต้องเริ่มต้น
รันไทม์ของ TfLiteNative
ในโค้ด Java/Kotlin
Java
Task tfLiteInitializeTask = TfLiteNative.initialize(context);
Kotlin
val tfLiteInitializeTask: Task= TfLiteNative.initialize(context)
กำลังใช้ Task API สำหรับบริการ Google Play TfLiteNative.initialize
โหลดรันไทม์ TFLite แบบอะซิงโครนัสจากบริการ Google Play ไปยัง
กับขั้นตอนรันไทม์ของแอปพลิเคชัน ใช้ addOnSuccessListener()
เพื่อตรวจสอบว่า
งาน TfLite.initialize()
งานเสร็จสมบูรณ์ก่อนเรียกใช้โค้ดที่เข้าถึง
LiteRT API เมื่องานเสร็จสมบูรณ์แล้ว คุณสามารถเรียกใช้
TFLite Native API ที่พร้อมใช้งานทั้งหมด
การติดตั้งโค้ดแบบเนทีฟ
หากต้องการใช้ LiteRT ในบริการ Google Play ด้วยโค้ดเนทีฟ ให้ทำดังนี้ ดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้
- ประกาศฟังก์ชัน JNI ใหม่เพื่อเรียกฟังก์ชันเนทีฟจากโค้ด Java
- เรียกใช้ LiteRT Native API จากโค้ด C แบบเนทีฟที่มีอยู่
ฟังก์ชัน JNI:
คุณสามารถประกาศฟังก์ชัน JNI ใหม่เพื่อทำการประกาศรันไทม์ LiteRT ใน Java/Kotlin สามารถเข้าถึงได้ด้วยโค้ดเนทีฟดังนี้:
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 }
จับคู่ฟังก์ชันเนทีฟ loadModel
และ runInference
ต่อไปนี้
#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
จากนั้นคุณสามารถเรียกใช้ฟังก์ชัน C ได้จากโค้ด 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 ในโค้ด C
รวมไฟล์ส่วนหัว API ที่เหมาะสมเพื่อรวม TfLite กับ Google Play API ของบริการ:
#include "tensorflow/lite/c/c_api.h"
คุณจะใช้ LiteRT C API ปกติได้ดังนี้
auto model = TfLiteModelCreate(model_asset, model_asset_length);
// ...
auto options = TfLiteInterpreterOptionsCreate();
// ...
auto interpreter = TfLiteInterpreterCreate(model, options);
LiteRT ที่มีส่วนหัว Native API ของบริการ Google Play มีข้อมูล
API เดียวกับปกติ
LiteRT C API ไม่รวม
ฟีเจอร์ที่เลิกใช้งานแล้วหรืออยู่ในขั้นทดลอง สำหรับฟังก์ชันและประเภท
จากส่วนหัว c_api.h
, c_api_types.h
และ common.h
จะพร้อมใช้งาน โปรด
โปรดทราบว่าระบบไม่รองรับฟังก์ชันจากส่วนหัว c_api_experimental.h
คุณสามารถใช้ฟังก์ชันเฉพาะสำหรับ LiteRT กับบริการ Google Play ได้โดยดำเนินการดังนี้
รวมถึง tflite.h