2

这是我第一次使用 pytesseract。我正在尝试对小图像执行简单的 OCR。代码归结为:

from PIL import Image
from pytesseract import image_to_string

test = Image.open(r'C:\test.jpg')
print(image_to_string(test))

这会引发 OSError: [WinError 6] The handle is invalid

Traceback (most recent call last):
  File "C:\Testing.py", line 5, in <module>
    print(image_to_string(test))
  File "C:\\pytesseract.py", line 161, in image_to_string
    config=config)
  File "C:\\pytesseract.py", line 94, in run_tesseract
    stderr=subprocess.PIPE)
  File "C:\\subprocess.py", line 911, in __init__
    errread, errwrite) = self._get_handles(stdin, stdout, stderr)
  File "C:\\subprocess.py", line 1150, in _get_handles
    c2pwrite = self._make_inheritable(c2pwrite)
  File "C:\\subprocess.py", line 1182, in _make_inheritable
    _winapi.DUPLICATE_SAME_ACCESS)
OSError: [WinError 6] The handle is invalid

我在 Windows 7 上使用 Python 3.5。

在此先感谢您的时间!

4

2 回答 2

1

我不知道真正的问题,但是一旦我重新启动PC,问题就解决了。

于 2017-09-26T13:04:17.133 回答
0

我遇到了同样的问题。所以我对 Python 的了解不够,无法对所有各种文件进行故障排除,但我确实注意到这个问题是由于子进程文件造成的。不知何故,当 pytesseract 调用 subprocess 时,脚本会抛出错误。

无论如何,我通过完全跳过 pytesseract 并通过子进程访问 tesseract 解决了这个问题。我的代码如下:

import subprocess
from subprocess import Popen, PIPE
image_file = r"C:\Temp\test.png"
outlocation = r"C:\Temp\output"
command = ['tesseract', image_file, outlocation]
proc = subprocess.Popen(command,
        stderr=subprocess.PIPE)

这在很大程度上是一个创可贴解决方案,但它确实让我能够继续在 python 中使用 tesseract。希望能帮助到你。

此外,上述解决方法假设您已经安装了 tesseract。如果你不这样做,你可以从https://github.com/UB-Mannheim/tesseract/wiki获取它

于 2017-01-16T21:25:00.493 回答