/// <summary> /// Constructs a new Haar object detector. /// </summary> /// /// <param name="cascade"> /// The <see cref="Lenneth.Core.Framework.ImageProcessor.Imaging.Filters.ObjectDetection.HaarCascade"/> to use in the detector's classifier. /// For the default face cascade, please take a look on /// <see cref="Cascades.FaceHaarCascade"/>. </param> /// <param name="minSize"> /// Minimum window size to consider when searching for /// objects. Default value is <c>15</c>.</param> /// <param name="searchMode">The <see cref="ObjectDetectorSearchMode"/> to use /// during search. Please see documentation of <see cref="ObjectDetectorSearchMode"/> /// for details. Default is <see cref="ObjectDetectorSearchMode.NoOverlap"/>.</param> /// <param name="scaleFactor">The scaling factor to rescale the window /// during search. Default value is <c>1.2f</c>.</param> /// <param name="scalingMode">The <see cref="ObjectDetectorScalingMode"/> to use /// when re-scaling the search window during search. Default is /// <see cref="ObjectDetectorScalingMode.SmallerToGreater"/>.</param> /// public HaarObjectDetector(HaarCascade.HaarCascade cascade, int minSize, ObjectDetectorSearchMode searchMode, float scaleFactor, ObjectDetectorScalingMode scalingMode) { _classifier = new HaarClassifier(cascade); this._minSize = new Size(minSize, minSize); this._searchMode = searchMode; ScalingMode = scalingMode; _factor = scaleFactor; _detectedObjects = new List <Rectangle>(); _baseWidth = cascade.Width; _baseHeight = cascade.Height; _match = new RectangleGroupMatching(0, 0.2); }
/// <summary> /// Writes the specified cascade. /// </summary> /// <param name="cascade">The cascade to write.</param> /// <param name="className">The name for the generated class.</param> /// public void Write(HaarCascade cascade, string className) { for (var i = 0; i < cascade.Stages.Length; i++) { for (var j = 0; j < cascade.Stages[i].Trees.Length; j++) { if (cascade.Stages[i].Trees[j].Length != 1) { throw new ArgumentException("Only cascades with single node trees are currently supported."); } } } _writer.WriteLine("// This file has been automatically transcribed by the"); _writer.WriteLine("//"); _writer.WriteLine("// Accord Vision Library"); _writer.WriteLine("// The Accord.NET Framework"); _writer.WriteLine("// http://accord-framework.net"); _writer.WriteLine("//"); _writer.WriteLine(); _writer.WriteLine("namespace HaarCascades"); _writer.WriteLine("{"); _writer.WriteLine(" using System.CodeDom.Compiler;"); _writer.WriteLine(" using System.Collections.Generic;"); _writer.WriteLine(); _writer.WriteLine(" /// <summary>"); _writer.WriteLine(" /// Automatically generated haar-cascade definition"); _writer.WriteLine(" /// to use with the Accord.NET Framework object detectors."); _writer.WriteLine(" /// </summary>"); _writer.WriteLine(" /// "); _writer.WriteLine(" [GeneratedCode(\"Accord.NET HaarCascadeWriter\", \"2.7\")]"); _writer.WriteLine(" public class {0} : Accord.Vision.Detection.HaarCascade", className); _writer.WriteLine(" {"); _writer.WriteLine(); _writer.WriteLine(" /// <summary>"); _writer.WriteLine(" /// Automatically generated transcription"); _writer.WriteLine(" /// </summary>"); _writer.WriteLine(" public {0}()", className); _writer.WriteLine(" : base({0}, {1})", cascade.Width, cascade.Height); _writer.WriteLine(" {"); _writer.WriteLine(" List<HaarCascadeStage> stages = new List<HaarCascadeStage>();"); _writer.WriteLine(" List<HaarFeatureNode[]> nodes;"); _writer.WriteLine(" HaarCascadeStage stage;"); _writer.WriteLine(); if (cascade.HasTiltedFeatures) { _writer.WriteLine(" HasTiltedFeatures = true;"); _writer.WriteLine(); } // Write cascade stages for (var i = 0; i < cascade.Stages.Length; i++) { WriteStage(i, cascade.Stages[i]); } _writer.WriteLine(); _writer.WriteLine(" Stages = stages.ToArray();"); _writer.WriteLine(" }"); _writer.WriteLine(" }"); _writer.WriteLine("}"); }
/// <summary> /// Constructs a new classifier. /// </summary> /// public HaarClassifier(HaarCascade cascade) { _cascade = cascade; }
/// <summary> /// Constructs a new Haar object detector. /// </summary> /// /// <param name="cascade"> /// The <see cref="Lenneth.Core.Framework.ImageProcessor.Imaging.Filters.ObjectDetection.HaarCascade"/> to use in the detector's classifier. /// For the default face cascade, please take a look on /// <see cref="Cascades.FaceHaarCascade"/>.</param> /// <param name="minSize"> /// Minimum window size to consider when searching for /// objects. Default value is <c>15</c>.</param> /// <param name="searchMode"> /// The <see cref="ObjectDetectorSearchMode"/> to use /// during search. Please see documentation of <see cref="ObjectDetectorSearchMode"/> /// for details. Default value is <see cref="ObjectDetectorSearchMode.NoOverlap"/></param> /// <param name="scaleFactor">The re-scaling factor to use when re-scaling the window during search.</param> /// public HaarObjectDetector(HaarCascade.HaarCascade cascade, int minSize, ObjectDetectorSearchMode searchMode, float scaleFactor) : this(cascade, minSize, searchMode, scaleFactor, ObjectDetectorScalingMode.SmallerToGreater) { }
/// <summary> /// Constructs a new Haar object detector. /// </summary> /// /// <param name="cascade"> /// The <see cref="Lenneth.Core.Framework.ImageProcessor.Imaging.Filters.ObjectDetection.HaarCascade"/> to use in the detector's classifier. /// For the default face cascade, please take a look on /// <see cref="Cascades.FaceHaarCascade"/>. /// </param> /// <param name="minSize"> /// Minimum window size to consider when searching for /// objects. Default value is <c>15</c>.</param> /// <param name="searchMode">The <see cref="ObjectDetectorSearchMode"/> to use /// during search. Please see documentation of <see cref="ObjectDetectorSearchMode"/> /// for details. Default value is <see cref="ObjectDetectorSearchMode.NoOverlap"/></param> /// public HaarObjectDetector(HaarCascade.HaarCascade cascade, int minSize, ObjectDetectorSearchMode searchMode) : this(cascade, minSize, searchMode, 1.2f) { }
/// <summary> /// Constructs a new Haar object detector. /// </summary> /// /// <param name="cascade"> /// The <see cref="Lenneth.Core.Framework.ImageProcessor.Imaging.Filters.ObjectDetection.HaarCascade"/> to use in the detector's classifier. /// For the default face cascade, please take a look on /// <see cref="Cascades.FaceHaarCascade"/>.</param> /// <param name="minSize"> /// Minimum window size to consider when searching for /// objects. Default value is <c>15</c>.</param> /// public HaarObjectDetector(HaarCascade.HaarCascade cascade, int minSize) : this(cascade, minSize, ObjectDetectorSearchMode.NoOverlap) { }
/// <summary> /// Constructs a new Haar object detector. /// </summary> /// /// <param name="cascade"> /// The <see cref="Lenneth.Core.Framework.ImageProcessor.Imaging.Filters.ObjectDetection.HaarCascade"/> to use in the detector's classifier. /// For the default face cascade, please take a look on /// <see cref="Cascades.FaceHaarCascade"/>. /// </param> /// public HaarObjectDetector(HaarCascade.HaarCascade cascade) : this(cascade, 15) { }