/// <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)); }
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); */ }
public void CreateAndDisposeEigen() { var recognizer = FaceRecognizer.CreateEigenFaceRecognizer(); recognizer.Dispose(); }