Eye Blink检测OpenCV Android

时间:2012-11-13 03:04:38

标签: android opencv

我在C ++中找到了一些如何使用OpenCV 检测一眨眼的例子。

Unhapilly很难为Android找到相同的东西。

我发现了这个:

case Sample2NativeCamera.VIEW_MODE_HOUGH_CIRCLES:
        capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);

         Imgproc.cvtColor(mRgba, mGray, Imgproc.COLOR_RGBA2GRAY, 4);

        // doing a gaussian blur prevents getting a lot of small false circles
        Imgproc.GaussianBlur(mGray, mGray, new Size(5, 5), 2, 2);

        // the lower this figure the more spurious circles you get
        // 50 looks good in CANNY, but 100 is better when converting that into Hough circles
        iCannyUpperThreshold = 100;
        Imgproc.HoughCircles(mGray, mIntermediateMat, Imgproc.CV_HOUGH_GRADIENT, 2.0, mGray.rows() / 8, 
        iCannyUpperThreshold, iAccumulator, iMinRadius, iMaxRadius);

         if (mIntermediateMat.cols() > 0)
            for (int x = 0; x < Math.min(mIntermediateMat.cols(), 10); x++) 
                {
                double vCircle[] = mIntermediateMat.get(0,x);

                if (vCircle == null)
                    break;

                pt = new Point(Math.round(vCircle[0]), Math.round(vCircle[1]));
                radius = (int)Math.round(vCircle[2]);
                // draw the found circle
                Core.circle(mRgba, pt, radius, colorRed, iLineThickness);

                // draw a cross on the centre of the circle
                DrawCross (mRgba, pt);
                }

            if (bDisplayTitle)
                ShowTitle ("Hough Circles", 1);

        break;

但我不知道如何在我的OpenCV示例代码中使用它。我有所有OpenCV示例代码。我正在玩OpenCV - 人脸检测。

我刚刚从Frontal Face改变了级联。 因此,它有效......它会检测到眼睛。

然而,我需要检测的不仅仅是眼睛的位置。 我需要检测用户何时眨眼。我看到上面的代码,但我不知道如何在我的OpenCV人脸检测代码中使用它,因为它使用级联来检测眼睛。上述方法不使用级联。那么,我该如何使用呢?

关于如何使用OpenCV检查眨眼的任何想法?

我差不多一周在谷歌和这里寻找这些信息,但我找不到适用于Android的信息。 =(

欢迎任何帮助!

4 个答案:

答案 0 :(得分:1)

如果你可以检测到眼睛,那么你可以寻找眼睛消失然后很快再现。这看起来像眨眼。如果你能检测到嘴巴,那么你可以确保它仍然保持在大致相同的位置。

答案 1 :(得分:1)

我不确切知道你的实施方式,但这段代码有助于识别圈子,在这种情况下对于学生来说。您可以使用Viola Jones获得眼睛roi(感兴趣的区域),应用Canny探测器,然后使用Hough Transformation查找圆圈(睁眼)或直线(闭眼)。

一些有用的链接:

Viola Jones:http://docs.opencv.org/modules/objdetect/doc/cascade_classification.html

霍夫变换:http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html

Canny探测器:http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.html

另一种方法是使用匹配模板,例如http://www.technolabsz.com/2013/05/eye-blink-detection-using-opencv-in.html

答案 2 :(得分:1)

谷歌发布了针对Android的 FaceDetectorApi(),它为我们提供了双眼开启的概率,使用它我们可以检测到眨眼,这是我已经完成的项目实施,它实时工作https://github.com/murali129/Eye-blink-detector

答案 3 :(得分:0)

如果你在c ++中有blink检测功能,你可以使用对android函数的Native函数(JNI)调用,而不是根据对java代码的检测返回一个布尔值True或false。