Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV4Android Facesrecognizer.predict(Mat src,int[]标签,双[]置信度)与OpenCV Facesrecognizer.predict(Mat src)_Android_Opencv_Image Processing_Opencv4android - Fatal编程技术网

OpenCV4Android Facesrecognizer.predict(Mat src,int[]标签,双[]置信度)与OpenCV Facesrecognizer.predict(Mat src)

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[

有人能帮我解决我的问题吗?我似乎从网上找不到任何答案。我找了一整天。 这就是我的问题。我正在使用opencv4android 2.4.10和android Studio作为我的IDE创建一个人脸识别android应用程序

我需要使用FaceRecognition.predict(Mat src,int[]labels,double[]confidence)来获取被检测到的人。但我研究过的大多数教程都只有FaceRecognition.predict(matsrc) 我不知道在哪里可以得到int[]标签和double[]信心。如果有人能教我怎么做,我将不胜感激

示例代码:

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];