コード例 #1
0
ファイル: Program.cs プロジェクト: Yozer/CodesReader
        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);
                        }
                    }
                }
            });
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: Yozer/CodesReader
        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);
            }
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: Yozer/CodesReader
        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]];
                            }
                        }
                    }
                }
            });
        }
コード例 #4
0
ファイル: Form1.cs プロジェクト: Yozer/CodesReader
        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";
                }
            }
        }