我遇到过这种情况,我使用 OpenCV 来检测相机前的人脸并对这些人脸进行一些机器学习。我遇到的问题是,一旦我完成所有处理,然后去抓取下一帧,我就会得到过去,而不是现在。意思是,我将读取缓冲区内的内容,而不是实际在相机前的内容。因为我不在乎处理时哪些人脸出现在相机前面,所以我关心现在在相机前面的是什么。
我确实尝试将缓冲区大小设置为1,这确实有很大帮助,但我仍然会获得至少 3 次缓冲区读取。将 FPS 设置为 1,也无助于 100% 消除这种情况。波纹管是我的流程。
let cv = require('opencv4nodejs');
let camera = new cv.VideoCapture(camera_port);
camera.set(cv.CAP_PROP_BUFFERSIZE, 1);
camera.set(cv.CAP_PROP_FPS, 2);
camera.set(cv.CAP_PROP_POS_FRAMES , 1);
function loop()
{
//
// <>> Grab one frame from the Camera buffer.
//
let rgb_mat = camera.read();
// Do to gray scale
// Do face detection
// Crop the image
// Do some ML stuff
// Do whats needs to be done after the results are in.
//
// <>> …Run Code Online (Sandbox Code Playgroud)