0

我正在使用 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;
}

4

1 回答 1

0

我不熟悉 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;
}
于 2020-08-12T03:39:24.340 回答