python - openCV的特征脸

我刚刚认识了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
  • https://stackoverflow.com/questions/12291243/

    相关文章:

    python - typeerror参数 'image'必须为iplimage

    android - opencv,链接C静态库../lib/armeabi-v7a/liblibjp

    opencv - SiftFeatureDetector()和Ptr

    opencv - 查看仿射变换的结果

    opencv - 分配像素值的安全方法

    .net - 如何在图表控件中显示EMGU直方图?

    python - 使用simplecv在多个窗口中显示视频

    opencv - 如何找到检测到的圆的顺序?

    opengl - setOpenGlDrawCallback如何调整OpenCV窗口的大小

    opencv - cvBlobsLib 查找重叠的 blob