2017-05-11 19 views
0

私がやっていることは、pyautoguiで数値のスクリーンショットを作成し、数値をpytesseractで文字列に変換することです。コード:PILのインポートイメージ 輸入pytesseractから 輸入pyautogui インポート時 輸入PIL をPytesseractはpyautoguiスクリーンショットを受け付けません。Windows、Python 3.6

pytesseract.pytesseract.tesseract_cmd = 'C://Program Files (x86)//Tesseract-OCR//tesseract' 

# Create image 
time.sleep(5) 
image = pyautogui.screenshot('projects/output.png', region=(1608, 314, 57, 41)) 

# Resize image 
basewidth = 2000 
img = Image.open('projects/output.png') 
wpercent = (basewidth/float(img.size[0])) 
hsize = int((float(img.size[1])*float(wpercent))) 
img = img.resize((basewidth,hsize), PIL.Image.ANTIALIAS) 
img.save('projects/output.png') 

col = Image.open('projects/output.png') 
gray = col.convert('L') 
bw = gray.point(lambda x: 0 if x<128 else 255, '1') 
bw.save('projects/output.png') 

# Image to string 
screen = Image.open('projects/output.png') 

print(pytesseract.image_to_string(screen, config='tessedit_char_whitelist=')) 

は、今ではpytesseractがpyautoguiが作成するスクリーンショットを受け入れていないようです。コードは問題なく正常に実行されますが、空の文字列が表示されます。しかし、私がペイントでイメージを作成し、それがそうでないスクリーンショットのように正確なフォルダに 'output.png'として保存するならば、それはうまくいきます。

Image output after resize and adjustments

誰もが、私は何かが欠けてるのアイデアを持っていますか?

答えて

0

は、パスを変更し、次のことを試してみてください。

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


src_path = "C:\\Users\\USERNAME\\Documents\\OCR\\" 

def get_region(box): 
    #Grabs the region of the box coordinates 
    im = ImageGrab.grab(box) 
    #Change size of image to 200% of the original size 
    a, b, c, d = box 
    doubleX = (c - a) * 2 
    doubleY = (d - b) * 2 
    im.resize((doubleX, doubleY)).save(os.getcwd() + "\\test.png", 'PNG') 

def get_string(img_path): 
    # Read image with opencv 
    img = cv2.imread(img_path) 
    # Convert to gray 
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
    # Apply dilation and erosion to remove some noise 
    kernel = np.ones((1, 1), np.uint8) 
    img = cv2.dilate(img, kernel, iterations=1) 
    img = cv2.erode(img, kernel, iterations=1) 
    # Write image after removed noise 
    cv2.imwrite(src_path + "removed_noise.png", img) 
    # Apply threshold to get image with only black and white 
    #img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 2) 
    # Write the image after apply opencv to do some ... 
    cv2.imwrite(src_path + "thres.png", img) 
    # Recognize text with tesseract for python 

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

    return result 

def main(): 
    #Grab the region of the screenshot (box area) 
    region = (1354,630,1433,648) 
    get_region(region) 

    #Output results 
    print ("OCR Output: ") 
    print (get_string(src_path + "test.png")) 
関連する問題