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