2015-05-05 7 views
0

со вчерашнего дня, пытающегося использовать OCR pytesser. Я решил несколько проблем самостоятельно, но я понимаю, как добраться до этого. есть ошибка:pytesser subprocess.Popen fail

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 

последняя строка сказать: «файл не может быть найден»

есть, как я поставил тессеракт в моем INIT .py

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

я действительно не могу понять, почему он не может открыть файл. есть еще 2 вещи, в моем 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 

это 3 файлов, которые отправляются Popen, поэтому я представляю себе ошибку.

Надеюсь, что я достаточно ясна, чтобы вы, ребята, поняли, что у меня есть проблема.

Edit: в lol.py с этого сайта, просто модифицировали URL http://www.debasish.in/2012/01/bypass-captcha-using-python-and.html

+0

Я уверен, что это, должно быть, дурак, но это трудно найти ... любой вопросник, который знал достаточно, чтобы использовать правильные условия в своем вопросе, знал бы, что у него не будет проблемы ... – abarnert

+0

[This one] (http://stackoverflow.com/questions/28706163/python-3-4-1-script-syntax-error-arcpy/28706216#28706216) имеет ту же самую конечную проблему и хороший ответ от Martijn Pieters, но я не Не думаю, что для новичков будет смысл, что они связаны ... – abarnert

ответ

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) Используйте raw string literal

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 принимает слэша. Некоторым не нужно, и иногда вам понадобится путь \\.\, который не является законным с помощью косой черты, но в остальном это работает.

+1

отличный ответ, но двойная обратная косая черта отсутствует в # 2. Может, в разметке квадранты? – tdelaney

+0

@tdelaney: По какой-то причине он не показывает эти кодовые блоки как блоки кода. Может быть, их внутри пронумерованного блока это путают? Я попытаюсь исправить это ... – abarnert

+0

@tdelaney: Я не мог понять это, поэтому я просто подделал нумерованный список, и теперь он работает. :) – abarnert