为pytesseract设置psm时出错

时间:2017-09-01 17:54:32

标签: python tesseract file-extension python-tesseract

我正在尝试使用带有pytesseract的psm为0,但是我收到了一个错误。我的代码是:

import pytesseract
from PIL import Image
img = Image.open('pathToImage')
pytesseract.image_to_string(img, config='-psm 0')

出现的错误是

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/pytesseract/pytesseract.py", line 126, in image_to_string
f = open(output_file_name, 'rb')
IOError: [Errno 2] No such file or directory: 
'/var/folders/m8/pkg0ppx11m19hwn71cft06jw0000gp/T/tess_uIaw2D.txt'

当我进入'/ var / folders / m8 / pkg0ppx11m19hwn71cft06jw0000gp / T'时,有一个名为tess_uIaw2D.osd的文件似乎包含我正在寻找的输出信息。似乎tesseract将文件保存为.osd,然后查找该文件,但扩展名为.txt。当我使用--psm 0通过命令行运行tesseract时,它将输出文件保存为.osd而不是.txt。

pytesseract的image_to_string()通过在某处保存输出文件然后自动读取该输出文件来工作是否正确?有没有办法设置tesseract将文件保存为.txt,或将其设置为查找.osd文件?当我没有设置psm时,我没有遇到只运行image_to_string()函数的问题。

1 个答案:

答案 0 :(得分:0)

您在这里有几个问题:

  1. PSM错误

    • 在您提到的问题中,您提到您正在命令行中运行"--psm 0"。但是,在您的代码段中,您有"-psm 0"
    • 使用双破折号config= "--psm 0"将解决此问题。
  2. 如果您阅读了tesseract命令行文档,则可以指定输出从图像读取的文本的位置。我建议你从这里开始。

  3. pytesseract的image_to_string()是否可以通过将输出文件保存在某个地方然后自动读取该输出文件来正确工作?

    • 从我对tesseract的使用来看,这不是它的工作原理
    • pytesseract.image_to_string()默认返回在图像上找到的字符串。当您查看函数image_to_string时,此参数由参数output_type = Output.STRING定义。
    • 其他返回选项包括(1)Output.BYTES和(2)Output.DICT
    • 我通常有类似text = pytesseract.image_to_string(img)
    • 然后我将该文本写入日志文件
    • 这里是一个例子:
import datetime
import io
import pytesseract
import cv2

img = cv2.imread("pathToImage")
text = pytesseract.image_to_string(img, config="--psm 0")
ocr_log = "C:/foo/bar/output.txt"
timestamp_fmt = "%Y-%m-%d_%H-%M-%S-%f"

# ...
# DO SOME OTHER STUFF BEFORE WRITING TO LOG FILE
# ...

with io.open(ocr_log, "a") as ocr_file:
    timestamp = datetime.datetime.now().strftime(timestamp_fmt)
    ocr_file.write(f"{timestamp}:\n====OCR-START===\n")
    ocr_file.write(text)
    ocr_file.write("\n====OCR-END====\n")