JavaCV人脸识别训练

时间:2019-10-16 10:08:44

标签: java android opencv javacv

我创建了一个面部检测应用程序,其中opencv JavaCam捕获帧中的面部并对其进行裁剪,一旦检测到面部,如何修改下面的代码来训练检测到的面部并将训练后的图像存储到SD相机中识别我可以参考经过训练的图像?

String trainingDir = "";
IplImage testImage = cvLoadImage("");

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());
   String temp= image.getName();
   label = Integer.parseInt(temp.charAt(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);

0 个答案:

没有答案