1

我写了一个 python/cv2 图像到文本转换器。启动程序C:\Users\mikez\Pictures\examples.png时,我在要求图像时输入。

此后它显示以下错误:

Traceback:“WindowsError:[错误2]系统找不到指定的文件”。

我不知道我的代码有什么问题:

from PIL import Image
import pytesseract
import os
import cv2

ppc = True
im = raw_input("Enter Image: ")
image = cv2.imread(im)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

while ppc == True:
    prepro = raw_input("Enter preprocess: ").lower()
    if prepro == "thresh" or prepro == "t":
        gray = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
        ppc = False

    elif prepro == "blur" or prepro == "b":
        gray = cv2.medianBlur(gray, 3)
        ppc = False    

    elif prepro == "no" or "n":
        ppc = False

    else:
        print "Not and option."
        ppc = True

filename = "{}.png".format(os.getpid())
cv2.imwrite(filename, gray)

text = pytesseract.image_to_string(Image.open(filename))
os.remove(filename)
print(text)

cv2.imshow("Image", image)
cv2.imshow("Output", gray)
cv2.waitKey(0)
4

1 回答 1

0

要查看您的代码发生了什么,我在下面的简单调试实现中使用并尝试了它。然后我发现它不是* .png的文件路径。然后我看到了 pytesseract.py 中定义的临时文件名。这pytesseract将转换并保存新的 temp-png 文件,创建一个新的临时 bmp 文件(更改颜色方案),完成后将其作为命令传递给Tesseract...

...并且因为Tesseract 没有安装在我的机器上,所以我收到了类似于您的错误:

回溯(最近一次通话最后):

文件“D:......\Image text converter.py”,第 55 行,in text = pytesseract.image_to_string(Image.open(filename))

文件“c:......\lib\site-packages\pytesseract\pytesseract.py”,第 132 行,在 image_to_string config=config 中)

文件“c:......\lib\site-packages\pytesseract\pytesseract.py”,第 50 行,在 run_tesseract proc = subprocess.Popen(command, stderr=subprocess.PIPE)

文件“c:......\lib\subprocess.py”,第 390 行,在init errread、errwrite 中)

文件“c:......\lib\subprocess.py”,第 640 行,在 _execute_child startupinfo) WindowsError: [错误 2] 系统找不到指定的文件

所以...

我的结论:

WindowsError: [Error 2] The system cannot find the file specified是系统间接告诉您Tesseract未安装/编译的方式......等等。与您输入的 *.png filpath 无关。

建议:

从这里安装 Tesseract ,看看错误是否仍然存在。如果解决了,请在此处报告为答案和“接受答案”,这将给我们两个代表。

用于调试目的的代码:

在代码中的“im”之后实现:

im = raw_input("Enter Image: ")  # just to shows what "im" was.
print im                         # debuggin: show filepath to use.

if not os.path.exists(im):       # checks if filepath is true.
    print 'filepath "%s" is incorrect, exit..' % im
    exit()
else:
    print "filepath correct, continue.."

...最后是您自己成为调试专家的奖励...

破解 pytesseract.py

添加时:

  1. time.sleep(10) 在:

    import time    # needs to be imported too...
    
    def image_to_string(image, lang=None, boxes=False, config=None):
        ...snippet...
        try:
            image.save(input_file_name)
            time.sleep(10)
            status, error_string = run_tesseract(input_file_name,
                                                 output_file_name_base,
                                                 lang=lang,
                                                 boxes=boxes,
                                                 config=config)
    
  2. 替换:filename = "{}.png".format(os.getpid())filename = "Test_{}.png".format(os.getpid())你的代码中......

...然后您将获得奖励并在以下位置查看临时文件的创建: C:\Users\...\AppData\Local\Temp

享受.. 并通过安装 Tesseract 库让我们知道它是否已修复。

于 2018-01-14T22:57:22.203 回答