gpt4 book ai didi

JavaCV:将整数数组转换为Mat

转载 作者:太空宇宙 更新时间:2023-11-03 23:15:30 27 4
gpt4 key购买 nike

我正在尝试使用 JavaCV 在我的照片数据库中实现人脸识别。虽然检测可能的面孔工作正常(已经有很多 Java 示例),但我仍然坚持进行实际识别。更准确地说,是训练人脸识别器。

出于测试目的,我有一个文件夹结构,每个已知人都有一个子文件夹,标记为“s”+ id,训练照片位于其中。有效的是读取图像并将它们添加到数组中。不起作用的是用标识符创建第二个数组。 LBPHFaceRecognizer.train 确实需要一个垫子,我不知道如何创建所需的数据结构。到目前为止我所拥有的是:

MatVector images = new MatVector();
List<Integer> ids = new ArrayList<Integer>();
File root = new File("orl_faces/");
for (File subFolder : root.listFiles()) {
if (subFolder.getName().matches("s\\d+") && subFolder.isDirectory()) {
int personId = Integer.parseInt(subFolder.getName().substring(1));
for (File file : subFolder.listFiles()) {
if (file.getName().endsWith(".pgm") && !"10.pgm".equals(file.getName())) {
IplImage img = cvLoadImage(file.getAbsolutePath());
images.put(img);
ids.add(personId);
}
}
}
}

// ---- FIXME here is where I am stuck ----
Mat labels = new Mat(new Size(ids.size(), 1));
for (int i = 0; i < ids.size(); i++) {
MatExpr m = Mat.ones(new Size(1, 1), CV_32SC1);
Mat m2 = m.asMat();
labels.push_back(m2);
}

model.train(images, labels);

执行此操作时,我得到一个

Exception in thread "main" java.lang.RuntimeException: vector<T> too long
at org.bytedeco.javacpp.opencv_face$FaceRecognizer.train(Native Method)

很明显,即使它确实有效,我仍然不会把我的号码放在那里。非常感谢任何帮助。

最佳答案

您可以使用 MatOfInt和一个整数数组。例如,如果您在 List<Integer 中收集标签:

        int[] allLabels = new int[labels.size()];
for (int i = 0; i < labels.size(); i++) {
allLabels[i] = labels.get(i);
}
faceRecognizer.train(faces, new MatOfInt(allLabels));

这应该有效:)

关于JavaCV:将整数数组转换为Mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40636224/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com