我正在尝试将pstesseract的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()函数就没有问题。

最佳答案

您在这里有几个问题:


PSM错误


在问题中,您提到您正在命令行中运行"--psm 0"。但是,在代码片段中,您有"-psm 0"
使用双破折号config= "--psm 0"将解决该问题。

如果您阅读tesseract命令行文档,则可以指定将从图像读取的文本输出到何处。我建议你从这里开始。
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")

关于python - 为pytesseract设置psm时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46005639/

10-11 01:03