Я пытаюсь распознать одну строку рукописных цифр. В настоящее время я выполняю некоторую предварительную обработку с помощью Python и OpenCV, разделяю изображение на связанные компоненты и передаю эти компоненты в Tesseract с PSM = 10 (режим сегментации страницы, 10 означает «обращаться с изображением как с одним символом»), а белый список символов ограничен «0123456789». ". Я ожидаю, что Tesseract вернет мусор, когда моя сегментация подключенного компонента не удалась, и вернет ровно одну цифру, когда моя сегментация будет успешной. Tesseract часто вообще ничего не возвращает.
Я пробовал как pytesseract, так и python-tesseract в качестве интерфейса Tesseract для Python. Pytesseract работает, находя исполняемый файл tesseract.exe
, запуская его с подходящими параметрами из оболочки и собирая ответ. Так я узнал о своей проблеме. После этого я попробовал python-tesseract, который реализует полноценный C API. Естественно, результат был тот же.
Ниже приведен образец из 5 изображений, которые я загружал в Tesseract по отдельности (я также загрузил те же изображения в виде отдельных файлов здесь):
На этих изображениях я получаю 1,*,4,*,*, что означает, что Tesseract возвращает только пробелы.
С другими режимами сегментации страниц я получаю следующее:
PSM_SINGLE_CHAR: 1*4**
PSM_SINGLE_BLOCK_VERT_TEXT: **43*
PSM_CIRCLE_WORD: 11***
PSM_SINGLE_LINE: 11491
PSM_AUTO: *****
PSM_SPARSE_TEXT: *****
PSM_SINGLE_WORD: 11499
PSM_AUTO_ONLY: *****
PSM_SINGLE_COLUMN: *****
PSM_SPARSE_TEXT_OS: *****
PSM_SINGLE_BLOCK: 11499
PSM_OSD_ONLY: *****
PSM_AUTO_OSD: *****
PSM_COUNT: 11499
Как ни странно, когда я запускаю tesseract image.png image -l eng -psm 10 digits-only
для этих изображений, он возвращает *,*,4,9,*. (digits-only
это tessedit_char_whitelist 0123456789
)
Как заставить Tesseract дать мне какой-то ответ, а не вообще ничего?