EigenFace 实现:在 Java 中使用 OpenCV3

Posted

技术标签:

【中文标题】EigenFace 实现:在 Java 中使用 OpenCV3【英文标题】:EigenFace implementation: in Java using OpenCV3 【发布时间】:2016-02-02 09:51:46 【问题描述】:

我想通过网络摄像头实时识别人脸。我一直在努力通过网络摄像头检测人脸,但是在 Java (Netbeans) 中实现特征人脸算法时遇到了麻烦。

我已经使用以下代码实现了人脸检测:-

private DaemonThread myThread = null;
int count = 0;
VideoCapture webSource = null;

Mat frame = new Mat();
MatOfByte mem = new MatOfByte();
CascadeClassifier faceDetector = new CascadeClassifier(ScannerGUI.class.getResource("haarcascade_frontalface_alt.xml").getPath().substring(1));
MatOfRect faceDetections = new MatOfRect();


class DaemonThread implements Runnable

protected volatile boolean runnable = false;

@Override
public  void run()

    synchronized(this)
    
        while(runnable)
        
            if(webSource.grab())
            
            try
                    
                        webSource.retrieve(frame);
            //Highgui.imencode(".bmp", frame, mem);
                        Graphics g=jPanel1.getGraphics();
                        faceDetector.detectMultiScale(frame, faceDetections);

                        for (Rect rect : faceDetections.toArray()) 
                         Imgproc.rectangle(frame, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 255, 0),2);
                        

                        Imgcodecs.imencode(".bmp", frame, mem);
            Image im = ImageIO.read(new ByteArrayInputStream(mem.toArray()));
            BufferedImage buff = (BufferedImage) im;
            if (g.drawImage(buff, 0, 0, getWidth(), getHeight() -150 , 0, 0, buff.getWidth(), buff.getHeight(), null))

            if(runnable == false)
                        
                System.out.println("Going to wait()");
                this.wait();
            
         
         catch(Exception ex)
                     
            System.out.println("Error");
                     
            
        
    
 

现在我想先将检测到的人脸保存在特征人脸中,然后再识别这张人脸。

有人可以帮我解决这个问题吗?我在网上彻底搜索了 Java 中的 Eigen face 实现,但找不到任何有用的东西。

请帮助我解决这个问题,因为我是 OpenCV 的新手,也是我的大学项目。

【问题讨论】:

OpenCV 已经提供了eigenface implementation。我不知道java包装器是否支持它,但你总是可以调用本机C++代码。 一切尽在docs 【参考方案1】:

要使用 contrib 模块(包含 Java 的 org.opencv.face 包)从源代码构建 OpenCV,请参阅 this question and answer。

使用 contrib 模块构建 JAR 后,您可以像这样实例化 EigenFaceRecognizer:

FaceRecognizer 模型 = org.opencv.face.Face.createEigenFaceRecognizer();

【讨论】:

以上是关于EigenFace 实现:在 Java 中使用 OpenCV3的主要内容,如果未能解决你的问题,请参考以下文章

Eigenface与PCA人脸识别算法实验

EigenFace的使用 python

eigenface资料整合

如何修改scikit-learn的eigenface人脸识别示例

人工智能机器学习之运用特征脸(eigenface)和sklearn.svm.SVC进行人脸识别

java 使用优先级队列管理元素中值的数据结构的Java实现(在O(1)中查看,在O(logN)中插入/删除)