我正在尝试识别一行手写数字。目前我使用 Python 和 OpenCV 进行一些预处理,将图像拆分为连接的组件,并将这些组件提供给 Tesseract,PSM=10(页面分割模式,10 是“将图像视为单个字符”)和限制为“0123456789”的字符白名单”。我希望 Tesseract 在我的连接组件分割失败时返回垃圾,并在我的分割成功时返回一个数字。Tesseract 通常什么都不返回。
我已经尝试将pytesseract和python-tesseract作为 Python 的 Tesseract 接口。Pytesseract 的工作原理是找到可执行文件tesseract.exe
,使用 shell 中的合适参数运行它并收集答案。这就是我发现我的问题的方式。之后,我尝试了 python-tesseract,它实现了一个成熟的 C API。结果自然是一样的。
下面是我分别输入 Tesseract 的 5 张图片的示例(我还在这里上传了相同的图片作为单独的文件):
我在这些图像上得到 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 给我一些答案而不是什么都没有?