Google Play 서비스 런타임의 LiteRT를 사용하면 ML 모델을 학습시키고 배포하는 데 있습니다. 이 가이드에서는 Google용 C API를 사용하는 방법에 대해 설명합니다. Play 서비스
Google Play 서비스 C API에서 LiteRT를 사용하기 전에 CMake 빌드 도구가 설치되어 있어야 합니다.
빌드 구성 업데이트
앱 프로젝트 코드에 다음 종속 항목을 추가하여 Play 서비스 API:
implementation "com.google.android.gms:play-services-tflite-java:16.2.0-beta02"
그런 다음 Prefab Android 블록을 업데이트하여 CMake 스크립트에서 C API에 액세스하는 기능 (모듈의 build.gradle 파일)을 변경합니다.
buildFeatures {
prefab = true
}
마지막으로 가져온 tensorflowlite_jni_gms_client
패키지를 추가해야 합니다.
AAR을 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
런타임을 지원합니다.
자바
Task tfLiteInitializeTask = TfLiteNative.initialize(context);
Kotlin
val tfLiteInitializeTask: Task= TfLiteNative.initialize(context)
Google Play 서비스 Task API를 사용하여 TfLiteNative.initialize
TFLite 런타임을 Google Play 서비스에서
애플리케이션의 런타임 프로세스를
수행할 수 있습니다 addOnSuccessListener()
를 사용하여
액세스하는 코드를 실행하기 전에 TfLite.initialize()
작업이 완료됩니다.
LiteRT API를 사용할 수 있습니다. 태스크가 완료되면 다음을 호출할 수 있습니다.
모든 TFLite Native API를 지원합니다.
네이티브 코드 구현
Google Play 서비스에서 네이티브 코드로 LiteRT를 사용하려면 다음 안내를 따르세요. 다음 중 하나:
- Java 코드에서 네이티브 함수를 호출하도록 새 JNI 함수 선언
- 기존 네이티브 C 코드에서 LiteRT 네이티브 API를 호출합니다.
JNI 함수:
새 JNI 함수를 선언하여 LiteRT 런타임을 선언할 수 있습니다. 다음과 같이 네이티브 코드에 액세스할 수 있는 Java/Kotlin
자바
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
그런 다음 Java/Kotlin 코드에서 C 함수를 호출할 수 있습니다.
자바
tfLiteHandleTask.onSuccessTask(unused -> { TfLiteJni jni = new TfLiteJni(); jni.loadModel(getAssets(), "add.bin"); //... });
Kotlin
tfLiteHandleTask.onSuccessTask { val jni = TfLiteJni() jni.loadModel(assets, "add.bin") // ... }
C 코드의 LiteRT
Google Play가 포함된 TfLite를 포함하도록 적절한 API 헤더 파일을 포함합니다. 서비스 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 with Google Play 서비스 네이티브 API 헤더는
동일한 API를 사용하여
LiteRT C API. 다음 기능 제외
기능이 포함되어 있습니다 지금은 함수와 유형이
c_api.h
, c_api_types.h
, common.h
헤더에서 제공된 값을 사용할 수 있습니다. 제발
c_api_experimental.h
헤더의 함수는 지원되지 않습니다.
다음 방법으로 Google Play 서비스에서 LiteRT 전용 함수를 사용할 수 있습니다.
tflite.h
포함.