gpt4 book ai didi

opencv - 关于人脸验证(相对于人脸识别)的置信度得分有什么建议吗?

转载 作者:太空宇宙 更新时间:2023-11-03 21:04:28 25 4
gpt4 key购买 nike

我在我的代码中使用特征脸 (PCA) 进行人脸识别。我使用了 OpenCV 网站上的教程作为引用。虽然这对于识别人脸非常有效(即它可以告诉您谁是正确的),但基于置信度分数的人脸验证(或冒名顶替者检测 - 验证人脸是否已注册到训练集中)根本无法正常工作。

我计算欧氏距离并将其用作置信度阈值。还有其他方法可以计算置信度阈值吗?我尝试使用 http://www.cognotics.com/opencv/servo_2007_series/part_5/page_5.html 中提到的马氏距离,但它产生了非常奇怪的值。

PS:像 face.com 这样的解决方案可能不适合我,因为我需要在本地完成所有操作。

最佳答案

您可以使用 subspaceProject() 函数将新的输入面投影到特征空间,然后使用 subspaceReconstruct() 从特征空间生成重建的面,然后比较如何类似于input_facereconstructed_face。已知人脸(训练数据集中的人脸)的重建图像与 input_face 比冒名顶替者的人脸更相似。您可以设置相似度阈值进行验证。这是代码:

// Project the input face onto the eigenspace.
Mat projection = subspaceProject(eigenvectors, FaceRow,input_face.reshape(1,1));

//Generate the reconstructed face
Mat reconstructionRow = subspaceReconstruct(eigenvectors,FaceRow, projection);

// Reshape the row mat to an image mat
Mat reconstructionMat = reconstructionRow.reshape(1,faceHeight);

// Convert the floating-point pixels to regular 8-bit uchar.
Mat reconstructed_face = Mat(reconstructionMat.size(), CV_8U);

reconstructionMat.convertTo(reconstructed_face, CV_8U, 1, 0);

然后您可以使用 cv::norm() 比较输入的人脸和重建的人脸。例如:

// Calculate the L2 relative error between the 2 images. 
double err = norm(input_face,reconstructed_face, CV_L2);
// Convert to a reasonable scale
double similarity = error / (double)(input_face.rows * input_face.cols);

关于opencv - 关于人脸验证(相对于人脸识别)的置信度得分有什么建议吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8757149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com