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