public MainPage()
        {
            InitializeComponent();

            var assembly = Assembly_.GetExecutingAssembly();

            using (var stream = assembly.GetManifestResourceStream("FaceDetection.Images.judybats.jpg"))
            {
                this.ImageView.Source = this.GetImageSourceFromStream(stream);

                stream.Seek(0, SeekOrigin.Begin);
                this.bitmap = ((Bitmap)Image.FromStream(stream)).Clone(PixelFormat.Format32bppArgb);
            }

            foreach (var searchMode in Enum.GetNames(typeof(ObjectDetectorSearchMode)))
            {
                this.SearchModePicker.Items.Add(searchMode);
            }
            foreach (var scalingMode in Enum.GetNames(typeof(ObjectDetectorScalingMode)))
            {
                this.ScalingModePicker.Items.Add(scalingMode);
            }

            this.SearchModePicker.SelectedIndex =
                this.SearchModePicker.Items.IndexOf(ObjectDetectorSearchMode.NoOverlap.ToString());
            this.ScalingModePicker.SelectedIndex =
                this.ScalingModePicker.Items.IndexOf(ObjectDetectorScalingMode.SmallerToGreater.ToString());

            using (var stream = assembly.GetManifestResourceStream("FaceDetection.Files.haarcascade_frontalface_alt.xml"))
            {
                var cascade = HaarCascade.FromXml(stream);
                this.detector = new HaarObjectDetector(cascade, 30);
            }
        }
        public void write_test()
        {
            string basePath = Path.Combine(NUnit.Framework.TestContext.CurrentContext.TestDirectory, "Resources");

            #region doc_write
            // Let's say we have a Haar cascade definition in OpenCV's 2.4 format:
            string inputCascadePath = Path.Combine(basePath, "haarcascade_frontalface_alt.xml");

            // We can import this cascade into the framework using:
            HaarCascade cascade = HaarCascade.FromXml(inputCascadePath);

            // Now, let's say we would like to save this cascade to C# code:
            string outputCSharpPath = Path.Combine(basePath, "FrontalFace.cs");

            // Write the "haarcascade_frontalface_alt.xml" into complete C# code:
            using (var writer = new HaarCascadeWriter(outputCSharpPath))
                writer.Write(cascade, "MyFrontalFace");

            // Now, you can import the generated FrontalFace.cs file into your application
            // and use it just as it was any other C# class. You can use it in exactly the
            // same way as the other classes in the Accord.Vision.Detection.Cascades namespace
            // such as FaceHaarCascade.cs and NoseHaarCascade.cs.
            #endregion

            string[] file = File.ReadAllLines(outputCSharpPath);
            Assert.AreEqual(2281, file.Length);
        }
        public void ParseTest()
        {
            string      fileName = Path.Combine(TestContext.CurrentContext.TestDirectory, "Resources", "haarcascade_frontalface_alt.xml");
            HaarCascade cascade1 = HaarCascade.FromXml(new StreamReader(fileName));

            Assert.AreEqual(22, cascade1.Stages.Length);
            Assert.AreEqual(3, cascade1.Stages[0].Trees.Length);
            Assert.AreEqual(1, cascade1.Stages[0].Trees[0].Length);

            Assert.AreEqual(false, cascade1.HasTiltedFeatures);

            // Load the hard coded version of the classifier
            HaarCascade cascade2 = new FaceHaarCascade();

            Assert.AreEqual(cascade1.Stages.Length, cascade2.Stages.Length);
            Assert.AreEqual(cascade1.Height, cascade2.Height);
            Assert.AreEqual(cascade1.Width, cascade2.Width);


            for (int i = 0; i < 3; i++)
            {
                HaarCascadeStage stage1 = cascade1.Stages[i];
                HaarCascadeStage stage2 = cascade2.Stages[i];

                //Assert.AreEqual(stage1.NextIndex, stage2.NextIndex);
                //Assert.AreEqual(stage1.ParentIndex, stage2.ParentIndex);

                Assert.AreEqual(stage1.Threshold, stage2.Threshold);

                Assert.AreEqual(stage1.Trees.Length, stage2.Trees.Length);

                for (int j = 0; j < stage1.Trees.Length && j < stage2.Trees.Length; j++)
                {
                    HaarFeatureNode[] tree1 = stage1.Trees[j];
                    HaarFeatureNode[] tree2 = stage2.Trees[j];

                    Assert.AreEqual(tree1.Length, tree2.Length);

                    for (int k = 0; k < tree1.Length; k++)
                    {
                        HaarFeatureNode node1 = tree1[k];
                        HaarFeatureNode node2 = tree2[k];

                        Assert.AreEqual(node1.LeftNodeIndex, node2.LeftNodeIndex);
                        Assert.AreEqual(node1.RightNodeIndex, node2.RightNodeIndex);

                        Assert.AreEqual(node1.LeftValue, node2.LeftValue);
                        Assert.AreEqual(node1.RightValue, node2.RightValue);

                        Assert.AreEqual(node1.Feature.Tilted, node2.Feature.Tilted);

                        Assert.AreEqual(node1.Threshold, node2.Threshold, 0.000000001);
                    }
                }
            }
        }
