Browser TensorflowJS-在非活动选项卡中执行推断

Browser TensorflowJS-在非活动选项卡中执行推断,browser,webcam,tensorflow.js,Browser,Webcam,Tensorflow.js,我正在使用TensorflowJS在网络摄像头提要上运行推断。代码可以找到 let模型、网络摄像头、labelContainer; //加载图像模型并设置网络摄像头 异步函数init(){ constmodelURL=URL+“model.json”; 常量metadataURL=URL+“metadata.json”; //加载模型和元数据 //请参阅API中的tmImage.loadFromFiles(),以支持来自文件选择器的文件 //或本地硬盘上的文件 //注意:姿势库将“tmImag

我正在使用TensorflowJS在网络摄像头提要上运行推断。代码可以找到


let模型、网络摄像头、labelContainer;
//加载图像模型并设置网络摄像头
异步函数init(){
constmodelURL=URL+“model.json”;
常量metadataURL=URL+“metadata.json”;
//加载模型和元数据
//请参阅API中的tmImage.loadFromFiles(),以支持来自文件选择器的文件
//或本地硬盘上的文件
//注意:姿势库将“tmImage”对象添加到窗口(window.tmImage)
model=wait tmImage.load(modelURL、metadataURL);
maxPredictions=model.getTotalClass();
//设置网络摄像头的便捷功能
const flip=true;//是否翻转网络摄像头
网络摄像头=新的tmImage.webcam(500500,翻转);//宽度,高度,翻转
等待网络摄像头。setup();//请求访问网络摄像头
等待网络摄像头。播放();
window.requestAnimationFrame(循环);
}
异步函数循环(){
webcam.update();//更新网络摄像头框架
window.requestAnimationFrame(循环);
}

即使浏览器选项卡未处于活动状态,是否也有办法进行预测?我的意思是,该选项卡未被选中,浏览器窗口可能会最小化。

问题

在下一次浏览器重新绘制之前调用
requestAnimationFrame
。由于选项卡位于后台,因此不会重新绘制。引用Chrome:

根据,当页面位于后台时,Chrome不会调用
requestAnimationFrame()

解决方案

您可以使用函数代替
requestAnimationFrame

setTimeout(循环,20);//固定20毫秒延迟

然而,Chrome也会在10秒后开始限制背景标签。通过使用标志“禁用后台计时器节流”启动Chrome,可以解决该问题。有关此后台限制的更多信息,请查看有关Chrome开发者的信息。

活动选项卡是什么意思?你能通过添加相关代码来缩小你的问题吗?@edkevek没问题,我已经更新了帖子
<script type="text/javascript">
    let model, webcam, labelContainer;

    // Load the image model and setup the webcam
    async function init() {
        const modelURL = URL + "model.json";
        const metadataURL = URL + "metadata.json";

        // load the model and metadata
        // Refer to tmImage.loadFromFiles() in the API to support files from a file picker
        // or files from your local hard drive
        // Note: the pose library adds "tmImage" object to your window (window.tmImage)
        model = await tmImage.load(modelURL, metadataURL);
        maxPredictions = model.getTotalClasses();

        // Convenience function to setup a webcam
        const flip = true; // whether to flip the webcam
        webcam = new tmImage.Webcam(500, 500, flip); // width, height, flip
        await webcam.setup(); // request access to the webcam
        await webcam.play();
        window.requestAnimationFrame(loop);

    }

    async function loop() {
        webcam.update(); // update the webcam frame
        window.requestAnimationFrame(loop);
    }


</script>