-
如果尚未安装,请按照网站上的说明安装 Android Studio 3.5 或更高版本。
-
最低 API 为 15 的 Android 设备和 Android 开发环境。
-
打开Android Studio,然后从“欢迎”屏幕中选择
Open an existing Android Studio project
。 -
在出现的
Open File or Project
窗口中,导航至克隆的 AoE GitHub 项目的存储位置,选择项目根目录下的Android
目录。单击Ok
。 -
如果它要求您执行
Gradle Sync
,请单击Ok
。 -
如果遇到诸如
android-15
之类的目标无法找到之类的错误,则可能还需要安装各种平台和工具。单击运行按钮(绿色箭头),或从顶部菜单中选择 运行 > 运行 'examples-demo'。您可能需要使用Build
>Rebuild
来重建项目。 -
另外,您需要插入一个启用了开发人员选项的 Android 设备。有关设置开发者设备的更多详细信息,请参见 此处。
Demo 项目中使用的模型会通过 gradle/download.gradle 自动下载解压模型文件到对应 assets
目录。
AoE Android SDK 适用于 API 15+
该库在JCenter公开托管,您可以在其中下载 AAR 包。要通过 Gradle 引用依赖,请确保根 项目 build.gradle 文件中添加JCenter存储库:
allprojects {
repositories {
// aoe maven 私仓[可选]
maven {
url 'https://dl.bintray.com/aoe/maven'
}
jcenter()
}
}
在组件 build.gradle 中添加依赖即可:
implementation 'com.didi.aoe:library-core:latest'
implementation 'com.didi.aoe:runtime-xxx:latest' // 依赖于选择的推理框架运行时
AoE 版本 | 推理框架 | 依赖信息 | 推理框架版本 |
---|---|---|---|
1.1.2 (2019/12/25) |
TensorFlow Lite | com.didi.aoe.runtime-tensorflow-lite:1.1.2 | 2.0.0 |
PyTorch | com.didi.aoe.runtime-pytorch:1.1.2 | 1.3.1 | |
MNN | com.didi.aoe.runtime-mnn:1.1.2 | 0.2.1.5 | |
NCNN | com.didi.aoe.runtime-ncnn:1.1.2 | 20191113 |
AoE 标准模型配置规范是在 assets 模型目录下定义模型描述文件 model.config
,指明
模型加载方式和路径:
assets/{feature_name}/model.config
以 Json 格式定义模型配置细节,样例如下:
{
"version": "1.0.0",
"runtime": "tensorflow",
"source": "cloud",
"modelId": 75,
"modelDir": "mnist",
"modelName": "mnist_cnn_keras.tflite",
"modelSign":"822d72ce038baef3e40924016d4550bc"
}
InterpreterComponent 用于完成模型加载和数据预处理、后处理;
以下代码片段演示了如何基于 TensorFlow Lite 实现 MNIST 图像数字识别功能的 InterpreterComponent,我们提供TensorFlow的运行时组件,使用了抽象类 TensorFlowInterpreter 对标准实现做了封装,只需实现数据处理接口即可完成组件 定制。
public class MnistInterpreter extends TensorFlowInterpreter<float[], Integer, float[], float[][]> {
@Nullable
@Override
public float[] preProcess(@NonNull float[] input) {
return input;
}
@Nullable
@Override
public Integer postProcess(@Nullable float[][] modelOutput) {
if (modelOutput != null && modelOutput.length == 1) {
for (int i = 0; i < modelOutput[0].length; i++) {
if (Float.compare(modelOutput[0][i], 1f) == 0) {
return i;
}
}
}
return null;
}
}
具体使用方法参见 MNIST 应用示例
构造AoeClient实例,显式声明InterpreterComponent实例,进行推理操作。
// 1 构造AoeClient交互实例
AoeClient client = new AoeClient(requireContext(),
new AoeClient.Options()
.setInterpreter({Interpreter实例类})
.useRemoteService(false), // AoE默认使用独立进程执行Interpreter,可手动关闭使用该特性
{模型配置assets文件夹路径});
// 2 模型初始化,加载模型文件
mClient.init(new AoeClient.OnInitListener() {
@Override
public void onSuccess() {
super.onSuccess();
Log.d(TAG, "AoeClient init success");
}
@Override
public void onFailed(int code, String msg) {
super.onFailed(code, msg);
Log.d(TAG, "AoeClient init failed: " + code + ", " + msg);
}
});
if (client.isRunning()) {
// 3 执行推理
Object result = client.process(inputData);
}
// 4 释放资源
client.release();