Как заставить tesseract распознавать только числа, когда они смешиваются с буквами?
Я хочу использовать tesseract
для распознавания только чисел. Проблема в том, что у меня есть смесь цифр и букв и когда я использую SetVariable("tessedit_char_whitelist", "0123456789")
для каждого символа tesseract возвращает неправильную цифру.
Могу ли я установить пороговое значение, чтобы в tesseract
отсутствовали символы с низким сходством?
ПРИМЕЧАНИЕ: я настроил tesseract
на распознавание только цифр, чтобы не было путаницы между O и 0.
Ответы
Ответ 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]+", " ");
Это очень хорошо для меня.