使用javaCV和netbeans进行人脸识别

时间:2016-07-12 08:41:08

标签: java image-processing netbeans opencv3.0 javacv

应用程序应该能够使用网络摄像头将图像face_1_01.png,face_1_02.png,face_2_01.png等保存在名为training images的文件夹中,然后应用程序应该能够遍历该文件夹中的所有图像并识别当前出现在网络摄像头中的面部/面部返回在面部上绘制的矩形上方的图像名称。

here就是一个例子。不幸的是,视频中的应用程序不是开源的。

here是以下代码的链接。

    import com.googlecode.javacv.cpp.opencv_core;
    import static com.googlecode.javacv.cpp.opencv_highgui.*;
    import static com.googlecode.javacv.cpp.opencv_core.*;
    import static com.googlecode.javacv.cpp.opencv_imgproc.*;
    import static com.googlecode.javacv.cpp.opencv_contrib.*;
    import java.io.File;
    import java.io.FilenameFilter;

    public class OpenCVFaceRecognizer {

    public static void main(String[] args) {

    String trainingDir = args[0];
    IplImage testImage = cvLoadImage(args[1]);

    File root = new File(trainingDir);

    FilenameFilter pngFilter = new FilenameFilter() {
        public boolean accept(File dir, String name) {
            return name.toLowerCase().endsWith(".png");
        }
    };

    File[] imageFiles = root.listFiles(pngFilter);

    MatVector images = new MatVector(imageFiles.length);

    int[] labels = new int[imageFiles.length];

    int counter = 0;
    int label;

    IplImage img;
    IplImage grayImg;

    for (File image : imageFiles) {
        img = cvLoadImage(image.getAbsolutePath());

        label = Integer.parseInt(image.getName().split("\\-")[0]);

        grayImg = IplImage.create(img.width(), img.height(), IPL_DEPTH_8U, 1);

        cvCvtColor(img, grayImg, CV_BGR2GRAY);

        images.put(counter, grayImg);

        labels[counter] = label;

        counter++;
    }

    IplImage greyTestImage = IplImage.create(testImage.width(), testImage.height(), IPL_DEPTH_8U, 1);

    FaceRecognizer faceRecognizer = createFisherFaceRecognizer();
    // FaceRecognizer faceRecognizer = createEigenFaceRecognizer();
    // FaceRecognizer faceRecognizer = createLBPHFaceRecognizer()

    faceRecognizer.train(images, labels);

    cvCvtColor(testImage, greyTestImage, CV_BGR2GRAY);

    int predictedLabel = faceRecognizer.predict(greyTestImage);

    System.out.println("Predicted label: " + predictedLabel);
    }
    }

我无法弄清楚在哪里指定包含所有训练图像的目录的路径名。

1 个答案:

答案 0 :(得分:0)

String trainingDir = args[0];

程序从第一个命令行参数读取traningDir。

你可以通过控制台运行(例如linux中的终端或Windows中的DOS),如

java OpenCVFaceRecognizer /path/to/training/Dir

或在IDE中添加/ path / to / traning / Dir into" run"这个项目的参数。在后一种方式中,您可以点击"运行"按钮执行。

相关问题