Программа Python/CV2 для преобразования изображения в текст показывает WindowsError: [Ошибка 2] Система не может найти указанный файл

Я написал конвертер изображений 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)

person Mike Z    schedule 14.01.2018    source источник


Ответы (1)


Чтобы увидеть, что происходит с вашим кодом, я использовал простую реализацию отладки ниже и попробовал ее. Затем я узнал, что это не путь к файлу * .png. Затем я увидел имена временных файлов, определенные в pytesseract.py. Этот pytesseract преобразовывает и сохраняет новый файл temp-png, создает новый временный файл bmp (измененная цветовая схема), и когда это делается, он передает это как команду Tesseract...

... и поскольку Tesseract не установлен на моей машине, я получаю сообщение об ошибке, похожее на ваше:

Traceback (последний последний вызов):

Файл "D:......\Image text convert.py", строка 55, в тексте = pytesseract.image_to_string(Image.open(имя файла))

Файл "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) Ошибка Windows: [Ошибка 2] Система не может найти указанный файл

So...

Мой вывод:

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.

person ZF007    schedule 14.01.2018