我使用的是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;
}
发布于 2020-08-12 11:39:24
我不熟悉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;
}https://stackoverflow.com/questions/63362335
复制相似问题