所以基本上我在做一个关于图像识别的项目,我正在尝试使用识别器来识别一个人,当我需要识别器为我扫描图像的每个文件夹使用不同的训练集时,怪癖就来了。
遍历文件夹的代码如下:
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,(如果您需要识别器类的代码,请告诉我)。