/// <summary> /// Get the needed data of the file /// </summary> /// <param name="file">The file to use</param> /// <param name="type">Type of the file</param> /// <returns></returns> private string GenerateData(string file, ImageType type) { try { Bitmap bitmap = new Bitmap(file); Histogram h = new Histogram(bitmap); long[] a = h.GetData("LUM"); bitmap.Dispose(); String output = ""; foreach (long i in a) { output += i + ","; } output += type.ToString(); filesDone++; PartProcessed?.Invoke(filesDone + "/" + this.fileAmount + " Added " + file); return(output); } catch (Exception e) { filesDone++; PartProcessed?.Invoke(filesDone + "/" + this.fileAmount + " Error using " + file); Console.WriteLine("Error making histogram from image " + e); return(null); } }
/// <summary> /// Create a basic weka file /// </summary> private void CreateFile() { using (StreamWriter file = File.AppendText(Location)) { file.WriteLine("@relation ClipartClassifier"); for (int i = 0; i <= 255; i++) { file.WriteLine("@attribute " + i + " numeric"); } file.WriteLine("@attribute type {Clipart, Normal}"); file.WriteLine("@DATA"); } PartProcessed?.Invoke("Created file at " + Location); }
/// <summary> /// generate the data using the files in the lists /// </summary> public void Generate() { CreateFile(); this.filesDone = 0; this.fileAmount = this.Files[ImageType.Normal].Count + this.Files[ImageType.Clipart].Count; foreach (string file in this.Files[ImageType.Normal]) { AddDataToFile(GenerateData(file, ImageType.Normal)); } foreach (string file in this.Files[ImageType.Clipart]) { AddDataToFile(GenerateData(file, ImageType.Clipart)); } PartProcessed?.Invoke("Finished"); }