/// <summary> /// Wygenerowanie cech haara dla przykładów negatywnych /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void toolStripMenuItem6_Click(object sender, EventArgs e) { this.toolStripStatusLabel1.Text = "Analiza przykładów negatywnych:"; Cursor.Current = Cursors.WaitCursor; this.Update(); // Process the list of files found in the directory. string[] fileEntries = Directory.GetFiles("negative\\"); List<double[]> ArgH = new List<double[]>(); s = Convert.ToInt32(this.toolStripTextBox5.Text); p = Convert.ToInt32(this.toolStripTextBox6.Text); scaling = Convert.ToDouble(this.toolStripTextBox2.Text); ratio = Convert.ToDouble(this.toolStripTextBox4.Text); Haar twarz = new Haar(); twarz.InicializeGenerator(this.s, this.p); if (paralel) { Task.Factory.StartNew(() => { Parallel.For(0, fileEntries.Length, i => { try { //this.toolStripProgressBar1.Value = i * 100 / images; Bitmap pic = ConvertToBitmap(fileEntries[i]); for (int k = 0; k < 3; k++) for (int l = 0; l < 3; l++) { twarz.InicializeImage(this.getSingleFace(pic, new double[] { pic.Width / 3 * k, pic.Height / 3 * l, pic.Width / 3, pic.Height / 3 })); ArgH.Add(twarz.allHarrFeatures()); } } catch { //MessageBox.Show("Jakiś problem ze zrównolegleniem."); } }); }).Wait(); } else { int currentline = 0; foreach (string fileName in fileEntries) { currentline++; this.toolStripProgressBar1.Value = currentline * 100 / fileEntries.Length; Bitmap pic = ConvertToBitmap(fileName); for (int k = 0; k < 3; k++) for (int l = 0; l < 3; l++) { twarz.InicializeImage(this.getSingleFace(pic, new double[] { pic.Width / 3 * k, pic.Height / 3 * l, pic.Width / 3, pic.Height / 3 })); ArgH.Add(twarz.allHarrFeatures()); } } } //Zapis wyestrahowanych cech do pliku try { StreamWriter writer = new StreamWriter("negative.txt"); foreach (double[] cecha in ArgH) { writer.WriteLine(String.Join(" ", cecha)); } writer.Close(); } catch { MessageBox.Show("Nie udało się zapisać cech Haara do pliku :("); } Cursor.Current = Cursors.Default; MessageBox.Show("Przeanalizowano "+ ArgH.Count +" twarzy z "+ fileEntries .Length+ " obrazów."); this.toolStripStatusLabel1.Text = "Gotowe."; }
/// <summary> /// Wyliczenie cech Haara dla pliku /// </summary> /// <param name="Picture">Plik obrazu</param> /// <param name="parameters">parametry z ObjectMakera</param> /// <returns></returns> private List<double[]> HaarFeatures(string Picture, string[] parameters) { List<double[]> ArgH = new List<double[]>(); Haar twarz = new Haar(); twarz.InicializeGenerator(this.s, this.p); for (int i = 0 ; i < Convert.ToInt32(parameters[1]); i++) { try { twarz.InicializeImage(this.getSingleFace(new Bitmap(Picture), new double[] { Convert.ToDouble(parameters[4*i+2]), Convert.ToDouble(parameters[4 * i + 3]), Convert.ToDouble(parameters[4 * i + 4]), Convert.ToDouble(parameters[4 * i + 5]) })); } catch { MessageBox.Show("Niepoprawne parametry dla pliku: " + Picture); } ArgH.Add(twarz.allHarrFeatures()); } return ArgH; }