首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于openCV的特征脸

基于openCV的特征脸
EN

Stack Overflow用户
提问于 2012-09-06 07:47:23
回答 1查看 8.3K关注 0票数 0

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

编辑:

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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-07 02:28:49

您可以在cv::FaceRecognizer上的文档中找到有关设置阈值的部分,网址为:

它对于Python包装器也是一样的,当您在OpenCV中调用help(cv2.createFaceRecognizer)时可以很容易地看到:

代码语言:javascript
复制
Help on built-in function createEigenFaceRecognizer in module cv2:

createEigenFaceRecognizer(...)
    createEigenFaceRecognizer([, num_components[, threshold]]) -> retval

因此,在代码中,您将创建具有阈值的模型,我将其设置为100.0。低于此值的任何值都将在预测中生成-1,这意味着此面是unknown

代码语言:javascript
复制
# 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)

如演示中所示,您可以使用以下命令获得预测和相关置信度(即到训练数据集中最近邻居的距离):

代码语言:javascript
复制
[predicted_label, predicted_confidence] = model.predict(image)

因此,如果您在主题ABC 上训练您的模型,则对D的预测应该产生-1,而ABC应该被识别。假设你使用的是一个阈值。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12291243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档