pytesseract 仅使用 tesseract 4.0 数字不起作用

Posted

技术标签:

【中文标题】pytesseract 仅使用 tesseract 4.0 数字不起作用【英文标题】:pytesseract using tesseract 4.0 numbers only not working 【发布时间】:2018-03-16 09:28:52 【问题描述】:

有人试图在python中只调用最新版本的tesseract 4.0来获取数字吗?

以下在 3.05 中工作,但在 4.0 中仍然返回字符,我尝试删除所有配置文件,但仍然没有工作;任何帮助都会很棒:

im 是日期图片,黑字白底:

import pytesseract
im =  imageOfDate
im = pytesseract.image_to_string(im, config='outputbase digits')
print(im)

【问题讨论】:

将图片添加到问题中,让回答者看到您的问题。 我选择了***.com/questions/9413216/…。 @CuriousGeorge:您找到升级问题的解决方案了吗? 升级到 v4.1.1 对我没有帮助。我还必须下载tessdata_fast 版本的trainddata 文件。我附上详细的shell script 从源安装 4.1.1。 【参考方案1】:

您可以指定tessedit_char_whitelist 中的数字作为配置选项,如下所示。

ocr_result = pytesseract.image_to_string(image, lang='eng',config='--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789')

【讨论】:

【参考方案2】:

正如您在this GitHub issue 中看到的,黑名单和白名单不适用于 tesseract 4.0 版。

这个问题有 3 种可能的解决方案,正如我在 this blog article 中描述的那样:

    将 tesseract 更新到版本 > 4.1 使用the answer 中描述的旧模式,来自@thewaywewere

    创建一个使用简单正则表达式提取所有数字的python函数:

    def replace_chars(text):
        list_of_numbers = re.findall(r'\d+', text)
        result_number = ''.join(list_of_numbers)
        return result_number
    
    result_number = pytesseract.image_to_string(im)
    

【讨论】:

谢谢!从源代码更新到版本 4.1.1 已解决问题。 github.com/tesseract-ocr/tesseract/releases【参考方案3】:

在 pytesseract 中使用 tessedit_char_whitelist 标志对我不起作用。但是,一种解决方法是使用一个有效的标志,即 config='digits':

import pytesseract
text = pytesseract.image_to_string(pixels, config='digits')

其中像素是图像的 numpy 数组(PIL 图像也应该可以使用)。这应该迫使你的 pytesseract 只返回数字。现在,要自定义它返回的内容,请在 Windows 上找到您的数字配置文件,位于此处:

C:\Program Files (x86)\Tesseract-OCR\tessdata\configs

打开数字文件并添加您想要的任何字符。保存并运行 pytesseract 后,它应该只返回那些自定义字符。

【讨论】:

如果我需要文字和数字怎么办? 您可以将文本和数字都放在数字配置文件中。例如,您可以输入“1234567890abcdefg...”,它只会返回那些字母数字字符。 您使用的是哪个版本??我使用 pytesseract==0.3.0 适用于 2020 年最新的 tesseract config=digits 仅对来自字母数字输入的数字进行白名单。如何将图像仅视为数字而不是字母数字,有什么想法吗?像对待 l 一样对待 one 而不是 L【参考方案4】:

您可以将tessedit_char_whitelist 中的数字指定为config option,如下所示。

ocr_result = pytesseract.image_to_string(image, lang='eng', boxes=False, \
           config='--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789')

希望对您有所帮助。

【讨论】:

"oem" 在配置参数中被错误输入为"eom" 此解决方案不适用于 tesseract 4.0+。 GitHub 上有一个与此相关的未解决问题:github.com/tesseract-ocr/tesseract/issues/751。 试图在 5 月修正错字,但不知何故仍然显示 --eom。无论如何,重新修复它。 正如 Jakub 所说,它不适用于 4.0。相反,数字有一个单独的 tessdata 文件 我正在寻找用于识别时间的 OCR。例如。 11:25 。将冒号 (:) 添加到白名单不起作用。有什么想法吗?

以上是关于pytesseract 仅使用 tesseract 4.0 数字不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Tesseract pytesseract的安装和使用

使用Pytesseract+Tesseract-OCR识别图片的简单步骤

pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your p

tesseract-ocr,tesseract,pytesseract在windows下怎么安装

Python - PIL-pytesseract-tesseract验证码识别

Pytesseract (Tesseract OCR) 没有收到一些数字