BytennEngine.inferSync收藏我的收藏
收藏
我的收藏
基础库 2.29.0 开始支持本方法,这是一个同步方法
使用神经网络对输入数据进行推理。
语法
BytennEngine.inferSync(options)
参数说明
object 类型,属性如下:
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
---|---|---|---|---|---|
dataConfig | DataConfig | 是 | 输入数据及配置信息 | 2.29.0 | |
convertConfig | SingleChannelConvertConfig[] | 是 | 从输入数据到神经网络输入的转换配置 | 2.29.0 | |
success | function | 否 | 推理成功回调,返回推理结果 | 2.29.0 | |
fail | function | 否 | 推理失败回调,返回错误原因 | 2.29.0 | |
complete | function | 否 | 推理完成回调,不论成功失败都会触发 | 2.29.0 |
dataConfig 结构
属性 | 类型 | 说明 |
---|---|---|
data | ArrayBuffer | 输入源数据 |
width | number | 输入数据的宽度 |
height | number | 输入数据的高度 |
channel | number | 输入数据的通道数 |
batch | number | 输入数据的包数,不填默认为 1 |
dataType | string | 数据类型,类型定义见 dataType 的合法值 |
dataFormat | string | 数据组织结构,类型定义见 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 结构
属性 | 类型 | 说明 |
---|---|---|
outputChannel | number | 对应的输出通道 |
normalizeFactor | number | 归一化因子 |
offset | number | 偏置因子,不填默认为 0 |
inputConfig | InputConfig[] | 对应的输入通道配置 |
InputConfig 结构
属性 | 类型 | 说明 |
---|---|---|
inputChannel | number | 输入通道 |
weight | number | 当前选中输入通道的权重 |
返回值
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。
该文档是否有帮助?