OpenCV4Android FaceRecognizer.predict(Mat src, int[] labels, double[] confidence) 与 OpenCV FaceRecognizer.predict(Mat src)
OpenCV4Android FaceRecognizer.predict(Mat src, int[] labels, double[] confidence) vs. OpenCV FaceRecognizer.predict(Mat src)
谁能帮我解决我的问题?我似乎无法从互联网上得到任何答案。我一直在寻找一整天。
所以这是我的问题。我正在使用 opencv4android 2.4.10 和 Android Studio 创建人脸识别 android 应用程序作为我的 IDE.
我需要使用FaceRecognition.predict(Mat src, int[] labels, double[] confidence) 来获取正在检测的人。但是我研究过的大多数教程只有 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);
这两个函数基本上做同样的事情 - return 识别的 id。
另一个重载另外 returns 到数据库中最佳项目的距离值(更小==更好)。因为在 java(或 c++)中,一个函数不能 return 多于 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];
谁能帮我解决我的问题?我似乎无法从互联网上得到任何答案。我一直在寻找一整天。 所以这是我的问题。我正在使用 opencv4android 2.4.10 和 Android Studio 创建人脸识别 android 应用程序作为我的 IDE.
我需要使用FaceRecognition.predict(Mat src, int[] labels, double[] confidence) 来获取正在检测的人。但是我研究过的大多数教程只有 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);
这两个函数基本上做同样的事情 - return 识别的 id。
另一个重载另外 returns 到数据库中最佳项目的距离值(更小==更好)。因为在 java(或 c++)中,一个函数不能 return 多于 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];