基本的に私は画像認識に関するプロジェクトを行っており、認識機能を使用して人を識別しようとしていますが、認識機能が画像をスキャンするフォルダーごとに異なるトレーニングセットを使用する必要がある場合に、癖が生じます。
フォルダーを反復処理するためのコードは次のとおりです。
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、(認識クラスのコードが必要な場合はお知らせください)。