コード例 #1
0
ファイル: Cv2_face.cs プロジェクト: zfq308/opencvsharp
 /// <summary>
 ///
 /// </summary>
 /// <param name="numComponents"></param>
 /// <param name="threshold"></param>
 /// <returns></returns>
 public static BasicFaceRecognizer CreateEigenFaceRecognizer(
     int numComponents = 0, double threshold = Double.MaxValue)
 {
     return(FaceRecognizer.CreateEigenFaceRecognizer(numComponents, threshold));
 }
コード例 #2
0
        protected override void OnLoad(EventArgs e)
        {
            // http://docs.opencv.org/modules/contrib/doc/facerec/tutorial/facerec_video_recognition.html

            var images = Directory.EnumerateDirectories("data/people")
                         .OrderBy(p => p)
                         .SelectMany(person => Directory.EnumerateFiles(person, "*.pgm")
                                     .OrderBy(p => p)
                                     .Select(p => Mat.FromStream(File.OpenRead(p), LoadMode.AnyColor).CvtColor(ColorConversion.BgrToGray)))
                         .ToArray();

            var labels = Directory.EnumerateDirectories("data/people")
                         .OrderBy(p => p)
                         .SelectMany((person, i) => Directory.EnumerateFiles(person, "*.pgm")
                                     .OrderBy(p => p)
                                     .Select(_ => i))
                         .ToArray();

            var indexToName = Directory.EnumerateDirectories("data/people")
                              .OrderBy(p => p)
                              .Select(Path.GetFileName)
                              .ToArray();

            var recognizer = FaceRecognizer.CreateEigenFaceRecognizer();
            var sw         = new Stopwatch();

            sw.Start();
            recognizer.Train(images, labels);
            sw.Stop();
            Debug.WriteLine("training " + sw.ElapsedMilliseconds);

            CascadeClassifier haar_cascade = new CascadeClassifier("cascades/haarcascade_frontalface_alt2.xml");

            var displays = new List <NetworkStream>();

            Task.Factory.StartNew(() =>
            {
                var listener = new TcpListener(IPAddress.Any, 60001);
                listener.Start();

                while (true)
                {
                    try
                    {
                        var socket = listener.AcceptSocket();
                        Debug.WriteLine(socket.RemoteEndPoint);

                        displays.Add(new NetworkStream(socket, true));
                    }
                    catch
                    { }
                }
            });

            Task.Factory.StartNew(() =>
            {
                var listener = new TcpListener(IPAddress.Any, 60000);
                listener.Start();

                while (true)
                {
                    try
                    {
                        var socket = listener.AcceptSocket();
                        Debug.WriteLine(socket.RemoteEndPoint);

                        var stream = new BufferedStream(new NetworkStream(socket, true));
                        var reader = new BinaryReader(stream);

                        while (true)
                        {
                            var data = new List <byte>();

                            var imageSize = reader.ReadInt32();
                            Debug.WriteLine("image size " + imageSize);
                            while (data.Count != imageSize)
                            {
                                var imageData = reader.ReadBytes(imageSize - data.Count);
                                data.AddRange(imageData);
                            }

                            var image = Mat.FromStream(new MemoryStream(data.ToArray()), LoadMode.AnyColor);

                            Detect(recognizer, haar_cascade, image, displays, indexToName);
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(ex);
                    }
                }
            }, TaskCreationOptions.LongRunning);


            /*
             * VideoCapture cap = new VideoCapture(0);
             * if (!cap.IsOpened())
             * {
             *  throw new Exception("???");
             * }
             *
             * Task.Factory.StartNew(() =>
             * {
             *  Mat frame = new Mat();
             *  while (true)
             *  {
             *      cap.Read(frame);
             *      if (frame.Empty())
             *      {
             *          Thread.Sleep(250);
             *          continue;
             *      }
             *
             *      var original = frame.Clone();
             *      Detect(recognizer, haar_cascade, original);
             *  }
             * }, TaskCreationOptions.LongRunning);
             */
        }
コード例 #3
0
        public void CreateAndDisposeEigen()
        {
            var recognizer = FaceRecognizer.CreateEigenFaceRecognizer();

            recognizer.Dispose();
        }