在 DlibDotNet 中提取检测到的人脸

Posted

技术标签:

【中文标题】在 DlibDotNet 中提取检测到的人脸【英文标题】:Extract detected faces in 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 我的意思是人脸。这是一个人脸检测代码。 【参考方案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 展示了如何从图像文件中提取人脸图像。

【讨论】:

以上是关于在 DlibDotNet 中提取检测到的人脸的主要内容,如果未能解决你的问题,请参考以下文章

图像人脸检测(框出人脸笑脸眼睛)

opencv中检测出人脸之后,需要把检测出的人脸区域提取出来,用作人脸识别,那么如何提取人脸区域

获取检测到的人脸位图

如何在 dlib python 中保存/裁剪检测到的人脸

基于CNN的人脸相似度检测

人脸识别 介绍