Search in sources :

Example 1 with FaceRecognizer

use of org.bytedeco.opencv.opencv_face.FaceRecognizer in project blog_demos by zq2599.

the class Train3 method train.

private void train(String[][] sources, String outputPath) throws IOException {
    int totalImageNums = 0;
    for (String[] oneKindFaces : sources) {
        totalImageNums += oneKindFaces.length;
    }
    MatVector imageIndexMatMap = new MatVector(totalImageNums);
    // 这里面用来记录每一张照片的类型
    Mat lables = new Mat(totalImageNums, 1, CV_32SC1);
    IntBuffer lablesBuf = lables.createBuffer();
    imageIndexMatMap.put(0, read(sources[0][0]));
    imageIndexMatMap.put(1, read(sources[0][1]));
    imageIndexMatMap.put(2, read(sources[1][0]));
    imageIndexMatMap.put(3, read(sources[1][1]));
    imageIndexMatMap.put(4, read(sources[2][0]));
    imageIndexMatMap.put(5, read(sources[2][1]));
    lablesBuf.put(0, 11);
    lablesBuf.put(1, 11);
    lablesBuf.put(2, 33);
    lablesBuf.put(3, 33);
    lablesBuf.put(4, 66);
    lablesBuf.put(5, 66);
    /*
        int kindIndex = 0;
        int imageIndex = 0;

        String base = "E:\\temp\\202112\\13\\";

        for(String[] oneOfFaces : sources) {
            for(String face : oneOfFaces) {
                System.out.println("处理第[" + imageIndex + "]张");
                // imageIndex代表第几张,kindIndex代表第几类
                // 将每一张的类型存储在lablesBuf中
                lablesBuf.put(imageIndex, (byte)kindIndex);

                Mat faceMat = opencv_imgcodecs.imread(face,IMREAD_GRAYSCALE);

                resize(faceMat, faceMat, new Size(RESIZE_WIDTH, RESIZE_HEIGHT));

                opencv_imgcodecs.imwrite(base + imageIndex + ".png", faceMat);



                imageIndexMatMap.put(imageIndex, faceMat);

                imageIndex++;
            }

            kindIndex++;
        }
        */
    FaceRecognizer faceRecognizer = FisherFaceRecognizer.create();
    faceRecognizer.train(imageIndexMatMap, lables);
    faceRecognizer.save(outputPath);
    faceRecognizer.close();
}
Also used : Mat(org.bytedeco.opencv.opencv_core.Mat) IntBuffer(java.nio.IntBuffer) FaceRecognizer(org.bytedeco.opencv.opencv_face.FaceRecognizer) FisherFaceRecognizer(org.bytedeco.opencv.opencv_face.FisherFaceRecognizer) MatVector(org.bytedeco.opencv.opencv_core.MatVector)

Example 2 with FaceRecognizer

use of org.bytedeco.opencv.opencv_face.FaceRecognizer in project blog_demos by zq2599.

the class Train5 method train.

private void train(String[] dirs, String outputPath) throws IOException {
    int totalImageNums = 0;
    for (String dir : dirs) {
        List<String> files = folderMethod1(dir);
        totalImageNums += files.size();
    }
    System.out.println("total : " + totalImageNums);
    MatVector imageIndexMatMap = new MatVector(totalImageNums);
    // 这里面用来记录每一张照片的类型
    Mat lables = new Mat(totalImageNums, 1, CV_32SC1);
    IntBuffer lablesBuf = lables.createBuffer();
    int kindIndex = 1;
    int imageIndex = 0;
    for (String dir : dirs) {
        List<String> files = folderMethod1(dir);
        for (String file : files) {
            imageIndexMatMap.put(imageIndex, read(file));
            lablesBuf.put(imageIndex, kindIndex);
            imageIndex++;
        }
        kindIndex++;
    }
    FaceRecognizer faceRecognizer = FisherFaceRecognizer.create();
    faceRecognizer.train(imageIndexMatMap, lables);
    faceRecognizer.save(outputPath);
    faceRecognizer.close();
}
Also used : Mat(org.bytedeco.opencv.opencv_core.Mat) IntBuffer(java.nio.IntBuffer) FaceRecognizer(org.bytedeco.opencv.opencv_face.FaceRecognizer) FisherFaceRecognizer(org.bytedeco.opencv.opencv_face.FisherFaceRecognizer) MatVector(org.bytedeco.opencv.opencv_core.MatVector)

Example 3 with FaceRecognizer

use of org.bytedeco.opencv.opencv_face.FaceRecognizer in project blog_demos by zq2599.

the class TrainFromDirectory method train.

/**
 * 从指定目录下
 * @param dirs
 * @param outputPath
 * @throws IOException
 */
