1# @ohos.ai.mindSporeLite (推理能力) 2 3MindSpore Lite是一款AI引擎,它提供了面向不同硬件设备AI模型推理的功能,目前已经在图像分类、目标识别、人脸识别、文字识别等应用中广泛使用。 4本模块介绍了MindSpore Lite推理引擎支持模型推理的相关能力。 5 6> **说明:** 7> 8> 本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。示例代码使用模型均为MindSpore端侧模型。 9> 10> 本模块接口仅可在Stage模型下使用。 11 12## 导入模块 13```ts 14import mindSporeLite from '@ohos.ai.mindSporeLite'; 15``` 16 17## Context 18 19定义运行环境的配置信息。 20 21### 属性 22 23**系统能力:** SystemCapability.AI.MindSporeLite 24 25 26| 名称 | 类型 | 可读 | 可写 | 说明 | 27| ------ | ------------------------- | ---- | ---- | ------------------------------------------------------------ | 28| target | string[] | 是 | 是 | 配置目标后端。可选'cpu','nnrt',默认'cpu'。 | 29| cpu | [CpuDevice](#cpudevice) | 是 | 是 | CPU后端设备选项。只有当target包含'cpu'时,才能设置此属性。默认值为CpuDevice各属性默认值。 | 30| nnrt | [NNRTDevice](#nnrtdevice) | 是 | 是 | NNRT后端设备选项。只有当target包含'nnrt'时,才能设置此属性,当前属性为空。 | 31 32**示例:** 33 34```ts 35let context: mindSporeLite.Context = {}; 36context.target = ['cpu','nnrt']; 37``` 38 39## CpuDevice 40 41CPU后端设备选项。 42 43### 属性 44 45**系统能力:** SystemCapability.AI.MindSporeLite 46 47| 名称 | 类型 | 可读 | 可写 | 说明 | 48| ---------------------- | ----------------------------------------- | ---- | ---- | ------------------------------------------------------------ | 49| threadNum | number | 是 | 是 | 设置运行时的线程数,默认值:2。 | 50| threadAffinityMode | [ThreadAffinityMode](#threadaffinitymode) | 是 | 是 | 设置运行时的CPU绑核策略模式,默认值为不绑核:mindSporeLite.ThreadAffinityMode.NO_AFFINITIES。 | 51| threadAffinityCoreList | number[] | 是 | 是 | 设置运行时的CPU绑核列表,设置绑核策略模式后使能,当绑核策略模式为mindSporeLite.ThreadAffinityMode.NO_AFFINITIES时,绑核列表为空。列表中的数字代表核的序号。默认值:[]。 | 52| precisionMode | string | 是 | 是 | 设置是否使能**Float16推理模式**,设置为'preferred_fp16'代表使能半精度推理,其余设置情况均为不支持,默认设置'enforce_fp32'表示不使能半精度推理。 | 53 54**Float16推理模式**: Float16又称半精度,它使用16比特表示一个数。Float16推理模式表示推理的时候用半精度进行推理。 55 56**示例:** 57 58```ts 59let context: mindSporeLite.Context = {}; 60context.cpu = {}; 61context.target = ['cpu']; 62context.cpu.threadAffinityMode = 0; 63context.cpu.precisionMode = 'preferred_fp16'; 64context.cpu.threadAffinityCoreList = [0, 1, 2]; 65``` 66 67## NNRTDevice 68 69Neural Network Runtime表示神经网络运行时,简称NNRt。作为中间桥梁,连通上层 AI 推理框架和底层加速芯片,实现 AI 模型的跨芯片推理计算。MindSpore Lite 可配置NNRt后端。当前暂未支持。 70 71**系统能力:** SystemCapability.AI.MindSporeLite 72 73## ThreadAffinityMode 74 75设置运行时的CPU绑核策略模式,有效值为0-2,0为默认不绑核,1为绑大核,2为绑中核。 76 77**系统能力:** SystemCapability.AI.MindSporeLite 78 79| 名称 | 值 | 说明 | 80| ------------------ | ---- | ------------ | 81| NO_AFFINITIES | 0 | 不绑核。 | 82| BIG_CORES_FIRST | 1 | 绑大核优先。 | 83| LITTLE_CORES_FIRST | 2 | 绑中核优先。 | 84 85## mindSporeLite.loadModelFromFile 86 87loadModelFromFile(model: string, callback: Callback<Model>): void 88 89从完整路径加载输入模型用于推理。使用callback异步回调。 90 91**系统能力:** SystemCapability.AI.MindSporeLite 92 93**参数:** 94 95| 参数名 | 类型 | 必填 | 说明 | 96| -------- | ------------------------- | ---- | ------------------------ | 97| model | string | 是 | 模型的完整输入路径。 | 98| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 | 99 100**示例:** 101 102```ts 103let model_file : string = '/path/to/xxx.ms'; 104mindSporeLite.loadModelFromFile(model_file, (result : mindSporeLite.Model) => { 105 let modelInputs : mindSporeLite.MSTensor[] = result.getInputs(); 106 console.log(modelInputs[0].name); 107}) 108``` 109## mindSporeLite.loadModelFromFile 110 111loadModelFromFile(model: string, context: Context, callback: Callback<Model>): void 112 113从完整路径加载输入模型用于推理。使用callback异步回调。 114 115**系统能力:** SystemCapability.AI.MindSporeLite 116 117**参数:** 118 119| 参数名 | 类型 | 必填 | 说明 | 120| -------- | ----------------------------------- | ---- | ---------------------- | 121| model | string | 是 | 模型的完整输入路径。 | 122| context | [Context](#context) | 是 | 运行环境的配置信息。 | 123| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 | 124 125**示例:** 126 127```ts 128let context: mindSporeLite.Context = {}; 129context.target = ['cpu']; 130let model_file : string = '/path/to/xxx.ms'; 131mindSporeLite.loadModelFromFile(model_file, context, (result : mindSporeLite.Model) => { 132 let modelInputs : mindSporeLite.MSTensor[] = result.getInputs(); 133 console.log(modelInputs[0].name); 134}) 135``` 136## mindSporeLite.loadModelFromFile 137 138loadModelFromFile(model: string, context?: Context): Promise<Model> 139 140从完整路径加载输入模型用于推理。使用Promise异步函数。 141 142**系统能力:** SystemCapability.AI.MindSporeLite 143 144**参数:** 145 146| 参数名 | 类型 | 必填 | 说明 | 147| ------- | ------------------- | ---- | -------------------- | 148| model | string | 是 | 模型的完整输入路径。 | 149| context | [Context](#context) | 否 | 运行环境的配置信息。 | 150 151**返回值:** 152 153| 类型 | 说明 | 154| ------------------------- | ---------------------------- | 155| Promise<[Model](#model)> | Promise对象。返回Model对象。 | 156 157**示例:** 158 159```ts 160let model_file = '/path/to/xxx.ms'; 161mindSporeLite.loadModelFromFile(model_file).then((result : mindSporeLite.Model) => { 162 let modelInputs : mindSporeLite.MSTensor[] = result.getInputs(); 163 console.log(modelInputs[0].name); 164}) 165``` 166## mindSporeLite.loadModelFromBuffer 167 168loadModelFromBuffer(model: ArrayBuffer, callback: Callback<Model>): void 169 170从内存加载输入模型用于推理。使用callback异步回调。 171 172**系统能力:** SystemCapability.AI.MindSporeLite 173 174**参数:** 175 176| 参数名 | 类型 | 必填 | 说明 | 177| -------- | ------------------------- | ---- | ------------------------ | 178| model | ArrayBuffer | 是 | 包含模型的内存。 | 179| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 | 180 181**示例:** 182```ts 183// 构造单例对象 184export class GlobalContext { 185 private constructor() {} 186 private static instance: GlobalContext; 187 private _objects = new Map<string, Object>(); 188 189 public static getContext(): GlobalContext { 190 if (!GlobalContext.instance) { 191 GlobalContext.instance = new GlobalContext(); 192 } 193 return GlobalContext.instance; 194 } 195 196 getObject(value: string): Object | undefined { 197 return this._objects.get(value); 198 } 199 200 setObject(key: string, objectClass: Object): void { 201 this._objects.set(key, objectClass); 202 } 203 204} 205``` 206 207```ts 208import resourceManager from '@ohos.resourceManager' 209import { GlobalContext } from '../GlobalContext'; 210import mindSporeLite from '@ohos.ai.mindSporeLite'; 211import common from '@ohos.app.ability.common'; 212export class Test { 213 value:number = 0; 214 foo(): void { 215 GlobalContext.getContext().setObject("value", this.value); 216 } 217} 218let globalContext = GlobalContext.getContext().getObject("value") as common.UIAbilityContext; 219 220let modelName = '/path/to/xxx.ms'; 221globalContext.resourceManager.getRawFileContent(modelName).then((buffer : Uint8Array) => { 222 let modelBuffer : ArrayBuffer = buffer.buffer; 223 mindSporeLite.loadModelFromBuffer(modelBuffer, (result : mindSporeLite.Model) => { 224 let modelInputs : mindSporeLite.MSTensor[] = result.getInputs(); 225 console.log(modelInputs[0].name); 226 }) 227}) 228``` 229## mindSporeLite.loadModelFromBuffer 230 231loadModelFromBuffer(model: ArrayBuffer, context: Context, callback: Callback<Model>): void 232 233从内存加载输入模型用于推理。使用callback异步回调。 234 235**系统能力:** SystemCapability.AI.MindSporeLite 236 237**参数:** 238 239| 参数名 | 类型 | 必填 | 说明 | 240| -------- | ----------------------------------- | ---- | ---------------------- | 241| model | ArrayBuffer | 是 | 包含模型的内存。 | 242| context | [Context](#context) | 是 | 运行环境的配置信息。 | 243| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 | 244 245**示例:** 246 247```ts 248import resourceManager from '@ohos.resourceManager' 249import { GlobalContext } from '../GlobalContext'; 250import mindSporeLite from '@ohos.ai.mindSporeLite'; 251import common from '@ohos.app.ability.common'; 252let modelName = '/path/to/xxx.ms'; 253export class Test { 254 value:number = 0; 255 foo(): void { 256 GlobalContext.getContext().setObject("value", this.value); 257 } 258} 259let globalContext= GlobalContext.getContext().getObject("value") as common.UIAbilityContext; 260 261globalContext.resourceManager.getRawFileContent(modelName).then((buffer : Uint8Array) => { 262 let modelBuffer : ArrayBuffer = buffer.buffer; 263 let context: mindSporeLite.Context = {}; 264 context.target = ['cpu']; 265 mindSporeLite.loadModelFromBuffer(modelBuffer, context, (result : mindSporeLite.Model) => { 266 let modelInputs : mindSporeLite.MSTensor[] = result.getInputs(); 267 console.log(modelInputs[0].name); 268 }) 269}) 270``` 271## mindSporeLite.loadModelFromBuffer 272 273loadModelFromBuffer(model: ArrayBuffer, context?: Context): Promise<Model> 274 275从内存加载输入模型用于推理。使用Promise异步函数。 276 277**系统能力:** SystemCapability.AI.MindSporeLite 278 279**参数:** 280 281| 参数名 | 类型 | 必填 | 说明 | 282| ------- | ------------------- | ---- | -------------------- | 283| model | ArrayBuffer | 是 | 包含模型的内存。 | 284| context | [Context](#context) | 否 | 运行环境的配置信息。 | 285 286**返回值:** 287 288| 类型 | 说明 | 289| ------------------------------- | ---------------------------- | 290| Promise<[Model](#model)> | Promise对象。返回Model对象。 | 291 292**示例:** 293 294```ts 295import resourceManager from '@ohos.resourceManager' 296import { GlobalContext } from '../GlobalContext'; 297import mindSporeLite from '@ohos.ai.mindSporeLite'; 298import common from '@ohos.app.ability.common'; 299let modelName = '/path/to/xxx.ms'; 300export class Test { 301 value:number = 0; 302 foo(): void { 303 GlobalContext.getContext().setObject("value", this.value); 304 } 305} 306let globalContext = GlobalContext.getContext().getObject("value") as common.UIAbilityContext; 307 308globalContext.resourceManager.getRawFileContent(modelName).then((buffer : Uint8Array) => { 309 let modelBuffer : ArrayBuffer = buffer.buffer; 310 mindSporeLite.loadModelFromBuffer(modelBuffer).then((result : mindSporeLite.Model) => { 311 let modelInputs : mindSporeLite.MSTensor[] = result.getInputs(); 312 console.log(modelInputs[0].name); 313 }) 314}) 315``` 316## mindSporeLite.loadModelFromFd 317 318loadModelFromFd(model: number, callback: Callback<Model>): void 319 320从文件描述符加载输入模型用于推理。使用callback异步回调。 321 322**系统能力:** SystemCapability.AI.MindSporeLite 323 324**参数:** 325 326| 参数名 | 类型 | 必填 | 说明 | 327| -------- | ----------------------------------- | ---- | ---------------------- | 328| model | number | 是 | 模型的文件描述符。 | 329| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 | 330 331**示例:** 332 333```ts 334import fs from '@ohos.file.fs'; 335let model_file = '/path/to/xxx.ms'; 336let file = fs.openSync(model_file, fs.OpenMode.READ_ONLY); 337mindSporeLite.loadModelFromFd(file.fd, (result : mindSporeLite.Model) => { 338 let modelInputs : mindSporeLite.MSTensor[] = result.getInputs(); 339 console.log(modelInputs[0].name); 340}) 341``` 342## mindSporeLite.loadModelFromFd 343 344loadModelFromFd(model: number, context: Context, callback: Callback<Model>): void 345 346从文件描述符加载输入模型用于推理。使用callback异步回调。 347 348**系统能力:** SystemCapability.AI.MindSporeLite 349 350**参数:** 351 352| 参数名 | 类型 | 必填 | 说明 | 353| -------- | ----------------------------------- | ---- | ---------------------- | 354| model | number | 是 | 模型的文件描述符。 | 355| context | [Context](#context) | 是 | 运行环境的配置信息。 | 356| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 | 357 358**示例:** 359 360```ts 361import fs from '@ohos.file.fs'; 362let model_file = '/path/to/xxx.ms'; 363let context : mindSporeLite.Context = {}; 364context.target = ['cpu']; 365let file = fs.openSync(model_file, fs.OpenMode.READ_ONLY); 366mindSporeLite.loadModelFromFd(file.fd, context, (result : mindSporeLite.Model) => { 367 let modelInputs : mindSporeLite.MSTensor[] = result.getInputs(); 368 console.log(modelInputs[0].name); 369}) 370``` 371## mindSporeLite.loadModelFromFd 372 373loadModelFromFd(model: number, context?: Context): Promise< Model> 374 375从文件描述符加载输入模型用于推理。使用Promise异步函数。 376 377**系统能力:** SystemCapability.AI.MindSporeLite 378 379**参数:** 380 381| 参数名 | 类型 | 必填 | 说明 | 382| ------- | ------------------- | ---- | -------------------- | 383| model | number | 是 | 模型的文件描述符。 | 384| context | [Context](#context) | 否 | 运行环境的配置信息。 | 385 386**返回值:** 387 388| 类型 | 说明 | 389| ------------------------- | ---------------------------- | 390| Promise<[Model](#model)> | Promise对象。返回Model对象。 | 391 392**示例:** 393 394```ts 395import fs from '@ohos.file.fs'; 396let model_file = '/path/to/xxx.ms'; 397let file = fs.openSync(model_file, fs.OpenMode.READ_ONLY); 398let mindSporeLiteModel : mindSporeLite.Model = await mindSporeLite.loadModelFromFd(file.fd); 399let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs(); 400console.log(modelInputs[0].name); 401``` 402## Model 403 404模型实例。描述Model对象的属性和方法。 405 406下例API示例中都需先使用[loadModelFromFile()](#mindsporeliteloadmodelfromfile)、[loadModelFromBuffer()](#mindsporeliteloadmodelfrombuffer)、[loadModelFromFd()](#mindsporeliteloadmodelfromfd)中的任一方法获取到Model实例,再通过此实例调用对应方法。 407 408### getInputs 409 410getInputs(): MSTensor[] 411 412获取模型的输入用于推理。 413 414**系统能力:** SystemCapability.AI.MindSporeLite 415 416**返回值:** 417 418| 类型 | 说明 | 419| ----------------------- | ------------------ | 420| [MSTensor](#mstensor)[] | 返回MSTensor对象。 | 421 422**示例:** 423 424```ts 425let model_file = '/path/to/xxx.ms'; 426mindSporeLite.loadModelFromFile(model_file).then((result : mindSporeLite.Model) => { 427 let modelInputs : mindSporeLite.MSTensor[] = result.getInputs(); 428 console.log(modelInputs[0].name); 429}) 430``` 431### predict 432 433predict(inputs: MSTensor[], callback: Callback<MSTensor[]>): void 434 435执行推理模型。使用callback异步回调。需要确保调用时模型对象不被资源回收。 436 437**系统能力:** SystemCapability.AI.MindSporeLite 438 439**参数:** 440 441| 参数名 | 类型 | 必填 | 说明 | 442| ------ | ----------------------- | ---- | -------------------------- | 443| inputs | [MSTensor](#mstensor)[] | 是 | 模型的输入列表。MSTensor对象。 | 444| callback | Callback<[MSTensor](#mstensor)[]> | 是 | 回调函数。返回MSTensor对象。 | 445 446**示例:** 447 448```ts 449import resourceManager from '@ohos.resourceManager' 450import { GlobalContext } from '../GlobalContext'; 451import mindSporeLite from '@ohos.ai.mindSporeLite'; 452import common from '@ohos.app.ability.common'; 453export class Test { 454 value:number = 0; 455 foo(): void { 456 GlobalContext.getContext().setObject("value", this.value); 457 } 458} 459let globalContext = GlobalContext.getContext().getObject("value") as common.UIAbilityContext; 460 461let inputName = 'input_data.bin'; 462globalContext.resourceManager.getRawFileContent(inputName).then(async (buffer : Uint8Array) => { 463 let modelBuffer : ArrayBuffer = buffer.buffer; 464 let model_file : string = '/path/to/xxx.ms'; 465 let mindSporeLiteModel : mindSporeLite.Model = await mindSporeLite.loadModelFromFile(model_file); 466 let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs(); 467 468 modelInputs[0].setData(modelBuffer); 469 mindSporeLiteModel.predict(modelInputs, (result : mindSporeLite.MSTensor[]) => { 470 let output = new Float32Array(result[0].getData()); 471 for (let i = 0; i < output.length; i++) { 472 console.log(output[i].toString()); 473 } 474 }) 475}) 476``` 477### predict 478 479predict(inputs: MSTensor[]): Promise<MSTensor[]> 480 481执行推理模型。使用Promise异步函数。需要确保调用时模型对象不被资源回收。 482 483**系统能力:** SystemCapability.AI.MindSporeLite 484 485**参数:** 486 487| 参数名 | 类型 | 必填 | 说明 | 488| ------ | ----------------------- | ---- | ------------------------------ | 489| inputs | [MSTensor](#mstensor)[] | 是 | 模型的输入列表。MSTensor对象。 | 490 491**返回值:** 492 493| 类型 | 说明 | 494| ----------------------- | ---------------------- | 495| [MSTensor](#mstensor)[] | 返回MSTensor对象列表。 | 496 497**示例:** 498 499```ts 500import resourceManager from '@ohos.resourceManager' 501import { GlobalContext } from '../GlobalContext'; 502import mindSporeLite from '@ohos.ai.mindSporeLite'; 503import common from '@ohos.app.ability.common'; 504export class Test { 505 value:number = 0; 506 foo(): void { 507 GlobalContext.getContext().setObject("value", this.value); 508} 509} 510let globalContext = GlobalContext.getContext().getObject("value") as common.UIAbilityContext;; 511let inputName = 'input_data.bin'; 512globalContext.resourceManager.getRawFileContent(inputName).then(async (buffer : Uint8Array) => { 513 let modelBuffer = buffer.buffer; 514 let model_file = '/path/to/xxx.ms'; 515 let mindSporeLiteModel : mindSporeLite.Model = await mindSporeLite.loadModelFromFile(model_file); 516 let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs(); 517 modelInputs[0].setData(modelBuffer); 518 mindSporeLiteModel.predict(modelInputs).then((result : mindSporeLite.MSTensor[]) => { 519 let output = new Float32Array(result[0].getData()); 520 for (let i = 0; i < output.length; i++) { 521 console.log(output[i].toString()); 522 } 523 }) 524}) 525``` 526 527### resize 528 529resize(inputs: MSTensor[], dims: Array<Array<number>>): boolean 530 531重新设置张量大小。 532 533**系统能力:** SystemCapability.AI.MindSporeLite 534 535**参数:** 536 537| 参数名 | 类型 | 必填 | 说明 | 538| ------ | --------------------- | ---- | ----------------------------- | 539| inputs | [MSTensor](#mstensor)[] | 是 | 模型的输入列表。 | 540| dims | Array<Array<number>> | 是 | 需要修改的目标张量大小。 | 541 542**返回值:** 543 544| 类型 | 说明 | 545| ------- | ------------------------------------------------------------ | 546| boolean | 返回是否设置成功的结果。true表示重新设置张量大小成功;false表示重新设置张量大小失败。 | 547 548**示例:** 549 550```ts 551let model_file = '/path/to/xxx.ms'; 552mindSporeLite.loadModelFromFile(model_file).then((mindSporeLiteModel : mindSporeLite.Model) => { 553 let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs(); 554 let new_dim = new Array([1,32,32,1]); 555 mindSporeLiteModel.resize(modelInputs, new_dim); 556}) 557``` 558 559## MSTensor 560 561模型张量实例。描述MSTensor对象的属性和方法。它与数组和矩阵非常相似,是MindSpore Lite网络运算中的基本数据结构。 562 563下例API示例中都需先使用[getInputs()](#getinputs)获取到MSTensor实例,再通过此实例调用对应方法。 564 565### 属性 566 567**系统能力:** SystemCapability.AI.MindSporeLite 568 569| 名称 | 类型 | 可读 | 可写 | 说明 | 570| ---------- | --------------------- | ---- | ---- | ---------------------------------------------------- | 571| name | string | 是 | 是 | 张量的名称。默认为null | 572| shape | number[] | 是 | 是 | 张量的维度数组。默认为0。 | 573| elementNum | number | 是 | 是 | 张量的维度数组的长度。默认为0。 | 574| dataSize | number | 是 | 是 | 张量的数据的长度。默认为0。 | 575| dtype | [DataType](#datatype) | 是 | 是 | 张量的数据类型。默认值为0,代表TYPE_UNKNOWN。 | 576| format | [Format](#format) | 是 | 是 | 张量的数据排布方式。默认值为-1,代表DEFAULT_FORMAT。 | 577 578**示例:** 579 580```ts 581let model_file = '/path/to/xxx.ms'; 582mindSporeLite.loadModelFromFile(model_file).then((mindSporeLiteModel : mindSporeLite.Model) => { 583 let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs(); 584 console.log(modelInputs[0].name); 585 console.log(modelInputs[0].shape.toString()); 586 console.log(modelInputs[0].elementNum.toString()); 587 console.log(modelInputs[0].dtype.toString()); 588 console.log(modelInputs[0].format.toString()); 589 console.log(modelInputs[0].dataSize.toString()); 590}) 591``` 592 593### getData 594 595getData(): ArrayBuffer 596 597获取张量的数据。 598 599**系统能力:** SystemCapability.AI.MindSporeLite 600 601**返回值:** 602 603| 类型 | 说明 | 604| ----------- | -------------------- | 605| ArrayBuffer | 返回张量的数据指针。 | 606 607**示例:** 608 609```ts 610import resourceManager from '@ohos.resourceManager' 611import { GlobalContext } from '../GlobalContext'; 612import mindSporeLite from '@ohos.ai.mindSporeLite'; 613import common from '@ohos.app.ability.common'; 614export class Test { 615 value:number = 0; 616 foo(): void { 617 GlobalContext.getContext().setObject("value", this.value); 618 } 619} 620let globalContext = GlobalContext.getContext().getObject("value") as common.UIAbilityContext; 621let inputName = 'input_data.bin'; 622globalContext.resourceManager.getRawFileContent(inputName).then(async (buffer : Uint8Array) => { 623 let inputBuffer = buffer.buffer; 624 let model_file = '/path/to/xxx.ms'; 625 let mindSporeLiteModel : mindSporeLite.Model = await mindSporeLite.loadModelFromFile(model_file); 626 let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs(); 627 modelInputs[0].setData(inputBuffer); 628 mindSporeLiteModel.predict(modelInputs).then((result : mindSporeLite.MSTensor[]) => { 629 let output = new Float32Array(result[0].getData()); 630 for (let i = 0; i < output.length; i++) { 631 console.log(output[i].toString()); 632 } 633 }) 634}) 635``` 636 637### setData 638 639setData(inputArray: ArrayBuffer): void 640 641设置张量的数据。 642 643**系统能力:** SystemCapability.AI.MindSporeLite 644 645**参数:** 646 647| 参数名 | 类型 | 必填 | 说明 | 648| ---------- | ----------- | ---- | ---------------------- | 649| inputArray | ArrayBuffer | 是 | 张量的输入数据缓冲区。 | 650 651**示例:** 652 653```ts 654import resourceManager from '@ohos.resourceManager' 655import { GlobalContext } from '../GlobalContext'; 656import mindSporeLite from '@ohos.ai.mindSporeLite'; 657import common from '@ohos.app.ability.common'; 658export class Test { 659 value:number = 0; 660 foo(): void { 661 GlobalContext.getContext().setObject("value", this.value); 662 } 663} 664let globalContext = GlobalContext.getContext().getObject("value") as common.UIAbilityContext; 665let inputName = 'input_data.bin'; 666globalContext.resourceManager.getRawFileContent(inputName).then(async (buffer : Uint8Array) => { 667 let inputBuffer = buffer.buffer; 668 let model_file = '/path/to/xxx.ms'; 669 let mindSporeLiteModel : mindSporeLite.Model = await mindSporeLite.loadModelFromFile(model_file); 670 let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs(); 671 modelInputs[0].setData(inputBuffer); 672}) 673``` 674 675## DataType 676 677张量的数据类型。 678 679**系统能力:** SystemCapability.AI.MindSporeLite 680 681| 名称 | 值 | 说明 | 682| ------------------- | ---- | ------------------- | 683| TYPE_UNKNOWN | 0 | 未知类型。 | 684| NUMBER_TYPE_INT8 | 32 | 保持Int8的类型。 | 685| NUMBER_TYPE_INT16 | 33 | 保持Int16的类型。 | 686| NUMBER_TYPE_INT32 | 34 | 保持Int32的类型。 | 687| NUMBER_TYPE_INT64 | 35 | 保持Int64的类型。 | 688| NUMBER_TYPE_UINT8 | 37 | 保持UInt8的类型。 | 689| NUMBER_TYPE_UINT16 | 38 | 保持UInt16的类型。 | 690| NUMBER_TYPE_UINT32 | 39 | 保持UInt32的类型。 | 691| NUMBER_TYPE_UINT64 | 40 | 保持UInt64的类型。 | 692| NUMBER_TYPE_FLOAT16 | 42 | 保持Float16的类型。 | 693| NUMBER_TYPE_FLOAT32 | 43 | 保持Float32的类型。 | 694| NUMBER_TYPE_FLOAT64 | 44 | 保持Float64的类型。 | 695 696## Format 697 698张量的数据排布方式。 699 700**系统能力:** SystemCapability.AI.MindSporeLite 701 702| 名称 | 值 | 说明 | 703| -------------- | ---- | --------------------- | 704| DEFAULT_FORMAT | -1 | 未知数据排布方式。 | 705| NCHW | 0 | 数据排布方式为NCHW。 | 706| NHWC | 1 | 数据排布方式为NHWC。 | 707| NHWC4 | 2 | 数据排布方式为NHWC4。 | 708| HWKC | 3 | 数据排布方式为HWKC。 | 709| HWCK | 4 | 数据排布方式为HWCK。 | 710| KCHW | 5 | 数据排布方式为KCHW。 | 711