gpt4 book ai didi

c# - 使用 Dlib.Net(FaceRecognition.Net) 检测人脸是否颠倒

转载 作者:行者123 更新时间:2023-12-04 11:39:30 34 4
gpt4 key购买 nike

基本上,我正在尝试使用此库 https://github.com/takuya-takeuchi/FaceRecognitionDotNet 检查图像中的人脸是否颠倒.
以下图为例
enter image description here
这是一张使用 FaceRecognition.Net 库成功检测到的图像。图像是颠倒的。我用蓝色椭圆标记了图像中的所有面部标志。
这是我遵循的方法

 // Finding faceparts
var faceparts = dparameters._FaceRecognition.FaceLandmark(dparameters.FCImage);

// Drawing Ellipses over all points got from faceparts

foreach(var facepart in faceparts) {
foreach(var mypoint in facepart.Values) {
foreach(var x in mypoint) {
tempg.DrawEllipse(Pens.Blue, x.Point.X, x.Point.Y, 2, 2);
}
}
}
现在我正在通过比较嘴唇和眼点的最大 Y 坐标来检查图像是否旋转
var temp = faceparts.FirstOrDefault();
IEnumerable < FacePoint > lippoints;
temp.TryGetValue(FacePart.BottomLip, out lippoints);

IEnumerable < FacePoint > eyepoints;
temp.TryGetValue(FacePart.LeftEye, out eyepoints);

var lippoint = lippoints.Max(r => r.Point.Y);
var topeyepoint = eyepoints.Max(r => r.Point.Y);
if (lippoint > topeyepoint) {
bool isinverted = true;
} else {
bool isinverted = false;
}
问题是即使图像没有倒置,眼坐标也小于人脸坐标。这是因为检测到图像中的轮廓是假人脸。如何解决这个问题?

最佳答案

看起来这个库没有提供结果的置信比。否则,我建议尝试输入及其翻转的副本,并在进行“眼睛对嘴”检查之前更有信心地选择那个。
所以也许有帮助的是:

  • 使用CNN模型,在原始库中由
  • 调用

    face_locations = face_recognition.face_locations(image, number_of_times_to_upsample=0, model="cnn")
    在 C# 端口中它应该是
    _FaceRecognition.FaceLocations(image, 0, Model.Cnn)
    这应该会给你一个更准确的人脸边界框,然后你可以将它与地标的边界框进行比较。如果您对图像的翻转副本执行相同操作,则可以“模拟”我之前提到的置信度,并假设框匹配更好的方向。然后您可以通过“眼睛在嘴上”测试来识别方向。
  • 据我所知该库不提供预先训练的数据,所以为了使用 Cnn模型需要自己训练。选择用于训练的数据集当然非常重要。如果您已经进行了训练,更多/更好的训练数据可能会提高准确性。
  • 关于c# - 使用 Dlib.Net(FaceRecognition.Net) 检测人脸是否颠倒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67900149/

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