1

创建一个应用程序并希望在其工作完成后停止 Posenet

    private sketch(p: any) {
        p.setup = () => {
            this.poseNet = ml5.poseNet(p.createCapture(p.VIDEO), {
                outputStride: 8
            });
            this.poseNet.on('pose', (results) => {
                //DO SOMETHING WITH results[0]
            });
        };
    }

已经尝试将不同的变量设置为 null

    StopKI() {
        // Terminate PoseNet when done
        this.p5 = null;
        this.poseNet = null;
        console.log('KI stopped');
    }
4

1 回答 1

1

posenet 响应视频元素中的检测。如果您删除视频元素,检测和回调可能会停止?

const video = document.getElementById("video");
video.remove();

在源代码中,如果视频元素存在,检测函数会不断调用自身

async multiPose(inputOr, cb) {
  if (this.video) {
    return tf.nextFrame().then(() => this.multiPose());
  }
}

因此,删除视频元素可能有望停止重复循环。我在源代码中没有看到更优雅的解决方案

更新

我发现可以通过调用和传递相同的回调函数poseNet.on(...)来取消事件监听器。RemoveListener它似乎在在线 P5 网络编辑器中工作:

// put the pose event callback in a variable
callback = function(results) {
    poses = results;
}

// start listening to pose detection events
poseNet.on('pose', callback);

// stop listening to pose detection events by removing the event listener
poseNet.removeListener('pose', callback);
于 2020-07-30T19:50:02.913 回答