6

有没有人有任何想法或步骤或算法来使用 javascript 和 HTML5 对 2d 图像执行眼睛检测?

我已经将 RGB 转换为 YCbCr 颜色空间

现在我需要一些关于眼睛提取的帮助

function hellow(e)
{
    var r,g,b,a,gray;
    var imageData = ctxBg.createImageData(gameWidth,gameHeight);
    var das =imageData.data;

    for(var i=0;i<=800;i++)
    {
        for(var j=0;j<=640;j++)
        {
            var d = (j*imageData.width+i)*4;
            var helow = ctxBg.getImageData(i,j,1,1);
            r=helow.data[0];
            g=helow.data[1];
            b=helow.data[2];
            a=helow.data[3];
            das[d]=Math.round((0.299 *r) - (0.168935*g) + (0.499813*b));
            das[d+1]=Math.round((0.587 *r) - (0.331665*g) + (0.418531*b));
            das[d+2]=Math.round((0.114 *r) - (0.50059*g) + (0.081282*b));
            das[d+3]=a;
            console.log(das[d]+":"+das[d+1]+":"+das[d+2]);
        }
    }
    ctxBg.putImageData(imageData,0,0);
    //console.log('c');
    e.preventDefault(); 
}

这是我将 rgb 转换为 YCbCr 颜色空间的代码。

请帮助我改进代码以加快执行速度。

4

6 回答 6

7

我最近试图解决同样的问题是:

  1. 缩小处理后的图像以获得不错的性能(我将所有内容缩小到 320px 宽度)

  2. 使用核心计算机视觉库检测图像中的人脸 - https://github.com/liuliu/ccv

  3. 基于检测到的面部矩形信息使用 HAAR 对象检测器检测眼睛(它具有仅用于眼睛检测的级联 - https://github.com/inspirit/jsfeat

对于第 2 步,我还使用了 JSFEAT 库中的“灰度”和“equalize_histogram”。

此外,如果第 3 步失败,您可以尝试猜测眼睛的位置(取决于您要达到的精度)。

这个工作流程给了我令人满意的结果和性能。它在台式机(iMac 上约 500 毫秒)和移动设备(iphone 4 上使用网络摄像头图像约 3000 毫秒)上对其进行了测试。不幸的是,此时我无法发布指向工作示例的链接,但是一旦我在那里有了一些东西,我就会发布到 github 的链接。

于 2013-09-25T16:54:43.020 回答
4

您可以使用tracking.js从相机捕获的真实场景中使用各种技术检测眼睛。

将脚本与库一起导入并将画布添加到 HTML 后,您可以执行以下操作:

var videoCamera = new tracking.VideoCamera().hide().render().renderVideoCanvas(),
    ctx = videoCamera.canvas.context;

videoCamera.track({
    type: 'human',
    data: 'eye',
    onFound: function(track) {
        for (var i = 0, len = track.length; i < len; i++) {
            var rect = track[i];
            ctx.strokeStyle = "rgb(0,255,0)";
            ctx.strokeRect(rect.x, rect.y, rect.size, rect.size);
        }
    }
});

上面的代码来自库中的一个示例。希望对你有帮助

于 2013-09-08T06:24:31.360 回答
3

我真的不知道是否仅针对眼睛检测实现了特定的东西,但是对于面部检测,您应该关注一个名为 Core Computer Vision Library 的库,该库托管在 github 上:https ://github.com/liuliu/ccv .

另一种可能性是https://github.com/inspirit/jsfeat,其中人脸和像素边缘检测是使用不同的算法实现的,例如 Lucas-Kanade 光流和 HAAR 对象检测器。

请阅读这篇文章了解更多技术:人脸检测 javascript/html5/flash

于 2013-01-03T08:14:03.757 回答
1

我敢说,亮度仅足以检测眼睛/面部位置 - 因此您可以通过滴加 CbCr 的计算来使您的代码更快。通常使用 Haar 级联查找 yeas / faces:

http://en.wikipedia.org/wiki/Haar_wavelet

于 2013-01-03T07:57:28.090 回答
1

在纯 javascript/html5 中有一个使用HAAR.js库的眼睛检测示例(使用自定义眼睛 haar openCV 级联)(ps 我是作者)。

该项目已停止,没有添加任何新功能,但它按照它所说的做了。

于 2014-12-30T15:11:03.030 回答
0

对于使用 OpenCV.js 进行眼睛检测,请使用 Javascript 和 OpenCV 检查此人眼检测

let faceCascadeFile = 'haarcascade_frontalface_default.xml';

let eyeCascadeFile = 'haarcascade_eye.xml';

utils.createFileFromUrl(faceCascadeFile, faceCascadeFile, () => {

    utils.createFileFromUrl(eyeCascadeFile, eyeCascadeFile, () => {

    console.log('eye cascade ready');

    })
})

例子

眼睛检测

于 2019-11-24T15:35:46.490 回答