Как заставить тессеракт распознавать только цифры, когда они смешаны с буквами? - PullRequest
51 голосов
/ 09 февраля 2011

Я хочу использовать tesseract для распознавания только чисел.Проблема в том, что у меня есть смесь цифр и букв, и когда я использую SetVariable("tessedit_char_whitelist", "0123456789")
для каждого символа, tesseract возвращает неверную цифру.

Можно ли установить пороговое значение, чтобы tesseract пропускал символынизкое сходство?

ПРИМЕЧАНИЕ: я установил tesseract для распознавания только цифр, чтобы не было путаницы между O и 0.

Ответы [ 8 ]

38 голосов
/ 21 сентября 2011

Ответ о распознавании только чисел на странице часто задаваемых вопросов . См. Эту страницу для получения дополнительной информации, но если у вас есть пакет версии 3, файлы конфигурации уже настроены. Вы просто указываете в командной строке:

tesseract image.tif outputbase nobatch digits

Что касается порогового значения, я не уверен, что вы имеете в виду. Если вы используете нестандартный шрифт, возможно, вам стоит переучиться на образец вашего ввода. Альтернативой является изменение порога обрезки тессеракта. Обе опции также упоминаются в FAQ.

12 голосов
/ 12 апреля 2013

Для tesseract 3 команда проще tesseract imagename outputbase digits в соответствии с FAQ .Но у меня это не очень хорошо работает.

Я перехожу, чтобы попробовать другие варианты psm и нахожу, что -psm 6 лучше всего подходит для моего случая.

man tesseract для деталей.

10 голосов
/ 18 июля 2014

Для tesseract 3 я пытаюсь создать конфигурационный файл согласно FAQ.

ДО вызова функции Init или помещения ее в текстовый файл с именем tessdata/configs/digits:

tessedit_char_whitelist 0123456789                 

, затем она работает с помощью команды: tesseract imagename outputbase digits

8 голосов
/ 15 декабря 2016

Если кто-то хочет соответствовать 0-9

tesseract myimage.png stdout -c tessedit_char_whitelist=0123456789

Или, если кто-то почти хочет соответствовать 0-9, но с одним или несколькими разными символами

tesseract myimage.png stdout -c tessedit_char_whitelist=01234ABCDE
7 голосов
/ 09 декабря 2016

Я сделал это немного по-другому (с тесс-два). Может быть, это кому-нибудь пригодится.

Итак, вам нужно сначала инициализировать API.

TessBaseAPI baseApi = new TessBaseAPI();
baseApi.init(datapath, language, ocrEngineMode);

Затем установите следующие переменные

baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);
baseApi.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST, "!?@#$%&*()<>_-+=/:;'\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
baseApi.setVariable(TessBaseAPI.VAR_CHAR_WHITELIST, ".,0123456789");
baseApi.setVariable("classify_bln_numeric_mode", "1");

Таким образом, двигатель будет проверять только цифры.

3 голосов
/ 02 ноября 2013

Вы можете указать tesseract использовать только цифры, и если это не достаточно точно, то лучший шанс получить лучшие результаты - пройти процесс обучения: http://www.resolveradiologic.com/blog/2013/01/15/training-tesseract/

1 голос
/ 24 апреля 2019

Эта функция не поддерживается в версии 4. Вы по-прежнему можете использовать ее через -c tessedit_char_whitelist = 0123456789 с параметром --oem 0, который возвращает старую модель.

Существует щедрость для решения этой проблемы.

Возможные обходные пути:

Как указано @ amitdo

0 голосов
/ 09 августа 2015

Что я делаю, так это распознаю все, и когда у меня есть текст, я вынимаю все символы, кроме цифр

//This replaces all except numbers from 0 to 9
recognizedText = recognizedText.replaceAll("[^0-9]+", " ");

Это прекрасно работает для меня.

...