You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何停止/终止ML5 PoseNet?任务完成后停止PoseNet的实现疑问

正确停止ML5 PoseNet的方法

我来帮你搞定这个PoseNet停止的问题~你之前直接把变量设为null的方式不太够,因为PoseNet还在后台监听视频流的姿态数据,而且摄像头捕获也没停止,浏览器可能还在占用摄像头资源。下面是完整的停止步骤:

核心步骤说明

要彻底停止PoseNet,需要做三件事:

  • 移除PoseNet的pose事件监听,让它不再处理新的姿态数据
  • 停止视频捕获实例,关闭摄像头访问
  • 最后再清理相关变量,避免内存泄漏

修改后的代码实现

首先,你需要在setup里保存视频捕获的实例(之前的代码里没存,这是关键):

private sketch(p: any) { 
  p.setup = () => { 
    // 保存视频捕获实例,后面用来停止摄像头
    this.video = p.createCapture(p.VIDEO);
    this.poseNet = ml5.poseNet(this.video, { outputStride: 8 }); 
    this.poseNet.on('pose', (results) => { 
      //DO SOMETHING WITH results[0] 
    }); 
  }; 
}

然后更新你的StopKI方法,加入完整的停止逻辑:

StopKI() { 
  // 1. 移除PoseNet的pose事件监听
  if (this.poseNet) {
    this.poseNet.removeListener('pose');
  }

  // 2. 停止视频捕获,关闭摄像头
  if (this.video) {
    this.video.stop();
  }

  // 3. 清理所有相关变量
  this.poseNet = null;
  this.video = null;
  this.p5 = null;

  console.log('KI stopped'); 
}

额外说明

  • removeListener是ml5 PoseNet实例自带的方法,用来取消之前通过on绑定的事件监听,确保PoseNet不再接收新的姿态数据。
  • video.stop()会停止p5.js的视频捕获,通知浏览器释放摄像头资源,这一步很重要,不然用户的摄像头会一直处于被占用状态。
  • 最后清理变量是为了帮助垃圾回收,避免不必要的内存占用。

内容的提问来源于stack exchange,提问作者Felix Brüggemann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:02:50