private static void SegmentCodes() { IImageProcessor processor = new ImageProcessorOpenCv(); Directory.EnumerateFiles(@"D:\dataset\easy\second_try_c_sharp\not_splited").ToList().ForEach(File.Delete); Directory.EnumerateFiles(@"D:\dataset\easy\second_try_c_sharp\not_segmented").ToList().ForEach(File.Delete); Directory.EnumerateFiles(@"D:\dataset\easy\second_try_c_sharp\read_and_segmented").ToList().ForEach(File.Delete); Parallel.ForEach(Directory.EnumerateFiles(@"D:\dataset\easy\read"), new ParallelOptions { MaxDegreeOfParallelism = 8 }, file => { using (var result = processor.SegmentCode(file)) { if (result.SegmentedCode == null) { File.Copy(file, @"D:\dataset\easy\second_try_c_sharp\not_segmented\" + Path.GetFileName(file), true); } else { result.SegmentedCode.Save(@"D:\dataset\easy\second_try_c_sharp\read_and_segmented\" + Path.GetFileName(file), ImageFormat.Jpeg); if (result.Letters == null) { File.Copy(file, @"D:\dataset\easy\second_try_c_sharp\not_splited\" + Path.GetFileName(file), true); } } } }); }
private static void SegmentAndSplitOneCode(string path, string target = @"D:\tmp") { IImageProcessor processor = new ImageProcessorOpenCv(); var result = processor.SegmentCode(path); string x = Path.GetFileNameWithoutExtension(path).Replace("-", string.Empty); result.SegmentedCode.Save(Path.Combine(target, "test.bmp"), ImageFormat.Bmp); for (int i = 0; i < x.Length; ++i) { result.Letters[i].Save(Path.Combine(target, x[i] + ".bmp"), ImageFormat.Bmp); } }
private static void PrepareData() { // validation set IImageProcessor processor = new ImageProcessorOpenCv(); var skip = new HashSet <string>(Directory.EnumerateFiles(@"C:\grzego\input").Select(Path.GetFileNameWithoutExtension)); var enu = new List <string>(Directory.EnumerateFiles(@"C:\grzego\read")).Where(t => !skip.Contains(Path.GetFileNameWithoutExtension(t))).ToList(); var dic = new Dictionary <char, int>(); Shuffle(enu); Parallel.ForEach(enu.Take(500), new ParallelOptions { MaxDegreeOfParallelism = 1 }, file => { using (var result = processor.SegmentCode(file)) { string code = Path.GetFileNameWithoutExtension(file).Replace("-", ""); if (result.SegmentedCode != null) { if (result.Letters != null) { for (int i = 0; i < 25; ++i) { if (!dic.ContainsKey(code[i])) { dic.Add(code[i], 0); } result.Letters[i].Save(@"C:\grzego\validation_set\" + code[i] + $"_{dic[code[i]]}.bmp", ImageFormat.Bmp); ++dic[code[i]]; } } } } }); dic = new Dictionary <char, int>(); Parallel.ForEach(Directory.EnumerateFiles(@"C:\grzego\input"), new ParallelOptions { MaxDegreeOfParallelism = 1 }, file => { using (var result = processor.SegmentCode(file)) { string code = Path.GetFileNameWithoutExtension(file).Replace("-", ""); if (result.SegmentedCode != null) { if (result.Letters != null) { for (int i = 0; i < 25; ++i) { if (!dic.ContainsKey(code[i])) { dic.Add(code[i], 0); } result.Letters[i].Save(@"C:\grzego\training_set\" + code[i] + $"_{dic[code[i]]}.bmp", ImageFormat.Bmp); ++dic[code[i]]; } } } } }); }
private void selectImage_Click(object sender, EventArgs e) { segmentedImage.Image?.Dispose(); foreach (var pictureBox in _boxes) { pictureBox.Image?.Dispose(); pictureBox.Image = null; pictureBox.BorderStyle = BorderStyle.None; } _textboxes.ForEach(t => t.Text = string.Empty); using (OpenFileDialog ofd = new OpenFileDialog()) { if (ofd.ShowDialog() == DialogResult.OK) { var bmp = Image.FromFile(ofd.FileName); if (bmp.Width < bmp.Height) { bmp.RotateFlip(RotateFlipType.Rotate270FlipNone); } originalImage.Image = bmp; IImageProcessor processor = new ImageProcessorOpenCv(); var result = processor.SegmentCode(ofd.FileName); segmentedImage.Image = result.SegmentedCode; for (int i = 0; i < result.Letters.Count; i++) { _boxes[i].Image = result.Letters[i]; } if (result.SegmentedCode == null || result.Letters == null || result.Letters.Count != 25) { resultLbl.Text = "Accuracy: 0/25"; return; } _classifier.Recognize(new List <ComputeResult> { result }); string correctCode = Path.GetFileNameWithoutExtension(result.ImagePath).Replace("-", string.Empty); int incorrect = 0; for (int i = 0; i < result.Letters.Count; i++) { _textboxes[i].Text = result.PredictedCodeLetters[i].ToString(); if (correctCode[i] != result.PredictedCodeLetters[i]) { _boxes[i].ForeColor = _textboxes[i].ForeColor = Color.Red; ++incorrect; } else { _boxes[i].ForeColor = _textboxes[i].ForeColor = Color.Black; } } resultLbl.Text = $"Accuracy: {25 - incorrect}/25"; } } }