public void Write(HaarCascade cascade, string className)
{
for (int i = 0; i < cascade.Stages.Length; i++)
for (int 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 (int 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("}");
}