Пример #4
0
        public void ParseTest5()
        {
            StringReader stringReader = new StringReader(Properties.Resources.haarcascade_eye);
            HaarCascade  cascade      = HaarCascade.FromXml(stringReader);

            Assert.AreEqual(24, cascade.Stages.Length);
            Assert.AreEqual(93, cascade.Stages[23].Trees.Length);
            Assert.AreEqual(1, cascade.Stages[23].Trees[0].Length);

            Assert.AreEqual(false, cascade.HasTiltedFeatures);
        }
Пример #5
0
        public void ParseTest4()
        {
            StringReader stringReader = new StringReader(Properties.Resources.haarcascade_eye_tree_eyeglasses);
            HaarCascade  cascade      = HaarCascade.FromXml(stringReader);

            Assert.AreEqual(30, cascade.Stages.Length);
            Assert.AreEqual(44, cascade.Stages[29].Trees.Length);
            Assert.AreEqual(3, cascade.Stages[29].Trees[43].Length);

            Assert.AreEqual(true, cascade.HasTiltedFeatures);
        }
Пример #6
0
        public void ParseTest2()
        {
            StringReader stringReader = new StringReader(Properties.Resources.haarcascade_frontalface_alt2);
            HaarCascade  cascade      = HaarCascade.FromXml(stringReader);

            Assert.AreEqual(20, cascade.Stages.Length);
            Assert.AreEqual(3, cascade.Stages[0].Trees.Length);
            Assert.AreEqual(2, cascade.Stages[0].Trees[0].Length);

            Assert.AreEqual(false, cascade.HasTiltedFeatures);
        }
        public void ParseTest2()
        {
            string       fileName     = Path.Combine(TestContext.CurrentContext.TestDirectory, "Resources", "haarcascade_frontalface_alt2.xml");
            StreamReader stringReader = new StreamReader(fileName);
            HaarCascade  cascade      = HaarCascade.FromXml(stringReader);

            Assert.AreEqual(20, cascade.Stages.Length);
            Assert.AreEqual(3, cascade.Stages[0].Trees.Length);
            Assert.AreEqual(2, cascade.Stages[0].Trees[0].Length);

            Assert.AreEqual(false, cascade.HasTiltedFeatures);
        }
        public void ParseTest4()
        {
            string       fileName     = Path.Combine(TestContext.CurrentContext.TestDirectory, "Resources", "haarcascade_eye_tree_eyeglasses.xml");
            StreamReader stringReader = new StreamReader(fileName);
            HaarCascade  cascade      = HaarCascade.FromXml(stringReader);

            Assert.AreEqual(30, cascade.Stages.Length);
            Assert.AreEqual(44, cascade.Stages[29].Trees.Length);
            Assert.AreEqual(3, cascade.Stages[29].Trees[43].Length);

            Assert.AreEqual(true, cascade.HasTiltedFeatures);
        }
