0

从昨天开始,我试图使用 OCR pytesser。我自己解决了几个问题,但我不知道如何解决这个问题。有错误:

H:\Python27>python.exe lol.py
Traceback (most recent call last):
File "lol.py", line 30, in <module>
print image_to_string(image)
File "H:\Python27\lib\pytesser\__init__.py", line 30, in image_to_string
call_tesseract(scratch_image_name, scratch_text_name_root)
File "H:\Python27\lib\pytesser\__init__.py", line 20, in call_tesseract
proc = subprocess.Popen(args)
File "H:\Python27\lib\subprocess.py", line 710, in __init__
errread, errwrite)
File "H:\Python27\lib\subprocess.py", line 958, in _execute_child
 startupinfo)
WindowsError: [Error 2] Le fichier spÚcifiÚ est introuvable

最后一行说“找不到文件”

我如何将 tesseract 放入我的init .py

tesseract_exe_name = 'C:\Users\TyLo\AppData\Local\Tesseract-OCR\tesseract' # Name of executable to be called at command line

我真的不明白为什么他不能打开文件。在我的init .py中还有另外两件事。我可以更改我尝试创建的图像文件和 txt 文件并给他路径没有成功,但我认为他自己创建了它们。

scratch_image_name = "outfile.bmp" # This file must be .bmp or other Tesseract-compatible format
scratch_text_name_root = "infile" # Leave out the .txt extension

这是发送到 Popen 的 3 个文件,所以我想错误就在那里。

我希望我足够清楚,让你们理解我遇到的问题。

编辑:lol.py 中的内容来自该站点,只是修改了网址http://www.debasish.in/2012/01/bypass-captcha-using-python-and.html

4

1 回答 1

3

这就是问题:

tesseract_exe_name = 'C:\Users\TyLo\AppData\Local\Tesseract-OCR\tesseract' # Name of executable to be called at command line

看到\t那里了吗?那是单个制表符,而不是反斜杠字符和t字符。而且你只能逃脱\U, \T, \A, \L, 并且\T因为你很幸运,当你的 Python 版本问世时,还没有人想到它们的用途。(后来的 Python 版本确实可以使用\U.)

解决方案是执行以下操作之一:

(1) 使用原始字符串文字

tesseract_exe_name = r'C:\Users\TyLo\AppData\Local\Tesseract-OCR\tesseract' # Name of executable to be called at command line

意思是“r'…'不要特别对待反斜杠”。

(2) 转义所有反斜杠:

tesseract_exe_name = 'C:\\Users\\TyLo\\AppData\\Local\\Tesseract-OCR\\tesseract' # Name of executable to be called at command line

在非原始字符串文字中,\\表示单个反斜杠,因此\\t表示单个反斜杠和t.

(3) 改用正斜杠:

tesseract_exe_name = 'C:/Users/TyLo/AppData/Local/Tesseract-OCR/tesseract' # Name of executable to be called at command line

大多数 Windows 程序都接受正斜杠。一些不这样做,有时您需要一个\\.\不合法的正斜杠路径名,但除此之外,这可行。

于 2015-05-05T19:11:05.917 回答