我刚认出了cv2.createEigenFaceRecognizer
的一些面孔。
但我想要的是知道输入面看起来像计算的特征脸多少。
我们的想法是,您可以重新识别不在数据库中的人员。
编辑:
例如:我在我的模型上训练了面部A,B和C,然后我看到面部C和D.我希望能够将面部C与D区分开来。 谢谢你!答案 0 :(得分: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)
因此,如果您在主题A
,B
,C
和上训练您的模型,您使用的是阈值,然后预测{{1应该得到D
,而应该识别-1
,A
或B
。鉴于事实,您正在使用阈值。
迭代地添加新面孔而不重新估计整个模型。这对于特征脸或Fisherfaces方法是不可能的。您必须为这两种算法调用C
来学习模型。可以使用FaceRecognizer::train
创建的局部二进制模式直方图(LBPH)模型支持更新模型,而无需重新计算其他训练样本。请参阅以下API文档: