Java OpenCV使用“找到睁开的眼睛”;haarcascade“u eye.xml”;在爪哇

Java OpenCV使用“找到睁开的眼睛”;haarcascade“u eye.xml”;在爪哇,java,eclipse,opencv,opencv3.1,Java,Eclipse,Opencv,Opencv3.1,我将opencv与java一起用于一个项目,我只需要检测面部图像的睁眼。但对于我使用的java代码,它可以检测闭着的眼睛和睁开的眼睛。下面是我的代码 这是如何在eclipse中设置OpenCV的url- import org.opencv.core.core; 导入org.opencv.core.Mat; 导入org.opencv.core.MatOfRect;导入org.opencv.core.Size; 导入org.opencv.objdetect.CascadeClassifier; 导入

我将opencv与java一起用于一个项目,我只需要检测面部图像的睁眼。但对于我使用的java代码,它可以检测闭着的眼睛和睁开的眼睛。下面是我的代码

这是如何在eclipse中设置OpenCV的url-

import org.opencv.core.core;
导入org.opencv.core.Mat;
导入org.opencv.core.MatOfRect;导入org.opencv.core.Size;
导入org.opencv.objdetect.CascadeClassifier;
导入org.opencv.imgcodecs.imgcodecs;
公共课你好{
公共静态void main(字符串[]args)
{
System.loadLibrary(Core.NATIVE\u LIBRARY\u NAME);
System.out.println(“\n运行面检测器”);
CascadeClassifier faceDetector=新的CascadeClassifier(“C:\\opencv\\sources\\data\\haarcascade\\haarcascade\u frontalface\u alt.xml”);
CascadeClassifier eyeDetector=新的CascadeClassifier(“C:\\opencv\\sources\\data\\haarcascades\\haarcascade\u eye.xml”);
Mat image=Imgcodecs.imread(“E:/hasah/PPHOTOO/seanciminoeyesclosedlar.jpg”);
弦面;
弦眼;
MatOfRect faceDetections=新的MatOfRect();
MatOfRect眼睛检测=新的MatOfRect();
垫面;
Mat-crop=null;
垫圆=新垫();
面部检测器。检测多尺度(图像、面部检测);
System.out.println(“面检测无数组大小:+faceDetections.toArray().length”);
对于(int i=0;i

}

您可以看看这个,非常感谢@ZdaR。它确实帮助了我:)。但这取决于图像的质量。对于某些图像,它工作得很好,而对于某些图像,它却没有:(但这不是代码的问题。有没有办法编辑XML或其他东西并修复它。它会检测到部分闭上的眼睛也是睁开的。如果你想完全控制haar cascade,那么你可以尝试,或者如果你愿意安装其他外部库,那么你可以寻找可以给你68个面部标志的方法,你可以sily写一些逻辑来检测眼睛是否睁开或闭上。非常感谢。我们会研究这些
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;import org.opencv.core.Size;
import org.opencv.objdetect.CascadeClassifier;
import org.opencv.imgcodecs.Imgcodecs;


public class Hello {

 public static void main( String[] args )
   {



        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        System.out.println("\nRunning FaceDetector");

        CascadeClassifier faceDetector = new CascadeClassifier("C:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml");
        CascadeClassifier eyeDetector = new CascadeClassifier("C:\\opencv\\sources\\data\\haarcascades\\haarcascade_eye.xml");

        Mat image = Imgcodecs.imread("E:/hasah/PPHOTOO/seanciminoeyesclosedlar.jpg");


        String faces;
        String eyes;


        MatOfRect faceDetections = new MatOfRect();
        MatOfRect eyeDetections = new MatOfRect();

        Mat face;
        Mat crop = null;
        Mat circles = new Mat();
        faceDetector.detectMultiScale(image, faceDetections);

   System.out.println("face detectino array size: " + faceDetections.toArray().length);
   for (int i = 0; i< faceDetections.toArray().length; i++){

            faces = "Face"+i+".png";

             face = image.submat(faceDetections.toArray()[i]);
             crop = face.submat(4, (2*face.width())/3, 0, face.height());
            Imgcodecs.imwrite(faces, face);
             eyeDetector.detectMultiScale(crop, eyeDetections, 1.1, 2, 0,new Size(30,30), new Size()); 

             if(eyeDetections.toArray().length ==0){

                 System.out.println(" Not a face" + i);
             }else{

                 System.out.println("Face with " + eyeDetections.toArray().length + "eyes" );

                 for (int j = 0; j< eyeDetections.toArray().length ; j++){

                    System.out.println("Eye" );
                    Mat eye = crop.submat(eyeDetections.toArray()[j]);
                    eyes = "Eye"+j+".png";
                    Imgcodecs.imwrite(eyes, eye);

                 }
             }
         }

   }