public override IObservable <Rect[]> Process(IObservable <IplImage> source) { return(Observable.Defer(() => { var storage = new MemStorage(); var cascade = HaarClassifierCascade.Load(FileName); return source.Select(input => { var offset = Offset; var objects = cascade.DetectObjects(input, storage, ScaleFactor, MinNeighbors, Flags, MinSize, MaxSize); var result = new Rect[objects.Count]; objects.CopyTo(result); storage.Clear(); for (int i = 0; i < result.Length; i++) { result[i].X += offset.X; result[i].Y += offset.Y; } return result; }).Finally(() => { cascade.Dispose(); storage.Dispose(); }); })); }
public static void DetectFace(Capture capture) { var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "data", "haarcascades_cuda", "haarcascade_frontalface_alt.xml"); var cascade = HaarClassifierCascade.Load(path); var storage = new MemStorage(); var size = new Size(40, 40); using (var window = new NamedWindow("test")) { while (CV.WaitKey(1) < 0) { using (var image = capture.QueryFrame()) { if (image == null) { break; } var faces = cascade.DetectObjects(image, storage, 1.1, 3, 0, size); foreach (var rect in faces.ToArray <Rect>()) { CV.Rectangle(image, new Point(rect.X, rect.Y), new Point(rect.X + rect.Width, rect.Y + rect.Height), new Scalar(255, 0, 0), 1, LineFlags.Connected8, 0); window.ShowImage(image); } } } } }
internal static extern Seq cvHaarDetectObjects( Arr image, HaarClassifierCascade cascade, MemStorage storage, double scale_factor, int min_neighbors, HaarDetectObjectFlags flags, Size min_size, Size max_size);
private void InitClassifiers(ClassifierType classifierType, System.IO.DirectoryInfo classifierDir) { string faceClassifierFileName = GetFileNameFromClassifierType(classifierType); string eyesClassifierFileName = GetFileNameFromClassifierType(ClassifierType.Eyes); managedHaarFace = HaarClassifierCascade.Parse(XDocument.Load(faceClassifierFileName)); managedHaarEyes = HaarClassifierCascade.Parse(XDocument.Load(eyesClassifierFileName)); unmanagedHaarFace = new HaarCascade(faceClassifierFileName); unmanagedHaarEyes = new HaarCascade(eyesClassifierFileName); }