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。
文档评论
登录后可参与评论