Пример #1
0
        /// <summary>
        /// Learn new style based on a clear page with separated letters from whole alphabet. Letters as on keyboard.
        /// Last 2 letters are dot and comma
        /// </summary>
        /// <param name="file">Path to file with letters.</param>
        public void AcknowledgeNewStyle(string file, RecognitionModel model)
        {
            List <ImageMatrix> letters = null;

            if (model == RecognitionModel.FixedSize)
            {
                letters = new MatrixSplitter(file).Letters;
            }
            else if (model == RecognitionModel.Resizing)
            {
                ImageMatrix main = new ImageMatrix(new Bitmap(Image.FromFile(file)));
                SubMatrix   sub  = new SubMatrix(main.Matrix, new Rectangle {
                    X = 0, Y = 0, Height = main.Height, Width = main.Width
                });
                var letterSplitter = new LetterSplitter(sub);
                letters = GetLines(sub).SelectMany(line => GetLetters(line, letterSplitter)).Select(s => s.ToFullMatrix()).ToList();
            }
            var fileName    = file.Substring(file.LastIndexOf(Path.DirectorySeparatorChar) + 1);
            var woExtension = fileName.Substring(0, fileName.IndexOf('.'));
            var placeInDB   = DataCollector.GenerateFontFolder(woExtension, model);
            int i           = 0;

            foreach (var l in letters.Take(letters.Count - 2))
            {
                l.Character = NextChar(i++);
            }
            SaveMatricesToDirectory(placeInDB, letters);
        }
Пример #2
0
        private List <SubMatrix> GetLetters(SubMatrix line, LetterSplitter letterSplitter)
        {
            letterSplitter.SetNewMatrix(line);
            var letters = letterSplitter.GetLetters();

            //letters.Insert(0, line);
            return(letters);
        }
Пример #3
0
        /// <summary>
        /// Clear, split to lines, split to letters.
        /// </summary>
        /// <param name="mainMatrix">Main image</param>
        /// <returns>Lines with letters, first letter is always the line</returns>
        private List <List <SubMatrix> > FindLettersToLines(ImageMatrix mainMatrix)
        {
            var matrix                = GetClearedTextMatrix(mainMatrix);
            var lines                 = GetLines(matrix);
            var letterSplitter        = new LetterSplitter(matrix);
            var resultLinesAndLetters = lines.Select(l => GetLetters(l, letterSplitter)).ToList();

            return(resultLinesAndLetters);
        }
Пример #4
0
        public void TestSpaceRecognition()
        {
            PrepareImage();
            testName = "SpaceRecognition";
            var firstLine      = GetLines().First();
            var letterSplitter = new LetterSplitter(firstLine);
            var letters        = letterSplitter.GetLetters();

            TEST(letters.Where(m => m == null).Count() == 3, $"Didnt find 3 required spaces, found {letters.Where(m => m == null).Count()}");
        }
Пример #5
0
        private List <List <SubMatrix> > GetLetters(List <SubMatrix> lines)
        {
            LetterSplitter splitter  = new LetterSplitter(lines.First());
            var            firstLine = splitter.GetLetters();

            lines.RemoveAt(0);
            var letters = lines.Select(l => { splitter.SetNewMatrix(l); return(splitter.GetLetters()); }).ToList();

            letters.Insert(0, firstLine);
            letters.ForEach(l => l.RemoveAll(r => r == null));
            return(letters);
        }
Пример #6
0
        /// <summary>
        /// Retrieves letters ignoring spaces, so outcome is a line of text.
        /// </summary>
        /// <param name="pathToImage"></param>
        /// <returns></returns>
        public IEnumerable <Bitmap> ParseToLettersImages(string pathToImage)
        {
            var            mainMatrix = new ImageMatrix(new Bitmap(Image.FromFile(pathToImage)));
            var            clr        = GetClearedTextMatrix(mainMatrix);
            var            lines      = GetLines(clr);
            LetterSplitter splitter   = new LetterSplitter(clr);
            var            letters    = lines.SelectMany(l => {
                splitter.SetNewMatrix(l);
                return(splitter.GetLetters());
            });
            List <SubMatrix> summarize = new List <SubMatrix> {
                clr
            };

            summarize.AddRange(lines);
            summarize.AddRange(letters);
            var crt = new ImageCreator();

            return(summarize.Select(a => crt.CreateImageOutOfMatrix(a)));
        }