0

我刚刚认出了一些面孔cv2.createEigenFaceRecognizer。但我想知道输入面与计算出的特征面有多少相似之处。这个想法是您可以重新识别不在数据库中的人。

编辑:

例如:我在模型上训练了 A、B 和 C 面,然后我看到 C 和 D 面。我希望能够区分 C 面和 D 面。

谢谢你!

4

1 回答 1

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 您使用阈值上训练您的模型,那么预测D应该会产生-1、而ABC应该被识别。鉴于您正在使用阈值这一事实。

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

于 2012-09-06T18:28:49.230 回答