【问题标题】:Extract detected faces in DlibDotNet在 DlibDotNet 中提取检测到的人脸
【发布时间】:2020-04-15 00:35:13
【问题描述】:

我正在使用 DlibDotNet,而且我是新手。我有来自Detect Faces With C# And Dlib In Only 40 Lines Of Code的以下代码:

        static void Main(string[] args)
        {
            // set up Dlib facedetector
            using (var fd = Dlib.GetFrontalFaceDetector())
            {
                var img = Dlib.LoadImage<RgbPixel>(inputFilePath);

                // find all faces in the image
                var faces = fd.Operator(img);
                foreach (var face in faces)
                {
                    // draw a rectangle for each face
                    Dlib.DrawRectangle(img, face, color: new RgbPixel(0, 255, 255), thickness: 4);
                }
                Dlib.SaveJpeg(img, "output.jpg");
            }
        }

问题是如何提取图像中检测到的所有人脸? 我测试过Dlib.ExtractImageChips()方法,但不知道如何正确使用。

提前致谢。

【问题讨论】:

  • 什么是“所有的面孔”?
  • 您可以使用 xy,topleft from face 并裁剪每张脸的图像
  • @villageTech 我的意思是人脸。这是一个人脸检测代码。

标签: c# .net-core face-detection dlib


【解决方案1】:

我在挖掘图书馆后找到了方法。这是实现:

DPoint[] dPoint = new DPoint[] {
                    new DPoint(face.TopLeft.X, face.TopLeft.Y),
                    new DPoint(face.TopRight.X, face.TopRight.Y),
                    new DPoint(face.BottomLeft.X, face.BottomLeft.Y),
                    new DPoint(face.BottomRight.X, face.BottomRight.Y),
                };
                    int width = (int)dRectangle.Width;
                    int height = (int)dRectangle.Height;

                    img = Dlib.ExtractImage4Points(img, dPoint, width, height);

其中 img 是源图像,dPoint 是一个由四个点组成的数组,代表提取的图像的四个角,宽度和高度是提取图像的像素大小。

【讨论】:

    【解决方案2】:

    使用 Dlib.GetFaceChipDetails() 和 Dlib.ExtractImageChips() 后,您应该可以从给定图像中获取人脸图像,只需将其转换为位图。转换
    Array2D 到 Bitmap,你应该在你的项目中添加 DlibDotNet.Extensions DLL 最新版本。代码看起来像

    List<Image> images = new List<Image>();
    
    using (var faceChips = Dlib.ExtractImageChips<RgbPixel>(img, chipLocations))
    {
        Image image = null;
        //Iterate face chips and add image one by one if multiple images existed
        foreach (var face in faceChips)
        {
            image = face.ToBitmap();
            images.Add(image);
        }
    }
    

    Here is a sample application 展示了如何从图像文件中提取人脸图像。

    【讨论】:

      猜你喜欢
      • 2013-08-21
      • 2013-09-24
      • 2012-03-08
      • 2021-06-27
      • 2020-10-15
      • 2019-12-01
      • 2013-07-03
      • 2013-11-24
      • 2012-04-17
      相关资源
      最近更新 更多