使用javascript和html5进行眼睛检测

时间:2013-01-03 07:48:24

标签: javascript html5 eye-detection

有没有人有任何想法,步骤或算法可以使用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颜色空间的代码。

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

6 个答案:

答案 0 :(得分:6)

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

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

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

  3. 根据检测到的脸部矩形信息,使用HAAR物体探测器检测眼睛(仅用于眼睛的级联检测 - https://github.com/inspirit/jsfeat

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

    此外,如果步骤3失败,您可以尝试猜测眼睛的位置(取决于您的准确度有多高)。

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

答案 1 :(得分: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);
        }
    }
});

上面的代码来自库中的一个示例。 希望能帮到你

答案 2 :(得分:3)

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

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

请阅读此帖以获取更多技巧:Face detection javascript/html5/flash

答案 3 :(得分:2)

我敢说亮度只能足以检测眼睛/脸部位置 - 所以你可以通过滴加CbCr的计算来加快你的代码。人们通常使用Haar级联来寻找年份/面孔:

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

答案 4 :(得分:2)

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

该项目已停止,未添加任何新功能,但它完成了所述内容。

答案 5 :(得分:1)

要使用OpenCV.js进行眼睛检测,请选中此Human Eye Detection using Javascript and 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');

    })
})

示例

eye detection