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); } } } }
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); }
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); }
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); }
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(); }
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)); } } } } }