120 lines
3.2 KiB
JavaScript
Raw Permalink Normal View History

2025-06-06 15:17:30 +08:00
const AiSport = requirePlugin("aiSport");
const humanDetection = AiSport.humanDetection;
const BodyDebugClient = AiSport.BodyDebugClient;
Page({
data: {
isDetecting: false,
ve: null,
enhanced: false,
frameWidth: 480,
frameHeight: 640,
score: 0,
isDetected: false,
isDevelopmentMode: false,
isPushback: false
},
onLoad() {
// 初始化配置
this.setData({
ve: humanDetection.getVe(),
enhanced: humanDetection.isEnhanced()
});
// 环境判断(微信小程序环境判断方式)
const accountInfo = wx.getAccountInfoSync();
this.setData({
isDevelopmentMode: accountInfo.miniProgram.envVersion === 'develop'
});
},
onReady() {
// 获取组件引用
this.humanComp = this.selectComponent('#humanDetection');
},
async initPushbackChannel() {
if (this.debugClient)
return true;
//请务必关必调试工具电脑的防火墙保持手机与手机的畅通替换您电话的URL关闭域名校验、真机打开vconsole
let client = new BodyDebugClient('http://192.168.5.10:20231');
client.queueSize = 12;
let testOk = await client.testAsync();
if (!testOk) {
wx.showToast({
title: '与工具通信异常,请检查网络。',
icon: 'none'
});
return false;
}
console.info('与调试工具通信正常。');
await client.connectAsync();
this.debugClient = client;
return true;
},
doPushback() {
//请勿在识别帧的同时同步调用本回传接口以免丢帧或UI卡死
if (!this.debugClient)
return;
wx.showLoading({ title: '回传帧数据...' });
this.debugClient.syncing((idx, total) => {
wx.hideLoading();
if (idx >= total)
return;
wx.showLoading({
title: `同步进度${idx}/${total}`
});
});
},
onStartStop() {
if (!this.data.isDetecting) {
this.humanComp.startCapture();
this.setData({ isDetecting: true });
} else {
this.humanComp.stopCapture();
this.setData({ isDetecting: false });
this.doPushback();
}
},
onHumanDetecting(e) {
const { human, frame } = e.detail;
if (!human) {
this.setData({
score: 0,
isDetected: false
});
return;
}
this.setData({
isDetected: true,
frameWidth: human.width,
frameHeight: human.height,
score: human.score
});
//入队暂存
if (this.data.isPushback) {
this.debugClient.enqueue(frame, human);
}
},
async onPushback() {
if (this.data.isPushback) {
this.setData({ isPushback: false });
return;
}
const isConnect = await this.initPushbackChannel();
this.setData({ isPushback: isConnect });
}
})