示例#1
0
        private void FindText(OcrData ocrData, float tolerance, FoundCharacterData previousCharacterData, List<char> foundChars)
        {
            foreach (CharacterDataSet characterDataSet in ocrData.TrainedCharacterDataSets)
            {
                List<FoundCharacterData> foundCharacterDatas = InternalFindCharacterDataSet(characterDataSet, tolerance, previousCharacterData).ToList();

                if (foundCharacterDatas.Any())
                {
                    foundChars.Add(foundCharacterDatas[0].CharacterData.Letter);
                    FindText(ocrData, tolerance, foundCharacterDatas[0], foundChars);
                }

            }
        }
示例#2
0
        private IEnumerable<FoundCharacterData> InternalFindCharacterDataSet(CharacterDataSet characterDataSet, float tolerance, FoundCharacterData previousCharacterData = null)
        {
            int startX = 0;
            int startY = 0;
            int maxX = neighborDifferences.GetLength(1);
            int maxY = neighborDifferences.GetLength(0);

            if (previousCharacterData != null)
            {
                startY = Math.Max(0, previousCharacterData.Point.Y + previousCharacterData.CharacterData.HeightFromWritingLine - characterDataSet.MaxHeight);
                startX = Math.Min(bitmap.Width, previousCharacterData.Point.X + previousCharacterData.CharacterData.Width - 2);

                maxX = startX + characterDataSet.MaxWidth+3;
                maxY = startY + characterDataSet.MaxHeight * 2;
            }

            List<FoundCharacterData> foundCharacterDatas = new List<FoundCharacterData>();

            for (int y = startY; y < maxY; y++)
            {
                for (int x = startX; x < maxX; x++)
                {
                    CharacterData characterData = CharacterMatchAtPoint(x, y, characterDataSet, tolerance);

                    if (characterData != null)
                    {
                        FoundCharacterData foundCharacterData = new FoundCharacterData
                        {
                            Point = new Point(x, y),
                            CharacterData = characterData
                        };

                        if(!foundCharacterDatas.Any(f => f.Bounds.IntersectsWith(foundCharacterData.Bounds)))
                            yield return foundCharacterData;

                    }
                }
            }
        }
示例#3
0
        private FoundCharacterData FindCharacterDataSet(CharacterDataSet characterDataSet, float tolerance, FoundCharacterData previousCharacterData)
        {
            int startY = Math.Max(0, previousCharacterData.Point.Y + previousCharacterData.CharacterData.HeightFromWritingLine - characterDataSet.MaxHeight - 2);
            int startX = Math.Min(bitmap.Width, previousCharacterData.Point.X + previousCharacterData.CharacterData.Width - 2);

            int maxX = startX + characterDataSet.MaxWidth+3;
            int maxY = startY + characterDataSet.MaxHeight * 2;

            for (int y = startY; y < maxY; y++)
            {
                for (int x = startX; x < maxX; x++)
                {
                    CharacterData characterData = CharacterMatchAtPoint(x, y, characterDataSet, tolerance);

                    if (characterData != null)
                    {
                        return new FoundCharacterData
                        {
                            Point = new Point(x, y),
                            CharacterData = characterData
                        };
                    }
                }
            }
            return null;
        }