在 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 中提取检测到的人脸的主要内容,如果未能解决你的问题,请参考以下文章