Tensorflow JS - Выполнить вывод на неактивной вкладке - PullRequest
1 голос
/ 05 марта 2020

Я выполняю вывод по каналу веб-камеры, используя Tensorflow JS. Код можно найти здесь .

<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>

Можно ли делать прогнозы, даже если у вас не активна вкладка браузера? Под этим я подразумеваю, что вкладка не выбрана, и окно браузера может быть свернуто.

1 Ответ

1 голос
/ 09 марта 2020

Проблема

requestAnimationFrame вызывается перед следующей перерисовкой браузера. Поскольку вкладка находится в фоновом режиме, перерисовка не происходит. Цитировать Chrome Обновления разработчика :

Согласно документации , Chrome не вызывает requestAnimationFrame(), когда страница находится в фоновом режиме.

Решение

Вместо использования requestAnimationFrame вместо него можно использовать функцию setTimeout:

setTimeout(loop, 20); // fixed 20ms delay

Однако Chrome также начнет регулировать фоновые вкладки через 10 секунд. Эту проблему можно решить, запустив Chrome с флагом --disable-background-timer-throttling. Для получения дополнительной информации об этом фоновом регулировании см. Информацию о Бюджетном фоновом таймере регулирования разработчиками Chrome.

...