BytennEngine.inferSync
收藏
我的收藏

基础库 2.29.0 开始支持本方法,这是一个同步方法

使用神经网络对输入数据进行推理。

语法

BytennEngine.inferSync(options)

参数说明

object 类型,属性如下:

属性名类型默认值必填说明最低支持版本
dataConfigDataConfig输入数据及配置信息2.29.0
convertConfigSingleChannelConvertConfig[]从输入数据到神经网络输入的转换配置2.29.0
successfunction推理成功回调,返回推理结果2.29.0
failfunction推理失败回调,返回错误原因2.29.0
completefunction推理完成回调,不论成功失败都会触发2.29.0

dataConfig 结构

属性类型说明
dataArrayBuffer输入源数据
widthnumber输入数据的宽度
heightnumber输入数据的高度
channelnumber输入数据的通道数
batchnumber输入数据的包数,不填默认为 1
dataTypestring数据类型,类型定义见 dataType 的合法值
dataFormatstring数据组织结构,类型定义见 dataFormat 的合法值

dataType 的合法值

说明最低支持版本
'U8'8 位无符号整数2.29.0
'I8'8 位有符号整数2.29.0
'U16'16 位无符号整数2.29.0
'I16'16 位有符号整数2.29.0
'F16'16 位浮点数2.29.0
'F32'32 位浮点数2.29.0
'F64'64 位浮点数2.29.0

dataFormat 的合法值

说明最低支持版本
'NCHW'NCHW 数据格式2.29.0
'NHWC'NHWC 数据格式2.29.0

SingleChannelConvertConfig 结构

属性类型说明
outputChannelnumber对应的输出通道
normalizeFactornumber归一化因子
offsetnumber偏置因子,不填默认为 0
inputConfigInputConfig[]对应的输入通道配置

InputConfig 结构

属性类型说明
inputChannelnumber输入通道
weightnumber当前选中输入通道的权重

返回值

object 类型,具体内容与神经网络类型有关。

代码示例

开发者工具中预览

const app = getApp();

Page({
  data: {
    item_class: "unknow",
    prob: 0,
  },
  onLoad: function () {
    console.log("Welcome to Mini Code");
    if (this.offscreenCanvas == null) {
      this.offscreenCanvas = tt.createOffscreenCanvas();
    }
    this.utils = require("./utils");
  },
  createBytennEngine: function () {
    console.log("on create clicked");
    const engineCtx = tt.createBytennEngineContext("littleapp_mobilenet");
    console.log("engine context is: ", engineCtx);
    engineCtx.onLoad((engine) => {
      console.log("load result: ", engine);
      this.engine = engine;
    });
    engineCtx.onError((err) => {
      console.log("load error: ", err);
    });
    engineCtx.load();
  },
  startInfer: function () {
    if (this.cameraCtx == null) {
      this.cameraCtx = tt.createCameraContext();
    }
    this.listener = this.cameraCtx.onCameraFrame((res) => {
      const inferResult = this.engine.inferSync({
        dataConfig: {
          data: res.data,
          width: res.width,
          height: res.height,
          channel: 4,
          dataType: "U8",
          dataFormat: "NCHW",
        },
        convertConfig: [
          {
            outputChannel: 0,
            normalizeFactor: 255,
            inputConfig: [
              {
                inputChannel: 0,
                weight: 1.0,
              },
            ],
          },
          {
            outputChannel: 1,
            normalizeFactor: 255,
            inputConfig: [
              {
                inputChannel: 1,
                weight: 1.0,
              },
            ],
          },
          {
            outputChannel: 2,
            normalizeFactor: 255,
            inputConfig: [
              {
                inputChannel: 2,
                weight: 1.0,
              },
            ],
          },
        ],
      });

      const embedding = new Float32Array(inferResult.data);
      const topK = this.utils.topK(embedding, this.utils.IMAGENET_CLASSES, 1);
      const { className, probability } = topK[0];
      this.setData({
        item_class: className,
        prob: probability,
      });
    });
    this.listener.start();
  },
});

Bug & Tip

  • Tip: 输入参数会被校验,但仅会对数据大小进行校验,不会校验图片完整性。
  • Tip: 不同神经网络需要的输入格式不同,需按照网络结构传入 dataConfig、convertConfig。