Привет, я здесь новичок.
Во-первых, мне нужно нарисовать прямоугольник на каждом символе слова из изображения.
в старой версии тессеракта я обнаружил, что мы можем получить доступ к каждому персонажу с помощью
foreach (tessnet2.Character c в word.CharList)
e.Graphics.DrawRectangle ..........
Но теперь я работаю над Winform C # с Tesseract 3.02
TesseractEngine a = новый TesseractEngine (@ "./ tessdata", "eng", EngineMode.TesseractAndCube);
Tesseract.Page page1 = a.Process (изображение);
foreach (....... на странице 1)
{
// рисуем прямоугольник из (ограничивающего прямоугольника каждого символа)
}
Вопрос 1: как получить доступ к каждому символу страницы page1.
Я пробую много методов, таких как PageIteratorLevel, и получаю некоторую часть страницы, такую как первая строка, первое слово или первый блок, но я не могу получить их первый символ.
Что ж, я заметил, что в тексте результата HOCRtext со страницы 1 каждый элемент, такой как слово, строка, блок, имеет значение Bounding box.
Вопрос 2: как получить значение ограничивающего прямоугольника каждого элемента. (Я нашел только 1 метод "TryGetBoundingBox", который возвращает только логическое значение.
Спасибо.
Ознакомьтесь с предоставленным образцом консоли, поскольку он дает пример того, как перебирать результаты, однако должно работать что-то вроде следующего:
using (var iter = page.GetIterator()) {
do {
do {
do {
if (iter.IsAtBeginningOf(PageIteratorLevel.Block)) {
// do whatever you need to do when a block (top most level result) is encountered.
}
if (iter.IsAtBeginningOf(PageIteratorLevel.Para)) {
// do whatever you need to do when a paragraph is encountered.
}
if (iter.IsAtBeginningOf(PageIteratorLevel.TextLine)) {
// do whatever you need to do when a line of text is encountered is encountered.
}
if (iter.IsAtBeginningOf(PageIteratorLevel.Word)) {
// do whatever you need to do when a word is encountered is encountered.
}
// get bounding box for symbol
Rect symbolBounds;
if(iter.TryGetBoundingBox(PageIteratorLevel.Symbol, out symbolBounds)) {
// do whatever you want with bounding box for the symbol
}
} while(iter.Next(PageIteratorLevel.Word, PageIteratorLevel.Block));
} while (iter.Next(PageIteratorLevel.TextLine, PageIteratorLevel.Word));
} while (iter.Next(PageIteratorLevel.Para, PageIteratorLevel.TextLine));
}
Обратите внимание, что общая иерархия результатов выглядит следующим образом:
Блок -> Пара -> Текстовая строка -> Слово -> Символ
Т.е. набор результатов может содержать много блоков, которые, в свою очередь, могут содержать много абзацев и так далее.
Как указано выше, метод TryGetBoundingBox
возвращает границы в параметре out. Как и Dictionary.TryGetValue
.
Привет Чарльз,
Надеюсь, у тебя все хорошо.
Я новичок в этом материале, я могу получить требуемый текст с небольшого изображения или тестового изображения, но не с фактического изображения:
как извлечь номер BIB из фотографии.
Как распознать область BIB # на всей фотографии.
Спасибо.
Используйте opencv, чтобы найти и обрезать область. Есть парень с демонстрациями, написанными на Python, которые не так уж сложно перевести на .net.
Самый полезный комментарий
Ответ для Q1:
Ознакомьтесь с предоставленным образцом консоли, поскольку он дает пример того, как перебирать результаты, однако должно работать что-то вроде следующего:
Обратите внимание, что общая иерархия результатов выглядит следующим образом:
Блок -> Пара -> Текстовая строка -> Слово -> Символ
Т.е. набор результатов может содержать много блоков, которые, в свою очередь, могут содержать много абзацев и так далее.
Ответ на вопрос 2:
Как указано выше, метод
TryGetBoundingBox
возвращает границы в параметре out. Как иDictionary.TryGetValue
.