OpenCV4Android Facesrecognizer.predict(Mat src,int[]标签,双[]置信度)与OpenCV Facesrecognizer.predict(Mat src)
有人能帮我解决我的问题吗?我似乎从网上找不到任何答案。我找了一整天。 这就是我的问题。我正在使用opencv4android 2.4.10和android Studio作为我的IDE创建一个人脸识别android应用程序 我需要使用FaceRecognition.predict(Mat src,int[]labels,double[]confidence)来获取被检测到的人。但我研究过的大多数教程都只有FaceRecognition.predict(matsrc) 我不知道在哪里可以得到int[]标签和double[]信心。如果有人能教我怎么做,我将不胜感激 示例代码:OpenCV4Android Facesrecognizer.predict(Mat src,int[]标签,双[]置信度)与OpenCV Facesrecognizer.predict(Mat src),android,opencv,image-processing,opencv4android,Android,Opencv,Image Processing,Opencv4android,有人能帮我解决我的问题吗?我似乎从网上找不到任何答案。我找了一整天。 这就是我的问题。我正在使用opencv4android 2.4.10和android Studio作为我的IDE创建一个人脸识别android应用程序 我需要使用FaceRecognition.predict(Mat src,int[]labels,double[]confidence)来获取被检测到的人。但我研究过的大多数教程都只有FaceRecognition.predict(matsrc) 我不知道在哪里可以得到int[
File[] imageFiles = root.listFiles(imgFilter);
Mat labels = new Mat(imageFiles.length, 1, CvType.CV_32SC1);
List<Mat> images = (List<Mat>) new Mat(imageFiles.length);
int counter = 0;
int label;
//get all person id and images
for (File image : imageFiles) {
Mat img = Highgui.imread(image.getAbsolutePath(), 0);
images.add(counter, img);
label = Integer.parseInt(image.getName().split("-")[0]);
labels.put(counter, 0, label);
counter++;
}
//I created a java wrapper for this method
//this works just fine.
FaceRecognizer facerec = new FisherFacesRecognizer();
facerec.train(images, labels);
//my problem is here, the parameters are supposed to be
//*Mat src, int[] labels, double[] confidence*
//but most tutorials only have *Mat src*
int predictedLabel = facerec.predict(grayImg);
File[]imageFiles=root.listFiles(imgFilter);
Mat标签=新Mat(imageFiles.length,1,CvType.CV_32SC1);
列表图像=(列表)新Mat(imageFiles.length);
int计数器=0;
int标签;
//获取所有个人id和图像
用于(文件图像:imageFiles){
Mat img=Highgui.imread(image.getAbsolutePath(),0);
图像。添加(计数器、img);
label=Integer.parseInt(image.getName().split(“-”[0]);
标签。放置(计数器,0,标签);
计数器++;
}
//我为这个方法创建了一个java包装器
//这个很好用。
FaceRecognitor facerec=新的FisherFacesRecogniter();
facerec.列车(图像、标签);
//我的问题是,参数应该是
//*Mat src,int[]标签,双[]置信度*
//但大多数教程只有*Mat src*
int predictedLabel=facerec.predict(灰色img);
这两个函数基本上做相同的事情-返回识别的id
另一个重载还将从数据库返回到最佳项的距离值(越小==越好)。由于java(或c++中的函数不能返回超过1个值,因此这是通过引用传递完成的。因此,要么使用:
int predictedLabel = facerec.predict(grayImg);
或者,(如果你想知道距离):
还有一个问题,先生,facerec.predict(灰色,预测,距离);即使未找到匹配项,也返回预测。它不应该返回-1吗?为什么My返回一个随机标签?这就是构造函数中的“阈值”值的作用。任何距离>阈值都将在识别过程中被丢弃,因此,当它没有找到任何好的结果时,它将返回-1,如预期的那样。
int[] prediction = {0};
double[] distance = {0};
facerec.predict(grayImg, prediction, distance);
int predictedLabel = prediction[0];
double dist = distance[0];