python - openCV的特征脸

标签 python opencv pca

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

编辑:

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

谢谢!

最佳答案

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

  • http://docs.opencv.org/trunk/modules/contrib/doc/facerec/facerec_api.html#setting-the-thresholds

  • 它与OpenCV Python包装器的工作原理相同,在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。鉴于事实,您正在使用阈值。

    至于迭代添加新面孔而无需重新估计整个模型。对于本征面或Fisherfaces方法而言,这是不可能的。您始终必须为这两种算法调用FaceRecognizer::train来学习模型。您可以使用cv2.createLBPHFaceRecognizer创建的本地二进制模式直方图(LBPH)模型支持更新模型而无需重新计算其他训练样本。请参阅以下API文档:
  • http://docs.opencv.org/trunk/modules/contrib/doc/facerec/facerec_api.html#facerecognizer-update
  • 关于python - openCV的特征脸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12291243/

    相关文章:

    c++ - 一些 OpenCV 命令有什么区别?

    android - java.lang.UnsatisfiedLinkError : Native method not found: org. opencv.imgproc.Imgproc.rectangle_1

    r - prcomp 的自动绘图 - 更改符号

    python - 在 Python 中查找所有可能的参数组合

    python - 使用 Delphi 创建 Python 扩展

    python - 如何使 argparse 解析器也用作子解析器

    opencv - 无法向 opencv 添加额外模块(opencv_contrib)

    python - Sympy -solve() 和solve_poly_system()

    python - R 稀疏矩阵的内部处理

    opencv - 在 OPENCV v2 API 中执行 PCA 时,如何在 libfacerec 中使用 Mahalanobis 距离?