gpt4 book ai didi

node.js - 使用OpenCV和Node.js进行人脸检测

转载 作者:行者123 更新时间:2023-12-02 17:11:49 27 4
gpt4 key购买 nike

我尝试使用nodejs和opencv进行面部检测。

var cv = require('opencv');

// camera properties
var camWidth = 320;
var camHeight = 240;
var camFps = 10;
var camInterval = 1000 / camFps;

// face detection properties
var rectColor = [0, 255, 0];
var rectThickness = 1;

// initialize camera
var camera = new cv.VideoCapture(0);
camera.setWidth(camWidth);
camera.setHeight(camHeight);

module.exports = function (socket) {
setInterval(function() {
sTime = new Date();
camera.read(function(err, im) {
if (err) throw err;
im.detectObject('/usr/lib/node_modules/opencv/data/lbpcascades/lbpcascade_frontalface.xml', {}, function(err, faces) {
if (err) throw err;

for (var i = 0; i < faces.length; i++) {
face = faces[i];
im.rectangle([face.x, face.y], [face.width, face.height], rectColor, rectThickness);
}
socket.emit('frame', { buffer: im.toBuffer() });
});
});
}, camInterval);
};
im.detectObject执行需要80/120秒,随着时间的流逝,它会在相机看到的实际图像与我在PC上看到的带有脸部矩形的图像之间产生很大的延迟。我该如何改善并删除“滞后”?

最佳答案

当您获得第一个比赛时,您将获得一组ROI。此时,您可以停止使用检测算法,而开始使用跟踪算法(通过运动估计,它会更好地工作)。

如果您不希望/不需要跟踪算法的性能,则可以使用模板匹配算法。将检测到的脸部用作模板,将当前帧用作目标图像。

我在C++项目中做了同样的事情。这是我用来“跟踪”检测到的面部的代码(存储在_camFaces中,它与您的“面部”数组具有相同的作用)。

在触发检测并且_camFaces已填充一组对之后,将执行以下代码。
每对包括:

  • 一个矩形,其中包含roi的尺寸和位置
    在上一帧中。
  • ROI(以灰度表示)。该ROi将用作模板匹配算法的模板。


  • cv::Mat1b grayFrame = Preprocessor::gray(frame)
    for (auto& pair : _camFaces) {
    cv::Mat1f dst;
    cv::matchTemplate(grayFrame, pair.second, dst, CV_TM_SQDIFF_NORMED);

    double minval, maxval;
    cv::Point minloc, maxloc;
    cv::minMaxLoc(dst, &minval, &maxval, &minloc, &maxloc);

    if (minval <= 0.2) {
    pair.first.x = minloc.x;
    pair.first.y = minloc.y;
    noneTracked = false;
    } else {
    pair.first.x = pair.first.y = pair.first.width = pair.first.height = 0;
    }
    }
    // draw rectangles
    cv::Mat frame2;
    frame.copyTo(frame2);

    for (const auto& pair : _camFaces) {
    cv::rectangle(frame2, pair.first, cv::Scalar(255, 255, 0), 2);
    }
    _updateCamView(frame2);

    关于node.js - 使用OpenCV和Node.js进行人脸检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35923870/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com