Пример #9
0
        public void ParseTest6()
        {
            StringReader stringReader = new StringReader(Properties.Resources.haarcascade_mcs_nose);
            HaarCascade  cascade      = HaarCascade.FromXml(stringReader);

            Assert.AreEqual(20, cascade.Stages.Length);
            Assert.AreEqual(289, cascade.Stages[15].Trees.Length);

            for (int i = 0; i < cascade.Stages.Length; i++)
            {
                Assert.AreEqual(1, cascade.Stages[i].Trees[0].Length);
            }

            Assert.AreEqual(true, cascade.HasTiltedFeatures);

            //  StringWriter sw = new StringWriter();
            //  cascade.ToCode(sw, "NoseCascadeClassifier");
            //  string str = sw.ToString();
        }
        public void ParseTest6()
        {
            string       fileName     = Path.Combine(TestContext.CurrentContext.TestDirectory, "Resources", "haarcascade_mcs_nose.xml");
            StreamReader stringReader = new StreamReader(fileName);
            HaarCascade  cascade      = HaarCascade.FromXml(stringReader);

            Assert.AreEqual(20, cascade.Stages.Length);
            Assert.AreEqual(289, cascade.Stages[15].Trees.Length);

            for (int i = 0; i < cascade.Stages.Length; i++)
            {
                Assert.AreEqual(1, cascade.Stages[i].Trees[0].Length);
            }

            Assert.AreEqual(true, cascade.HasTiltedFeatures);

            //  StringWriter sw = new StringWriter();
            //  cascade.ToCode(sw, "NoseCascadeClassifier");
            //  string str = sw.ToString();
        }
Пример #11
0
        public void NoseHaarCascadeConstructorTest()
        {
            NoseHaarCascade actual = new NoseHaarCascade();

            HaarCascade expected = HaarCascade.FromXml(new StringReader(Properties.Resources.haarcascade_mcs_nose));

            Assert.AreNotEqual(expected, actual);
            Assert.AreEqual(expected.HasTiltedFeatures, actual.HasTiltedFeatures);
            Assert.AreEqual(expected.Width, actual.Width);
            Assert.AreEqual(expected.Height, actual.Height);
            Assert.AreEqual(expected.Stages.Length, actual.Stages.Length);

            for (int i = 0; i < actual.Stages.Length; i++)
            {
                var aStage = actual.Stages[i];
                var eStage = expected.Stages[i];

                Assert.AreNotEqual(eStage, aStage);

                Assert.AreEqual(aStage.NextIndex, eStage.NextIndex);
                Assert.AreEqual(aStage.ParentIndex, eStage.ParentIndex);
                Assert.AreEqual(aStage.Threshold, eStage.Threshold);

                Assert.AreEqual(aStage.Trees.Length, eStage.Trees.Length);

                for (int j = 0; j < aStage.Trees.Length; j++)
                {
                    var aTree = aStage.Trees[j];
                    var eTree = eStage.Trees[j];

                    Assert.AreNotEqual(eTree, aTree);
                    Assert.AreEqual(eTree.Length, aTree.Length);

                    for (int k = 0; k < aTree.Length; k++)
                    {
                        var aNode = aTree[k];
                        var eNode = eTree[k];

                        Assert.AreNotEqual(eNode, aNode);
                        Assert.AreEqual(eNode.LeftNodeIndex, aNode.LeftNodeIndex);
                        Assert.AreEqual(eNode.LeftValue, aNode.LeftValue);
                        Assert.AreEqual(eNode.RightNodeIndex, aNode.RightNodeIndex);
                        Assert.AreEqual(eNode.RightValue, aNode.RightValue, 1e-16);
                        Assert.AreEqual(eNode.Threshold, aNode.Threshold, 1e-16);
                        Assert.IsFalse(double.IsNaN(aNode.Threshold));

                        Assert.AreEqual(eNode.Feature.Tilted, aNode.Feature.Tilted);
                        Assert.AreEqual(eNode.Feature.Rectangles.Length, aNode.Feature.Rectangles.Length);

                        for (int l = 0; l < eNode.Feature.Rectangles.Length; l++)
                        {
                            var aRect = aNode.Feature.Rectangles[l];
                            var eRect = eNode.Feature.Rectangles[l];

                            Assert.AreNotEqual(eRect, aRect);
                            Assert.AreEqual(eRect.Area, aRect.Area, 1e-16);
                            Assert.AreEqual(eRect.Height, aRect.Height, 1e-16);
                            Assert.AreEqual(eRect.Weight, aRect.Weight, 1e-16);
                            Assert.AreEqual(eRect.Width, aRect.Width, 1e-16);
                            Assert.AreEqual(eRect.X, aRect.X);
                            Assert.AreEqual(eRect.Y, aRect.Y);

                            Assert.IsFalse(double.IsNaN(aRect.Height));
                            Assert.IsFalse(double.IsNaN(aRect.Width));
                            Assert.IsFalse(double.IsNaN(aRect.Area));
                        }
                    }
                }
            }
        }