private void train(String[] dirs, String outputPath) throws IOException {
    int totalImageNums = 0;
    // 统计每个路径下的照片数,加在一起就是照片总数
    for (String dir : dirs) {
        List<String> files = getAllFilePath(dir);
        totalImageNums += files.size();
    }
    System.out.println("total : " + totalImageNums);
    // 这里用来保存每一张照片的序号,和照片的Mat对象
    MatVector imageIndexMatMap = new MatVector(totalImageNums);
    Mat lables = new Mat(totalImageNums, 1, CV_32SC1);
    // 这里用来保存每一张照片的序号,和照片的类别
    IntBuffer lablesBuf = lables.createBuffer();
    // 类别序号,从1开始,dirs中的每个目录就是一个类别
    int kindIndex = 1;
    // 照片序号,从0开始
    int imageIndex = 0;
    // 每个目录下的照片都遍历
    for (String dir : dirs) {
        // 得到当前目录下所有照片的绝对路径
        List<String> files = getAllFilePath(dir);
        // 处理一个目录下的每张照片,它们的序号不同,类别相同
        for (String file : files) {
            // imageIndexMatMap放的是照片的序号和Mat对象
            imageIndexMatMap.put(imageIndex, read(file));
            // bablesBuf放的是照片序号和类别
            lablesBuf.put(imageIndex, kindIndex);
            // 照片序号加一
            imageIndex++;
        }
        // 每当遍历完一个目录,才会将类别加一
        kindIndex++;
    }
    // 实例化人脸识别类
    FaceRecognizer faceRecognizer = FisherFaceRecognizer.create();
    // 训练,入参就是图片集合和分类集合
    faceRecognizer.train(imageIndexMatMap, lables);
    // 训练完成后,模型保存在指定位置
    faceRecognizer.save(outputPath);
    // 释放资源
    faceRecognizer.close();
}
Also used : Mat(org.bytedeco.opencv.opencv_core.Mat) IntBuffer(java.nio.IntBuffer) FaceRecognizer(org.bytedeco.opencv.opencv_face.FaceRecognizer) FisherFaceRecognizer(org.bytedeco.opencv.opencv_face.FisherFaceRecognizer) MatVector(org.bytedeco.opencv.opencv_core.MatVector)

Example 4 with FaceRecognizer

use of org.bytedeco.opencv.opencv_face.FaceRecognizer in project blog_demos by zq2599.

the class Recognize5 method recog.

private void recog(String recognizerModel, String dir) {
    FaceRecognizer faceRecognizer = FisherFaceRecognizer.create();
    faceRecognizer.read(recognizerModel);
    faceRecognizer.setThreshold(3000);
    List<String> files = folderMethod1(dir);
    int right = 0;
    int wrong = 0;
    for (String file : files) {
        Mat faceMat = opencv_imgcodecs.imread(file, IMREAD_GRAYSCALE);
        resize(faceMat, faceMat, new Size(RESIZE_WIDTH, RESIZE_HEIGHT));
        int[] plabel = new int[1];
        double[] pconfidence = new double[1];
        faceRecognizer.predict(faceMat, plabel, pconfidence);
        if (2 == plabel[0]) {
            right++;
        } else {
            wrong++;
        }
        System.out.println("lable [" + plabel[0] + "], confidence [" + pconfidence[0] + "]");
    }
    System.out.println("right [" + right + "], wrong [" + wrong + "]");
}
Also used : Mat(org.bytedeco.opencv.opencv_core.Mat) Size(org.bytedeco.opencv.opencv_core.Size) FaceRecognizer(org.bytedeco.opencv.opencv_face.FaceRecognizer) FisherFaceRecognizer(org.bytedeco.opencv.opencv_face.FisherFaceRecognizer)

Example 5 with FaceRecognizer

use of org.bytedeco.opencv.opencv_face.FaceRecognizer in project blog_demos by zq2599.

the class Recognize6 method recog.

private void recog(String recognizerModel, String dir) {
    FaceRecognizer faceRecognizer = FisherFaceRecognizer.create();
    faceRecognizer.read(recognizerModel);
    faceRecognizer.setThreshold(3000);
    Mat faceMat = opencv_imgcodecs.imread(dir, IMREAD_GRAYSCALE);
    int[] plabel = new int[1];
    double[] pconfidence = new double[1];
    faceRecognizer.predict(faceMat, plabel, pconfidence);
    System.out.println("lable [" + plabel[0] + "], confidence [" + pconfidence[0] + "]");
}
Also used : Mat(org.bytedeco.opencv.opencv_core.Mat) FaceRecognizer(org.bytedeco.opencv.opencv_face.FaceRecognizer) FisherFaceRecognizer(org.bytedeco.opencv.opencv_face.FisherFaceRecognizer)

Aggregations

Mat (org.bytedeco.opencv.opencv_core.Mat)8 FaceRecognizer (org.bytedeco.opencv.opencv_face.FaceRecognizer)8 FisherFaceRecognizer (org.bytedeco.opencv.opencv_face.FisherFaceRecognizer)8 IntBuffer (java.nio.IntBuffer)5 MatVector (org.bytedeco.opencv.opencv_core.MatVector)5 Size (org.bytedeco.opencv.opencv_core.Size)3 IplImage (org.bytedeco.opencv.opencv_core.IplImage)1