问题描述
我正在使用ml5.js PoseNet。我有一个获取图像的函数,并且试图返回PoseNet生成的单个姿势。我也想返回此值作为承诺。使用下面的toReturn,它会在姿势完成生成之前返回,因此是不确定的(因为我想是异步特性)。我该如何解决?
async function addPose(img){
let options = {
imageScaleFactor: 1,minConfidence: 0.1
}
let poseNet = ml5.poseNet(modelReady,options);
function modelReady(){
console.log('model loaded');
let result = poseNet.singlePose(img); // a promise of JSON value
// return result;
}
let toReturn;
poseNet.on('pose',function(results){
toReturn = results[0] // the JSON value
// return results[0]
})
return toReturn;
}
解决方法
我对ML5.js不熟悉,但是您应该使用await强制它等待它返回,然后再执行其他操作。
例如:
let result = await poseNet.singlePose(img);
要在加载模型后在可调用函数中获得此功能,应重新洗改代码:
let modelLoaded = false;
async function loadModel() {
let options = {
imageScaleFactor: 1,minConfidence: 0.1
}
let poseNet = ml5.poseNet(modelReady,options);
}
loadeModel();
function modelReady(){
console.log('model loaded');
modelLoaded = true;
// Feel free to register for events if you want:
poseNet.on('pose',function(results){
console.log(results[0]);
});
}
function checkImage(img) {
if (modelLoaded) {
let result = poseNet.singlePose(img);
return result;
}
return false;
}