【问题标题】:eigenfaces with openCV带有openCV的特征脸
【发布时间】:2012-09-05 23:47:23
【问题描述】:

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

编辑:

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

谢谢!

【问题讨论】:

    标签: python opencv pca


    【解决方案1】:

    您可以在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)
    

    因此,如果您在主题 ABCAND 上训练您的模型,那么您正在使用阈值,那么对 D 的预测应该会产生 -1,而ABC 应该被识别。鉴于您正在使用阈值这一事实。

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

    【讨论】:

    • 对不起,“重新识别不在数据库中的人”是指您可以在看到未知人脸后再次重新识别它,而无需重新训练模型。
    • 对于以opencv开头的人,help(cv2.createFaceRecognizer)会报错,因为没有模块createFaceRecognizer,折腾了好久才放弃搜索源码。
    • 这是不正确的。您可以在github.com/Itseez/opencv/blob/master/samples/python2/… 找到有关如何使用 OpenCV Python 绑定和特征脸模型的完整源代码示例。没有诸如cv2.createFaceRecognizer 之类的方法,这就是您收到错误的原因。查看上述答案中链接的 API 文档,了解哪些功能可用。
    猜你喜欢
    • 2012-04-29
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2020-06-12
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多