谁能帮我解决我的问题?我似乎无法从互联网上得到任何答案。我整天都在寻找。
所以这是我的问题。我正在使用opencv4android 2.4.10和Android Studio作为我的IDE创建人脸识别android应用程序。

我需要使用FaceRecognition.predict(Mat src,int []标签,double []置信度)来获取要检测到的人。但是我研究的大多数教程都只有FaceRecognition.predict(Mat src)
我不确定从哪里获得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);

最佳答案

这两个函数本质上都做同样的事情-返回识别的ID。

另一个重载额外将距离值返回到数据库中的最佳项(更小==更好)。由于从Java(或C++)的函数中返回的值不能超过1,因此这是通过引用传递完成的。所以可以使用:

   int predictedLabel = facerec.predict(grayImg);

或者,(如果您想知道距离):
   int[] prediction = {0};
   double[] distance = {0};

   facerec.predict(grayImg, prediction, distance);

   int predictedLabel = prediction[0];
   double dist = distance[0];

09-26 23:34