Подтвердить что ты не робот

Как заставить tesseract распознавать только числа, когда они смешиваются с буквами?

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

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

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

4b9b3361

Ответ 1

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

tesseract image.tif outputbase nobatch digits

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

Ответ 2

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

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

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

Ответ 3

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

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

tessedit_char_whitelist 0123456789                 

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

Ответ 4

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

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

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

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

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

Таким образом, двигатель проверяет только числа.

Ответ 5

Если нужно совместить 0-9

tesseract myimage.png stdout -c tessedit_char_whitelist=0123456789

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

tesseract myimage.png stdout -c tessedit_char_whitelist=01234ABCDE

Ответ 6

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

Ответ 7

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

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

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

Как заявлено @amitdo

Ответ 8

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

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

Это очень хорошо для меня.