Ошибка цикла Pytesseract - PullRequest
       7

Ошибка цикла Pytesseract

0 голосов
/ 30 июня 2018

Я пытаюсь зациклить код Pytesseract, чтобы преобразовать несколько изображений (18) в строки и назвать вывод в sequece. попытался переставить и заменить положение петли, больше ошибок нарастало.

import cv2
import numpy as np
import pytesseract
from PIL import Image

src_path = "/home/pi/Desktop/"

def get_string(img_path):

    for n in range(0,18):

        n=n+1

        img = cv2.imread(img_path)

        img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

        kernel = np.ones((1, 1), np.uint8)
        img = cv2.dilate(img, kernel, iterations=1)
        img = cv2.erode(img, kernel, iterations=1)

        cv2.imwrite(src_path + "removed_noise"+ n +".png",img)
        cv2.imwrite(src_path +"thres"+ n +".png", img)

        result = pytesseract.image_to_string(Image.open(src_path + "thres"+ n +".png"))

    return result

print (get_string(src_path +"sample"+ str(n) +".jpeg"))
print ("------ Done -------")

возвращает ошибку

Traceback (most recent call last):
  File "/home/pi/Desktop/imagetostring.py", line 29, in <module>
    print (get_string(src_path +"sample"+ str(n) +".jpeg"))
NameError: name 'n' is not defined

1 Ответ

0 голосов
/ 30 июня 2018

n является локальной переменной функции get_string. С вашим отступом оператор print находится вне этой функции, поэтому переменная выходит за пределы области видимости, следовательно, ошибка.

Простой код для объяснения областей действия локальных переменных:

def someFunction(N):
    print(myLocal) # ERROR: myLocal not defined yet.
    for myLocal in range(1,N):
        print(myLocal) # OK
    print(myLocal) # OK

print(myLocal) # ERROR (your case): myLocal can't be accessed outside someFunction.
               # It doesn't even exist while someFunction is not being executed.
...