Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import cv2
- import numpy
- import pytesseract
- from PIL import Image, ImageDraw, ImageFilter
- INPUT_IMAGE = 'Unpainted.png'
- OUTPUT_IMAGE = 'Painted.png'
- SQUARES_W = 31
- SQUARES_H = 50
- colors = [
- (253, 83, 83, 255),
- (252, 216, 0, 255),
- (170, 170, 170, 255),
- (94, 2, 5, 255),
- (255, 185, 63, 255),
- (251, 2, 0, 255),
- (255, 223, 172, 255),
- (0, 175, 82, 255),
- ]
- pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
- img = Image.open(INPUT_IMAGE)
- w, h = img.size
- img = img.crop((67, 104, w - 64, h - 102))
- draw = ImageDraw.Draw(img)
- square_w = img.size[0] * 1.0 / SQUARES_W
- square_h = img.size[1] * 1.0 / SQUARES_H
- prev_digit = 2
- for y in range(SQUARES_H):
- for x in range(SQUARES_W):
- print("{}%".format((y * SQUARES_W + x) * 100.0 / (SQUARES_H * SQUARES_W)))
- x_start = int(round(x * square_w))
- x_end = int(round((x + 1) * square_w))
- y_start = int(round(y * square_h))
- y_end = int(round((y + 1) * square_h))
- digit_img = img.crop((x_start, y_start, x_end, y_end))
- digit_img = digit_img.filter(ImageFilter.SMOOTH)
- digit_img = digit_img.filter(ImageFilter.SHARPEN)
- digit_img = digit_img.filter(ImageFilter.SMOOTH)
- digit_img = digit_img.filter(ImageFilter.EDGE_ENHANCE)
- digit_img = digit_img.point(lambda p: 255 if p > 200 else p * 0.7)
- # digit_img = digit_img.filter(ImageFilter.SMOOTH)
- # digit_img = digit_img.filter(ImageFilter.EDGE_ENHANCE)
- # digit_img = digit_img.resize((digit_img.size[0] * 5, digit_img.size[1] * 5))
- digit_img_cv2 = numpy.array(digit_img)
- digit = pytesseract.image_to_string(digit_img_cv2,
- config='--psm 10 -c tessedit_char_whitelist=12345678')
- # print(digit)
- # digit_img.save(OUTPUT_IMAGE)
- # break
- try:
- digit = int(digit) % 10
- if 1 <= digit <= 8:
- prev_digit = digit
- draw.rectangle(((x_start, y_start), (x_end, y_end)), fill=colors[digit - 1])
- else:
- draw.rectangle(((x_start, y_start), (x_end, y_end)), fill=colors[prev_digit - 1])
- except:
- draw.rectangle(((x_start, y_start), (x_end, y_end)), fill=colors[prev_digit - 1])
- img = img.filter(ImageFilter.BLUR)
- img.save(OUTPUT_IMAGE)
- # img = cv2.imread('Unpainted.png')
- # print(pytesseract.image_to_string(img))
Advertisement