我刚刚用cv2.createEigenFaceRecognizer认出了一些面孔。但我想知道的是,输入面与计算出的特征面有多相似。这个想法是,你可以重新识别不在数据库中的人。
编辑:
例如:我在我的模型上训练了人脸A,B和C,然后我看到了人脸C和D。我希望能够区分人脸C和D。
谢谢!
发布于 2012-09-07 02:28:49
您可以在cv::FaceRecognizer上的文档中找到有关设置阈值的部分,网址为:
它对于Python包装器也是一样的,当您在OpenCV中调用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)因此,如果您在主题A、B、C 和上训练您的模型,则对D的预测应该产生-1,而A、B或C应该被识别。假设你使用的是一个阈值。
至于迭代添加新面孔,而不需要重新估计整个模型。这对于Eigenfaces或Fisherfaces方法是不可能的。你总是需要为这两个算法调用FaceRecognizer::train来学习模型。可以使用cv2.createLBPHFaceRecognizer创建的局部二进制模式直方图(LBPH)模型支持更新模型,而无需重新计算其他训练样本。请参阅API文档以了解以下内容:
https://stackoverflow.com/questions/12291243
复制相似问题