From 3ca9c14a68fd8f89b93494efbda6225367d61d1d Mon Sep 17 00:00:00 2001 From: fangzhou12 Date: Tue, 23 May 2023 09:22:17 +0800 Subject: [PATCH] add ohos mindspore jsapi doc Signed-off-by: fangzhou12 --- zh-cn/application-dev/ai/Readme-CN.md | 3 + .../ai/mindspore-lite-js-guidelines.md | 120 ++++ .../reference/apis/js-apis-mindSporeLite.md | 609 ++++++++++++++++++ 3 files changed, 732 insertions(+) create mode 100644 zh-cn/application-dev/ai/Readme-CN.md create mode 100644 zh-cn/application-dev/ai/mindspore-lite-js-guidelines.md create mode 100644 zh-cn/application-dev/reference/apis/js-apis-mindSporeLite.md diff --git a/zh-cn/application-dev/ai/Readme-CN.md b/zh-cn/application-dev/ai/Readme-CN.md new file mode 100644 index 0000000000..0ff55cec35 --- /dev/null +++ b/zh-cn/application-dev/ai/Readme-CN.md @@ -0,0 +1,3 @@ +# AI + +- [使用MindSpore Lite引擎进行模型推理](mindspore-lite-js-guidelines.md) diff --git a/zh-cn/application-dev/ai/mindspore-lite-js-guidelines.md b/zh-cn/application-dev/ai/mindspore-lite-js-guidelines.md new file mode 100644 index 0000000000..2500313e7d --- /dev/null +++ b/zh-cn/application-dev/ai/mindspore-lite-js-guidelines.md @@ -0,0 +1,120 @@ +# 使用MindSpore Lite引擎进行模型推理 + +## 场景介绍 + +MindSpore Lite是一款AI引擎,它提供了面向不同硬件设备AI模型推理的功能,目前已经在图像分类、目标识别、人脸识别、文字识别等应用中广泛使用。 + +本文介绍使用MindSpore Lite推理引擎实现模型推理的通用开发流程。对于使用Native接口实现模型推理,具体指导请见:[使用MindSpore Lite引擎进行模型推理 ](../napi/mindspore-lite-guidelines.md)。 + +## 基本概念 + +在进行开发前,请先了解以下概念。 + +**张量**:它与数组和矩阵非常相似,是MindSpore Lite网络运算中的基本数据结构。 + +**Float16推理模式**: Float16又称半精度,它使用16比特表示一个数。Float16推理模式表示推理的时候用半精度进行推理。 + +## 接口说明 +这里给出MindSpore Lite推理的通用开发流程中涉及的一些接口,具体请见下列表格。更多接口及详细内容,请见[@ohos.ai.mindSporeLite (推理能力)](../reference/apis/js-apis-mindSporeLite.md)。 + +| 接口名 | 描述 | +| ------------------ | ----------------- | +|loadModelFromFile(model: string, options: Context): Promise<Model>|从路径加载模型。| +|getInputs(): MSTensor[]|获取模型的输入。| +|predict(inputs: MSTensor[]): Promise<MSTensor>|推理模型。| +| getData(): ArrayBuffer | 获取张量的数据。 | +| setData(inputArray: ArrayBuffer): void | 设置张量的数据。 | + +## 开发步骤 + +主要流程包括模型的准备、读取、编译、推理和释放,具体开发过程及细节请见下文的开发步骤及示例。 + +1. 模型准备。需要的模型可以直接下载,也可以通过模型转换工具获得。需要的数据从bin文件读取。 + + - 下载模型的格式若为`.ms`,则可以直接使用。本文以mnet.caffemodel.ms为例。 + - 如果是第三方框架的模型,比如 TensorFlow、TensorFlow Lite、Caffe、ONNX等,可以使用[模型转换工具](https://www.mindspore.cn/lite/docs/zh-CN/r2.0/use/downloads.html#1-8-1)转换为`.ms`格式的模型文件。 +2. 创建上下文,设置线程数、设备类型等参数。 +3. 加载模型。本文从路径读入模型。 +4. 加载数据。模型执行之前需要先获取输入,再向输入的张量中填充数据。 +5. 执行推理并打印输出。使用predict接口进行模型推理。 +```js +@State inputName: string = 'mnet_caffemodel_nhwc.bin'; +@State T_model_predict: string = 'Test_MSLiteModel_predict' +inputBuffer: any = null; +build() { + Row() { + Column() { + Text(this.T_model_predict) + .focusable(true) + .fontSize(30) + .fontWeight(FontWeight.Bold) + .onClick(async () => { + //1.模型准备 + let context = globalThis.context; + context.resourceManager.getRawFileContent(this.inputName).then((error,buffer) => { + this.inputBuffer = buffer; + console.log('=========input bin byte length: ' + this.inputBuffer.byteLength) + }).catch(error) { + console.error('Failed to get buffer, error code: ${error.code},message:${error.message}.'); + } + //2.创建上下文 + let options = {'target': ['cpu']} + options.cpu.threadNum = 1; + options.cpu.threadAffinityMode = 0; + options.cpu.precisionMode = 'enforce_fp32'; + //3.加载模型 + let modelFile = '/data/storage/el2/base/haps/entry/files/mnet.caffemodel.ms'; + let msLiteModel = await mindSporeLite.loadModelFromFile(modelFile); + //4.加载数据 + const modelInputs = msLiteModel.getInputs(); + modelInputs[0].setData(this.inputBuffer.buffer); + //5.执行推理并打印输出 + console.log('=========MSLITE predict start=====') + msLiteModel.predict(modelInputs).then((modelOutputs) => { + let output0 = new Float32Array(modelOutputs[0].getData()); + for (let i = 0; i < output0.length; i++) { + console.log(output0[i].toString()); + } + }) + console.log('=========MSLITE predict success=====') + }) + } + .width('100%') + } + .height('100%') +} +``` + +## 调测验证 + +1. 在DevEco Studio 中连接rk3568开发板,点击Run entry,编译自己的hap,有如下显示: + + ```shell + Launching com.example.myapptfjs + $ hdc uninstall com.example.myapptfjs + $ hdc install -r "D:\TVOS\JSAPI\MyAppTfjs\entry\build\default\outputs\default\entry-default-signed.hap" + $ hdc shell aa start -a EntryAbility -b com.example.myapptfjs + ``` + +2. 使用hdc连接rk3568开发板,并将mnet.caffemodel.ms推送到设备中的沙盒目录。mnet_caffemodel_nhwc.bin在本地项目中的rawfile目录下。 + + ```shell + hdc -t 7001005458323933328a00bcdf423800 file send .\mnet.caffemodel.ms /data/app/el2/100/base/com.example.myapptfjs/haps/entry/files/ + ``` +3. 在rk3568屏幕中点击Test_MSLiteModel_predict触发用例,在HiLog打印结果中得到如下结果: + + ```shell + 08-27 23:25:50.278 31782-31782/? I C03d00/JSAPP: =========MSLITE predict start===== + 08-27 23:25:51.487 31782-31782/? I C03d00/JSAPP: 0.10046602040529252 + 08-27 23:25:51.487 31782-31782/? I C03d00/JSAPP: 0.07535600662231445 + 08-27 23:25:51.487 31782-31782/? I C03d00/JSAPP: 0.06326554715633392 + 08-27 23:25:51.487 31782-31782/? I C03d00/JSAPP: 0.0015114173293113708 + 08-27 23:25:51.487 31782-31782/? I C03d00/JSAPP: -0.026745859533548355 + 08-27 23:25:51.487 31782-31782/? I C03d00/JSAPP: -0.055590517818927765 + 08-27 23:25:51.487 31782-31782/? I C03d00/JSAPP: -0.05325715243816376 + 08-27 23:25:51.487 31782-31782/? I C03d00/JSAPP: -0.04629542678594589 + ... + 08-27 23:25:52.881 31782-31782/? I C03d00/JSAPP: 0.23317644000053404 + 08-27 23:25:52.881 31782-31782/? I C03d00/JSAPP: 0.17999525368213654 + 08-27 23:25:50.372 31782-31782/? I C03d00/JSAPP: =========MSLITE predict success===== + ``` diff --git a/zh-cn/application-dev/reference/apis/js-apis-mindSporeLite.md b/zh-cn/application-dev/reference/apis/js-apis-mindSporeLite.md new file mode 100644 index 0000000000..c6aa339593 --- /dev/null +++ b/zh-cn/application-dev/reference/apis/js-apis-mindSporeLite.md @@ -0,0 +1,609 @@ +# @ohos.ai.mindSporeLite (推理能力) + +MindSpore Lite是一款AI引擎,它提供了面向不同硬件设备AI模型推理的功能,目前已经在图像分类、目标识别、人脸识别、文字识别等应用中广泛使用。 +本模块介绍了MindSpore Lite推理引擎支持模型推理的相关能力。 + +> **说明:** +> +> 本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。示例代码使用模型均为MindSpore端侧模型。 +> + +## 导入模块 +```js +import mindSporeLite from '@ohos.ai.mindSporeLite'; +``` + +## Context + +定义运行环境的配置信息。 + +### 属性 + +**系统能力:** SystemCapability.AI.MindSporeLite + + +| 名称 | 类型 | 可读 | 可写 | 说明 | +| ------ | ------------------------- | ---- | ---- | ------------------------------------------------------------ | +| target | string[] | 是 | 是 | 配置目标后端。可选'cpu','nnrt',默认'cpu'。 | +| cpu | [CpuDevice](#cpudevice) | 是 | 是 | CPU后端设备选项。只有当target包含'cpu'时,才能设置此属性。默认值为CpuDevice各属性默认值。 | +| nnrt | [NNRTDevice](#nnrtdevice) | 是 | 是 | NNRT后端设备选项。只有当target包含'nnrt'时,才能设置此属性,当前属性为空。 | + +**示例:** + +```js +let context = {} as any; +context.target = ['cpu','nnrt']; +``` + +## CpuDevice + +CPU后端设备选项。 + +### 属性 + +**系统能力:** SystemCapability.AI.MindSporeLite + +| 名称 | 类型 | 可读 | 可写 | 说明 | +| ---------------------- | ----------------------------------------- | ---- | ---- | ------------------------------------------------------------ | +| threadNum | number | 是 | 是 | 设置运行时的线程数,默认值:2。 | +| threadAffinityMode | [ThreadAffinityMode](#threadaffinitymode) | 是 | 是 | 设置运行时的CPU绑核策略模式,默认值为不绑核:mindSporeLite.ThreadAffinityMode.NO_AFFINITIES。 | +| threadAffinityCoreList | number[] | 是 | 是 | 设置运行时的CPU绑核列表,设置绑核策略模式后使能,当绑核策略模式为mindSporeLite.ThreadAffinityMode.NO_AFFINITIES时,绑核列表为空。列表中的数字代表核的序号。默认值:[]。 | +| precisionMode | string | 是 | 是 | 设置是否使能**Float16推理模式**,设置为'preferred_fp16'代表使能半精度推理,其余设置情况均为不支持,默认设置'enforce_fp32'表示不使能半精度推理。 | + +**Float16推理模式**: Float16又称半精度,它使用16比特表示一个数。Float16推理模式表示推理的时候用半精度进行推理。 + +**示例:** + +```js +let context = {} as any; +context.target = ['cpu']; +context.cpu.threadAffinityMode = 0; +context.cpu.precisionMode = 'preferred_fp16'; +context.cpu.threadAffinityCoreList = [0, 1, 2]; +``` + +## NNRTDevice + +Neural Network Runtime表示神经网络运行时,简称NNRt。作为中间桥梁,连通上层 AI 推理框架和底层加速芯片,实现 AI 模型的跨芯片推理计算。MindSpore Lite 可配置NNRt后端。当前暂未支持。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +## ThreadAffinityMode + +设置运行时的CPU绑核策略模式,有效值为0-2,0为默认不绑核,1为绑大核,2为绑中核。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +| 名称 | 值 | 说明 | +| ------------------ | ---- | ------------ | +| NO_AFFINITIES | 0 | 不绑核。 | +| BIG_CORES_FIRST | 1 | 绑大核优先。 | +| LITTLE_CORES_FIRST | 2 | 绑中核优先。 | + +## mindSporeLite.loadModelFromFile + +loadModelFromFile(model: string, callback: Callback<Model>): void + +从完整路径加载输入模型用于推理。使用callback异步回调。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ------------------------- | ---- | ------------------------ | +| model | string | 是 | 模型的完整输入路径。 | +| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 | + +**示例:** + +```js +let model_file = '/path/to/xxx.ms'; +mindSporeLite.loadModelFromFile(model_file, (result) => { + const modelInputs = result.getInputs(); + console.log(modelInputs[0].name); +}) +``` +## mindSporeLite.loadModelFromFile + +loadModelFromFile(model: string, context: Context, callback: Callback<Model>): void + +从完整路径加载输入模型用于推理。使用callback异步回调。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ----------------------------------- | ---- | ---------------------- | +| model | string | 是 | 模型的完整输入路径。 | +| context | [Context](#context) | 是 | 运行环境的配置信息。 | +| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 | + +**示例:** + +```js +let context = { + 'target': ['cpu'] +}; +let model_file = '/path/to/xxx.ms'; +mindSporeLite.loadModelFromFile(model_file, context, (result) => { + const modelInputs = result.getInputs(); + console.log(modelInputs[0].name); +}) +``` +## mindSporeLite.loadModelFromFile + +loadModelFromFile(model: string, context?: Context): Promise<Model> + +从完整路径加载输入模型用于推理。使用Promise异步回调。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ------- | ------------------- | ---- | -------------------- | +| model | string | 是 | 模型的完整输入路径。 | +| context | [Context](#context) | 否 | 运行环境的配置信息。 | + +**返回值:** + +| 类型 | 说明 | +| ------------------------- | ---------------------------- | +| Promise<[Model](#model)> | Promise对象。返回Model对象。 | + +**示例:** + +```js +let model_file = '/path/to/xxx.ms'; +mindSporeLite.loadModelFromFile(model_file).then((result) => { + const modelInputs = result.getInputs(); + console.log(modelInputs[0].name); +}) +``` +## mindSporeLite.loadModelFromBuffer + +loadModelFromBuffer(model: ArrayBuffer, callback: Callback<Model>): void + +从内存加载输入模型用于推理。使用callback异步回调。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ------------------------- | ---- | ------------------------ | +| model | ArrayBuffer | 是 | 包含模型的内存。 | +| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 | + +**示例:** + +```js +import resourceManager from '@ohos.resourceManager' +@State modelName: string = 'xxx.ms'; +context.resourceManager.getRawFileContent(this.modelName).then((error,buffer) => { + this.modelBuffer = buffer; +}).catch(error) { + console.error('Failed to get buffer, error code: ${error.code},message:${error.message}.'); +} +mindSporeLite.loadModelFromBuffer(this.modelBuffer.buffer, (result) => { + const modelInputs = result.getInputs(); + console.log(modelInputs[0].name); +}) +``` +## mindSporeLite.loadModelFromBuffer + +loadModelFromBuffer(model: ArrayBuffer, context: Context, callback: Callback<Model>): void + +从内存加载输入模型用于推理。使用callback异步回调。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ----------------------------------- | ---- | ---------------------- | +| model | ArrayBuffer | 是 | 包含模型的内存。 | +| context | [Context](#context) | 是 | 运行环境的配置信息。 | +| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 | + +**示例:** + +```js +import resourceManager from '@ohos.resourceManager' +@State modelName: string = 'xxx.ms'; +context.resourceManager.getRawFileContent(this.modelName).then((error,buffer) => { + this.modelBuffer = buffer; +}).catch(error) { + console.error('Failed to get buffer, error code: ${error.code},message:${error.message}.'); +} +let context = {'target': ['cpu']}; +mindSporeLite.loadModelFromBuffer(this.modelBuffer.buffer, context, (result) => { + const modelInputs = result.getInputs(); + console.log(modelInputs[0].name); +}) +``` +## mindSporeLite.loadModelFromBuffer + +loadModelFromBuffer(model: ArrayBuffer, context?: Context): Promise<Model> + +从内存加载输入模型用于推理。使用Promise异步回调。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ------- | ------------------- | ---- | -------------------- | +| model | ArrayBuffer | 是 | 包含模型的内存。 | +| context | [Context](#context) | 否 | 运行环境的配置信息。 | + +**返回值:** + +| 类型 | 说明 | +| ------------------------------- | ---------------------------- | +| Promise<[Model](#model)> | Promise对象。返回Model对象。 | + +**示例:** + +```js +import resourceManager from '@ohos.resourceManager' +@State modelName: string = 'xxx.ms'; +context.resourceManager.getRawFileContent(this.modelName).then((error,buffer) => { + this.modelBuffer = buffer; +}).catch(error) { + console.error('Failed to get buffer, error code: ${error.code},message:${error.message}.'); +} +mindSporeLite.loadModelFromBuffer(model_file).then((result) => { + const modelInputs = result.getInputs(); + console.log(modelInputs[0].name); +}) +``` +## mindSporeLite.loadModelFromFd + +loadModelFromFd(model: number, callback: Callback<Model>): void + +从文件描述符加载输入模型用于推理。使用callback异步回调。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ----------------------------------- | ---- | ---------------------- | +| model | number | 是 | 模型的文件描述符。 | +| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 | + +**示例:** + +```js +import fs from '@ohos.file.fs'; +let model_file = '/path/to/xxx.ms'; +fs.open(model_file, 0, async function(err, file) { + mindSporeLite.loadModelFromFd(file.fd, (result) => { + const modelInputs = result.getInputs(); + console.log(modelInputs[0].name); + }) +}) +``` +## mindSporeLite.loadModelFromFd + +loadModelFromFd(model: number, context: Context, callback: Callback<Model>): void + +从文件描述符加载输入模型用于推理。使用callback异步回调。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ----------------------------------- | ---- | ---------------------- | +| model | number | 是 | 模型的文件描述符。 | +| context | [Context](#context) | 是 | 运行环境的配置信息。 | +| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 | + +**示例:** + +```js +import fs from '@ohos.file.fs'; +let model_file = '/path/to/xxx.ms'; +let context = {'target': ['cpu']}; +fs.open(model_file, 0, async function(err, file) { + mindSporeLite.loadModelFromFd(file.fd, context, (result) => { + const modelInputs = result.getInputs(); + console.log(modelInputs[0].name); + }) +}) +``` +## mindSporeLite.loadModelFromFd + +loadModelFromFd(model: number, context?: Context): Promise< Model> + +从文件描述符加载输入模型用于推理。使用Promise异步回调。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ------- | ------------------- | ---- | -------------------- | +| model | number | 是 | 模型的文件描述符。 | +| context | [Context](#context) | 否 | 运行环境的配置信息。 | + +**返回值:** + +| 类型 | 说明 | +| ------------------------- | ---------------------------- | +| Promise<[Model](#model)> | Promise对象。返回Model对象。 | + +**示例:** + +```js +import fs from '@ohos.file.fs'; +let model_file = '/path/to/xxx.ms'; +fs.open(model_file, 0, async function(err, file) { + let mindSporeLiteModel = await mindSporeLite.loadModelFromFd(file.fd); + mindSporeLite.loadModelFromFd(file.fd).then((result) => { + const modelInputs = result.getInputs(); + console.log(modelInputs[0].name); + }) +}) +``` +## Model + +模型实例。描述Model对象的属性和方法。 + +下例API示例中都需先使用[loadModelFromFile()](#mindsporeliteloadmodelfromfile)、[loadModelFromBuffer()](#mindsporeliteloadmodelfrombuffer)、[loadModelFromFd()](#mindsporeliteloadmodelfromfd)中的任一方法获取到Model实例,再通过此实例调用对应方法。 + +### getInputs + +getInputs(): MSTensor[] + +获取模型的输入用于推理。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +**返回值:** + +| 类型 | 说明 | +| ----------------------- | ------------------ | +| [MSTensor](#mstensor)[] | 返回MSTensor对象。 | + +**示例:** + +```js +let model_file = '/path/to/xxx.ms'; +mindSporeLite.loadModelFromFile(model_file).then((result) => { + const modelInputs = result.getInputs(); + console.log(modelInputs[0].name); +}) +``` +### predict + +predict(inputs: MSTensor[], callback: Callback<Model>): void + +执行推理模型。使用callback异步回调。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ------ | ----------------------- | ---- | -------------------------- | +| inputs | [MSTensor](#mstensor)[] | 是 | 模型的输入。MSTensor对象。 | +| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 | + +**示例:** + +```js +import resourceManager from '@ohos.resourceManager' +@State inputName: string = 'input_data.bin'; +context.resourceManager.getRawFileContent(this.inputName).then((error,buffer) => { + this.inputBuffer = buffer; + let model_file = '/path/to/xxx.ms'; + let mindSporeLiteModel = await mindSporeLite.loadModelFromFile(model_file); + const modelInputs = mindSporeLiteModel.getInputs(); + modelInputs[0].setData(this.inputBuffer.buffer); + result.predict(modelInputs, (result) => { + let output = new Float32Array(result[0].getData()); + for (let i = 0; i < output.length; i++) { + console.log(output[i].toString()); + } + }) +}) +``` +### predict + +predict(inputs: MSTensor[]): Promise<MSTensor[]> + +执行推理模型。使用Promise异步回调。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ------ | ----------------------- | ---- | -------------------------- | +| inputs | [MSTensor](#mstensor)[] | 是 | 模型的输入。MSTensor对象。 | + +**返回值:** + +| 类型 | 说明 | +| ----------------------- | ------------------ | +| [MSTensor](#mstensor)[] | 返回MSTensor对象。 | + +**示例:** + +```js +import resourceManager from '@ohos.resourceManager' +@State inputName: string = 'input_data.bin'; +context.resourceManager.getRawFileContent(this.inputName).then((error,buffer) => { + this.inputBuffer = buffer; + let model_file = '/path/to/xxx.ms'; + let mindSporeLiteModel = await mindSporeLite.loadModelFromFile(model_file); + const modelInputs = mindSporeLiteModel.getInputs(); + modelInputs[0].setData(this.inputBuffer.buffer); + result.predict(modelInputs).then((result) => { + let output = new Float32Array(result[0].getData()); + for (let i = 0; i < output.length; i++) { + console.log(output[i].toString()); + } + }) +}) +``` + +### resize + +resize(inputs: MSTensor[], dims: Array<Array<number>>): boolean + +重新设置张量大小。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ------ | --------------------- | ---- | ----------------------------- | +| inputs | [MSTensor](#mstensor)[] | 是 | 模型的输入。 | +| dims | Array<Array<number>> | 是 | 需要修改的目标张量大小。 | + +**返回值:** + +| 类型 | 说明 | +| ------- | ------------------------------------------------------------ | +| boolean | 返回是否设置成功的结果。true表示重新设置张量大小成功;false表示重新设置张量大小失败。 | + +**示例:** + +```js +let model_file = '/path/to/xxx.ms'; +let mindSporeLiteModel = await mindSporeLite.loadModelFromFile(model_file); +const modelInputs = mindSporeLiteModel.getInputs(); +let new_dim = new Array([1,32,32,1]); +mindSporeLiteModel.resize(modelInputs, new_dim); +``` + +## MSTensor + +模型张量实例。描述MSTensor对象的属性和方法。它与数组和矩阵非常相似,是MindSpore Lite网络运算中的基本数据结构。 + +下例API示例中都需先使用[getInputs()](#getinputs)获取到MSTensor实例,再通过此实例调用对应方法。 + +### 属性 + +**系统能力:** SystemCapability.AI.MindSporeLite + +| 名称 | 类型 | 可读 | 可写 | 说明 | +| ---------- | --------------------- | ---- | ---- | ---------------------------------------------------- | +| name | string | 是 | 是 | 张量的名称。默认为null | +| shape | number[] | 是 | 是 | 张量的维度数组。默认为0。 | +| elementNum | number | 是 | 是 | 张量的维度数组的长度。默认为0。 | +| dataSize | number | 是 | 是 | 张量的数据的长度。默认为0。 | +| dtype | [DataType](#datatype) | 是 | 是 | 张量的数据类型。默认值为0,代表TYPE_UNKNOWN。 | +| format | [Format](#format) | 是 | 是 | 张量的数据排布方式。默认值为-1,代表DEFAULT_FORMAT。 | + +**示例:** + +```js +let model_file = '/path/to/xxx.ms'; +let mindSporeLiteModel = await mindSporeLite.loadModelFromFile(model_file); +const modelInputs = mindSporeLiteModel.getInputs(); +console.log(modelInputs[0].name); +console.log(modelInputs[0].shape.toString()); +console.log(modelInputs[0].elementNum.toString()); +console.log(modelInputs[0].dtype.toString()); +console.log(modelInputs[0].format.toString()); +console.log(modelInputs[0].dataSize.toString()); +``` + +### getData + +getData(): ArrayBuffer + +获取张量的数据。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +**返回值:** + +| 类型 | 说明 | +| ----------- | -------------------- | +| ArrayBuffer | 返回张量的数据指针。 | + +**示例:** + +```js +//如果已经获取了输出张量 +result.predict(modelInputs, (result) => { + let output = new Float32Array(result[0].getData()); + for (let i = 0; i < output.length; i++) { + console.log(output[i].toString()); + } +}) +``` + +### setData + +setData(inputArray: ArrayBuffer): void + +设置张量的数据。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ---------- | ----------- | ---- | ---------------------- | +| inputArray | ArrayBuffer | 是 | 张量的输入数据缓冲区。 | + +**示例:** + +```js +import resourceManager from '@ohos.resourceManager' +@State inputName: string = 'input_data.bin'; +context.resourceManager.getRawFileContent(this.inputName).then((error,buffer) => { + this.inputBuffer = buffer; +}) +let model_file = '/path/to/xxx.ms'; +let mindSporeLiteModel = await mindSporeLite.loadModelFromFile(model_file); +const modelInputs = mindSporeLiteModel.getInputs(); +modelInputs[0].setData(this.inputBuffer.buffer); +``` + +## DataType + +张量的数据类型。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +| 名称 | 值 | 说明 | +| ------------------- | ---- | ------------------- | +| TYPE_UNKNOWN | 0 | 未知类型。 | +| NUMBER_TYPE_INT8 | 32 | 保持Int8的类型。 | +| NUMBER_TYPE_INT16 | 33 | 保持Int16的类型。 | +| NUMBER_TYPE_INT32 | 34 | 保持Int32的类型。 | +| NUMBER_TYPE_INT64 | 35 | 保持Int64的类型。 | +| NUMBER_TYPE_UINT8 | 37 | 保持UInt8的类型。 | +| NUMBER_TYPE_UINT16 | 38 | 保持UInt16的类型。 | +| NUMBER_TYPE_UINT32 | 39 | 保持UInt32的类型。 | +| NUMBER_TYPE_UINT64 | 40 | 保持UInt64的类型。 | +| NUMBER_TYPE_FLOAT16 | 42 | 保持Float16的类型。 | +| NUMBER_TYPE_FLOAT32 | 43 | 保持Float32的类型。 | +| NUMBER_TYPE_FLOAT64 | 44 | 保持Float64的类型。 | + +## Format + +张量的数据排布方式。 + +**系统能力:** SystemCapability.AI.MindSporeLite + +| 名称 | 值 | 说明 | +| -------------- | ---- | --------------------- | +| DEFAULT_FORMAT | -1 | 未知数据排布方式。 | +| NCHW | 0 | 数据排布方式为NCHW。 | +| NHWC | 1 | 数据排布方式为NHWC。 | +| NHWC4 | 2 | 数据排布方式为NHWC4。 | +| HWKC | 3 | 数据排布方式为HWKC。 | +| HWCK | 4 | 数据排布方式为HWCK。 | +| KCHW | 5 | 数据排布方式为KCHW。 | -- GitLab