AlexFSmirnov

Untitled

May 23rd, 2020
1,806
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.44 KB | None | 0 0
  1. import cv2
  2. import numpy
  3. import pytesseract
  4. from PIL import Image, ImageDraw, ImageFilter
  5.  
  6. INPUT_IMAGE = 'Unpainted.png'
  7. OUTPUT_IMAGE = 'Painted.png'
  8. SQUARES_W = 31
  9. SQUARES_H = 50
  10.  
  11. colors = [
  12.     (253, 83, 83, 255),
  13.     (252, 216, 0, 255),
  14.     (170, 170, 170, 255),
  15.     (94, 2, 5, 255),
  16.     (255, 185, 63, 255),
  17.     (251, 2, 0, 255),
  18.     (255, 223, 172, 255),
  19.     (0, 175, 82, 255),
  20. ]
  21.  
  22. pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
  23.  
  24. img = Image.open(INPUT_IMAGE)
  25. w, h = img.size
  26.  
  27. img = img.crop((67, 104, w - 64, h - 102))
  28. draw = ImageDraw.Draw(img)
  29. square_w = img.size[0] * 1.0 / SQUARES_W
  30. square_h = img.size[1] * 1.0 / SQUARES_H
  31.  
  32. prev_digit = 2
  33.  
  34. for y in range(SQUARES_H):
  35.     for x in range(SQUARES_W):
  36.         print("{}%".format((y * SQUARES_W + x) * 100.0 / (SQUARES_H * SQUARES_W)))
  37.  
  38.         x_start = int(round(x * square_w))
  39.         x_end = int(round((x + 1) * square_w))
  40.         y_start = int(round(y * square_h))
  41.         y_end = int(round((y + 1) * square_h))
  42.  
  43.         digit_img = img.crop((x_start, y_start, x_end, y_end))
  44.         digit_img = digit_img.filter(ImageFilter.SMOOTH)
  45.         digit_img = digit_img.filter(ImageFilter.SHARPEN)
  46.         digit_img = digit_img.filter(ImageFilter.SMOOTH)
  47.         digit_img = digit_img.filter(ImageFilter.EDGE_ENHANCE)
  48.         digit_img = digit_img.point(lambda p: 255 if p > 200 else p * 0.7)
  49.         # digit_img = digit_img.filter(ImageFilter.SMOOTH)
  50.         # digit_img = digit_img.filter(ImageFilter.EDGE_ENHANCE)
  51.         # digit_img = digit_img.resize((digit_img.size[0] * 5, digit_img.size[1] * 5))
  52.  
  53.         digit_img_cv2 = numpy.array(digit_img)
  54.         digit = pytesseract.image_to_string(digit_img_cv2,
  55.             config='--psm 10 -c tessedit_char_whitelist=12345678')
  56.  
  57.         # print(digit)
  58.         # digit_img.save(OUTPUT_IMAGE)
  59.         # break
  60.  
  61.         try:
  62.             digit = int(digit) % 10
  63.             if 1 <= digit <= 8:
  64.                 prev_digit = digit
  65.                 draw.rectangle(((x_start, y_start), (x_end, y_end)), fill=colors[digit - 1])
  66.             else:
  67.                 draw.rectangle(((x_start, y_start), (x_end, y_end)), fill=colors[prev_digit - 1])
  68.         except:
  69.             draw.rectangle(((x_start, y_start), (x_end, y_end)), fill=colors[prev_digit - 1])
  70.  
  71. img = img.filter(ImageFilter.BLUR)
  72. img.save(OUTPUT_IMAGE)
  73.  
  74. # img = cv2.imread('Unpainted.png')
  75. # print(pytesseract.image_to_string(img))
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment