Python pytesseract - 找不到 eng.traineddata - oem 2

ric*_*ich 3 python ocr tesseract image python-tesseract

我正在尝试从简单的图像中提取文本。

样本图像

当我使用默认引擎(oem 3)时,文本被提取(效果很差)。我想使用其他引擎(oem 2)看看输出是否可以提高。

import pytesseract

#this is the config that gives a poor output
config = '--tessdata-dir "C:/Program Files/Tesseract-OCR/tessdata" -l eng --oem 2 --psm 6'
text = pytesseract.image_to_string(crop, config=config)
Run Code Online (Sandbox Code Playgroud)

当我尝试传递更改引擎的选项时,出现错误,提示找不到语言文件:

pytesseract.pytesseract.TesseractError:(1,“错误:已请求 Tesseract(旧版)引擎,但 C:/Program Files/Tesseract-OCR/tessdata/eng.traineddata 中不存在组件!!加载语言“eng”Tesseract 失败无法加载任何语言!无法初始化 tesseract。”)

#experimental config
config = '--psm 6'
text = pytesseract.image_to_string(crop, config=config)
Run Code Online (Sandbox Code Playgroud)

如您所见,我显式传入 eng.traineddata 目录,但它找不到语言文件。

我有两个问题:

  1. 如何使用第一个配置文件提高 OCR 质量?
  2. 为什么找不到语言文件?我在提到的文件夹中有 eng.traineddata、eng.user-patterns 和 eng.user-words,以及安装在那里的一些其他文件和文件夹。

我还确保我的环境变量是正确的(因此第一个配置文件可以工作)。

谢谢

nat*_*ncy 6

执行 OCR 时,在将图像放入 Pytesseract 之前对其进行预处理非常重要。具体来说,对于该图像,我们可以删除水平和垂直网格线。这是预处理后的图像:

\n\n

在此输入图像描述

\n\n

Pytesseract OCR 的结果

\n\n
XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX\n89 987 98 7 987 9 789 87 987 9\n978 9 78 978 9 789 78 987 9\n78 987 9 78 *978 97/8 %9 \xe2\x80\x9c78 978 9\n78 978 978 978 978 98 9\n78 978 978 978 978 978 987 978 7897\n978 9 9 78 9 89 98 978 9\n
Run Code Online (Sandbox Code Playgroud)\n\n

代码

\n\n
import cv2\nimport pytesseract\n\npytesseract.pytesseract.tesseract_cmd = r"C:\\Program Files\\Tesseract-OCR\\tesseract.exe"\n\n# Remove horizontal and vertical lines\nimage = cv2.imread(\'1.png\')\nkernel_vertical = cv2.getStructuringElement(cv2.MORPH_RECT, (1,50))\ntemp1 = 255 - cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel_vertical)\nhorizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (50,1))\ntemp2 = 255 - cv2.morphologyEx(image, cv2.MORPH_CLOSE, horizontal_kernel)\ntemp3 = cv2.add(temp1, temp2)\nresult = cv2.add(temp3, image)\n\ndata = pytesseract.image_to_string(result, lang=\'eng\',config=\'--psm 6\')\nprint(data)\n\ncv2.imshow(\'result\', result)\ncv2.waitKey()\n
Run Code Online (Sandbox Code Playgroud)\n