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();
}
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();
}
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();
}
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 + "]");
}
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] + "]");
}
Aggregations