1

所以基本上我在做一个关于图像识别的项目,我正在尝试使用识别器来识别一个人,当我需要识别器为我扫描图像的每个文件夹使用不同的训练集时,怪癖就来了。

遍历文件夹的代码如下:

public class FileIterator {
int ft; int et; int at;
OpenCVFaceRecognizer recogniser;
public FileIterator(int ft, int et, int at){
    this.ft=ft;
    this.et=et;
    this.at=at;
}

public void main() {
    OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
File[] files = new File("C:/Users/David/Documents/NetBeansProjects/Honours Project/storage").listFiles();

JOptionPane jP=new JOptionPane();
jP.showMessageDialog(jP, "Please look at the camera");

   try{
        grabber.start();
             System.out.println("Grabbing");
      try {
            Thread.sleep(1000);
        } catch (InterruptedException ex) {
            Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        IplImage img = grabber.grab();
        if (img != null) {
           try{
            BufferedImage img1 =img.getBufferedImage();
             File image = new File("recognize.jpg");
            ImageIO.write(img1, "jpg", image);
                System.out.println("Image written");
           }
             catch(Exception x){
                 x.printStackTrace();
             }
             grabber.stop();

        }

         } catch (Exception e) {
            e.printStackTrace();
        }
showFiles(files);
}

public void showFiles(File[] files) {
for (File file : files) {
    if (file.isDirectory()) {
        System.out.println("\n---- Directory: " + file.getName()+" ----");
        // showFiles(file.listFiles());
        recogniser = new OpenCVFaceRecognizer ("storage/"+file.getName(),"recognize.jpg",ft,et,at);           
    } else {
        System.out.println("File: " + file.getName());
    }
}
}
}

因此,识别器类将训练目录和图像作为参数进行比较(其余为阈值设置)。我为每个循环提供一个目录并保持图像识别相同。

现在识别器无论如何都识别出它训练过的人,即即使文件中的人与图片中的人不同,他们仍然会被识别并允许通过。有谁知道如何解决这个问题?

谢谢

ps,(如果您需要识别器类的代码,请告诉我)。

4

0 回答 0