openCV的特征脸

时间:2012-09-05 23:47:23

标签: python opencv pca

我刚认出了cv2.createEigenFaceRecognizer的一些面孔。 但我想要的是知道输入面看起来像计算的特征脸多少。 我们的想法是,您可以重新识别不在数据库中的人员。

编辑:

例如:我在我的模型上训练了面部A,B和C,然后我看到面部C和D.我希望能够将面部C与D区分开来。

谢谢你!

1 个答案:

答案 0 :(得分:2)

您可以在cv::FaceRecognizer的文档中找到有关设置阈值的部分:

OpenCV Python Wrapper的工作方式相同,在Python中调用help(cv2.createFaceRecognizer)时很容易看到:

Help on built-in function createEigenFaceRecognizer in module cv2:

createEigenFaceRecognizer(...)
    createEigenFaceRecognizer([, num_components[, threshold]]) -> retval

因此,在代码中,您将使用阈值创建模型,我将其设置为100.0。低于此值的任何内容都会在预测中产生-1,这意味着此面是unknown

# Create the Eigenfaces model. We are going to use the default
# parameters for this simple example, please read the documentation
# for thresholding:
model = cv2.createEigenFaceRecognizer(threshold=100.0)

如演示所示,您可以通过以下方式获得预测和相关置信度(与训练数据集中最近邻居的距离):

[predicted_label, predicted_confidence] = model.predict(image)

因此,如果您在主题ABC 上训练您的模型,您使用的是阈值,然后预测{{1应该得到D,而应该识别-1AB。鉴于事实,您正在使用阈值。

迭代地添加新面孔而不重新估计整个模型。这对于特征脸或Fisherfaces方法是不可能的。您必须为这两种算法调用C来学习模型。可以使用FaceRecognizer::train创建的局部二进制模式直方图(LBPH)模型支持更新模型,而无需重新计算其他训练样本。请参阅以下API文档: