打印
[上位机系统管理]

opencvsharp 人脸捕捉

[复制链接]
1881|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
haylang|  楼主 | 2019-2-12 10:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天有空在这里分享一下,opencvsharp人脸捕捉,需要附件xml训练文件及OpenCvSharp-4.0.0-x64文件。

private void CaptureCameraCallback()  //detect face/objectxxxxxxxxxxxxxxxxxxxx
            {
               //var cap = new VideoCapture("video.mp4");
                //var srcImage = new VideoCapture(0);
                var srcImage = new Mat(@"face.jpg");
                //Cv2.ImShow("Source", srcImage);
                //Cv2.WaitKey(1); // do events

                var grayImage = new Mat();
                Cv2.CvtColor(srcImage, grayImage, ColorConversionCodes.BGRA2GRAY);
                Cv2.EqualizeHist(grayImage, grayImage);

                var cascade = new CascadeClassifier(@"haarcascade_frontalface_alt2.xml");
                var nestedCascade = new CascadeClassifier("haarcascade_eye_tree_eyeglasses.xml");

                var faces = cascade.DetectMultiScale(
                    image: grayImage,
                    scaleFactor: 1.1,
                    minNeighbors: 2,
                    flags: HaarDetectionType.DoRoughSearch | HaarDetectionType.ScaleImage,
                    minSize: new OpenCvSharp.Size(30, 30)
                    );

                Console.WriteLine("Detected faces: {0}", faces.Length);

                var rnd = new Random();
                var count = 1;
                foreach (var faceRect in faces)
                {
                    var detectedFaceImage = new Mat(srcImage, faceRect);
                    Cv2.ImShow(string.Format("Face {0}", count), detectedFaceImage);
                    Cv2.WaitKey(1); // do events

                    var color = Scalar.FromRgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255));
                    Cv2.Rectangle(srcImage, faceRect, color, 3);

                    var detectedFaceGrayImage = new Mat();
                    Cv2.CvtColor(detectedFaceImage, detectedFaceGrayImage, ColorConversionCodes.BGRA2GRAY);
                    var nestedObjects = nestedCascade.DetectMultiScale(
                        image: detectedFaceGrayImage,
                        scaleFactor: 1.1,
                        minNeighbors: 2,
                        flags: HaarDetectionType.DoRoughSearch | HaarDetectionType.ScaleImage,
                        minSize: new OpenCvSharp.Size(30, 30)
                        );
                    Console.WriteLine("Nested Objects[{0}]: {1}", count, nestedObjects.Length);
                    foreach (var nestedObject in nestedObjects)
                    {
                        var center = new OpenCvSharp.Point
                        {
                            X = (int)(Math.Round(nestedObject.X + nestedObject.Width * 0.5, MidpointRounding.ToEven) + faceRect.Left),
                            Y = (int)(Math.Round(nestedObject.Y + nestedObject.Height * 0.5, MidpointRounding.ToEven) + faceRect.Top)
                        };
                        var radius = Math.Round((nestedObject.Width + nestedObject.Height) * 0.25, MidpointRounding.ToEven);
                        Cv2.Circle(srcImage, center, (int)radius, color, thickness: 3);
                    }
                    count++;
                }
                Cv2.ImShow("Haar Detection", srcImage);
                Cv2.WaitKey(1); // do events
                Cv2.WaitKey(0);
                Cv2.DestroyAllWindows();
                srcImage.Dispose();
            }

xml.zip

376.34 KB

相关帖子

沙发
efbueshjfnkmwe| | 2019-11-4 23:16 | 只看该作者
请问下有opencvsharp 训练xml的例子吗?

使用特权

评论回复
板凳
比创电子| | 2020-3-27 14:26 | 只看该作者

使用特权

评论回复
地板
lioncity| | 2020-9-5 20:28 | 只看该作者
谢谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

32

帖子

0

粉丝