开发
API

tt.createBytennEngineContext

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

创建并返回 BytennEngineContext 神经网络管理器,可通过该对象加载 BytennEngine 神经网络引擎。

语法

tt.createBytennEngineContext(modelName, engineConfig)

参数说明

modelName

类型默认值必填说明最低支持版本
string需要加载的神经网络名称2.29.0

engineConfig

类型默认值必填说明最低支持版本
object加载网络的配置2.29.0

engineConfig 的结构

属性类型说明
numThreadnumber工作线程数,不填默认为 1
backendstring神经网络推理使用的后端,不填默认为 auto,下列为合法值

backend 的合法值

说明最低支持版本
auto自动选择后端2.29.0
cpu使用 CPU 后端2.29.0
gpu使用 gpu 后端2.29.0

返回值

BytennEngineContext

代码示例

开发者工具中预览

const app = getApp();

Page({
  data: {
    item_class: "unknow",
    prob: 0,
  },
  onLoad: function () {
    if (this.offscreenCanvas == null) {
      this.offscreenCanvas = tt.createOffscreenCanvas();
    }
    this.utils = require("./utils");
  },
  createBytennEngine: function () {
    const engineCtx = tt.createBytennEngineContext("littleapp_mobilenet", {
      backend: "auto",
    });
    engineCtx.onLoad((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) => {
      this.engine.infer({
        dataConfig: {
          data: res.data,
          width: res.width,
          height: res.height,
          channel: 4,
          dataType: "U8",
          dataFormat: "NHWC",
        },
        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,
              },
            ],
          },
        ],
        success: (res) => {
          const classifications = res;
          if (classifications != null) {
            const top = 300;
            const left = 100;

            const embedding = new Float32Array(classifications.data);
            const topK = this.utils.topK(
              embedding,
              this.utils.IMAGENET_CLASSES,
              1
            );
            const { className, probability } = topK[0];
            this.setData({
              item_class: className,
              prob: probability,
            });
          } else {
            console.warn("no predictions!!");
          }
        },
        fail: (err) => {
          console.log(err);
        },
      });
    });
    this.listener.start();
  },
});

Bug & Tip

  • Tip: 推荐使用 auto 后端以获得最佳性能。
  • Tip: 该接口仅支持白名单用户线上使用,非白名单用户仅可在 IDE 中「预览」使用。
点击纠错
评价此篇文档