コード例 #1
0
ファイル: MainWindow.xaml.cs プロジェクト: xamarinhub/Vision
        private void OpenModel(DirectoryNode node)
        {
            Task.Factory.StartNew(() =>
            {
                EyeGazeModel model         = new EyeGazeModel(node);
                FaceDetectionProvider prov = new OpenFaceDetector();

                Dispatcher.Invoke(() =>
                {
                    ModelViewer viewer = new ModelViewer(this, model, prov);
                    viewer.Show();
                });
            });
        }
コード例 #2
0
        static void EyeExtract()
        {
            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Multiselect = true;
            if (DialogResult.OK == ofd.ShowDialog())
            {
                Console.Write("caption? >>> ");
                string caption = Console.ReadLine();

                Console.Write("leftOnly? [y/N] >>> ");
                string readleft = Console.ReadLine();
                bool   useleft  = false;
                if (!string.IsNullOrWhiteSpace(readleft))
                {
                    var readleftLower = readleft.ToLower();
                    if (readleftLower == "n")
                    {
                        useleft = false;
                    }
                    else if (readleftLower == "y")
                    {
                        useleft = true;
                    }
                }

                var parent = Storage.Root.GetDirectory($"[{DateTime.Now.ToString()}] eyes");
                Storage.FixPathChars(parent);
                if (!parent.IsExist)
                {
                    parent.Create();
                }
                var parentLeft = parent.GetDirectory("left");
                if (!parentLeft.IsExist && !useleft)
                {
                    parentLeft.Create();
                }
                var parentRight = parent.GetDirectory("right");
                if (!parentRight.IsExist && !useleft)
                {
                    parentRight.Create();
                }

                FaceDetectionProvider detector = new OpenFaceDetector()
                {
                    Interpolation = InterpolationFlags.Cubic,
                    MaxSize       = 420,
                    UseSmooth     = false
                };

                int id = 0;
                foreach (var file in ofd.FileNames)
                {
                    if (Storage.IsImage(file))
                    {
                        using (Mat mat = Core.Cv.ImgRead(file))
                        {
                            var rects = detector.Detect(mat);
                            if (rects != null && rects.Length > 0)
                            {
                                var face = rects[0];
                                if (useleft)
                                {
                                    if (face.LeftEye != null)
                                    {
                                        using (Mat eye = face.LeftEye.RoiCropByPercent(mat))
                                            Core.Cv.ImgWrite(parent.GetFile($"{id},{caption}.jpg"), eye, 92);
                                    }
                                }
                                else
                                {
                                    if (face.LeftEye != null && face.RightEye != null)
                                    {
                                        var filename = $"{id},{caption}.jpg";

                                        using (Mat eye = face.LeftEye.RoiCropByPercent(mat))
                                            Core.Cv.ImgWrite(parentLeft.GetFile(filename), eye, 92);

                                        using (Mat eye = face.RightEye.RoiCropByPercent(mat))
                                            Core.Cv.ImgWrite(parentRight.GetFile(filename), eye, 92);
                                    }
                                }
                            }
                        }
                        id++;
                        Console.WriteLine($"Extracted[{id}/{ofd.FileNames.Length}]");
                    }
                }

                detector.Dispose();
            }
        }