Advertisement
Guest User

Untitled

a guest
Jul 29th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.04 KB | None | 0 0
  1. import glob
  2. from collections import defaultdict
  3. import cv2
  4. import numpy as np
  5. import random
  6.  
  7. char2num = {
  8. '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8,
  9. '9': 9, 'A': 10, 'B': 12, 'C': 13, 'D': 14, 'E': 15, 'F': 16, 'G': 17,
  10. 'H': 18, 'I': 19, 'J': 20, 'K': 21, 'L': 23, 'M': 24, 'N': 25, 'O': 26,
  11. 'P': 27, 'Q': 28, 'R': 29, 'S': 30, 'T': 31, 'U': 32, 'V': 34, 'W': 35,
  12. 'X': 36, 'Y': 37, 'Z': 38,
  13. }
  14. resize_backgound = 512
  15.  
  16. number_height = 96
  17. number_width = 512
  18.  
  19.  
  20. def compute_check_digit(number):
  21. total = sum(char2num[c] * 2**x for x, c in enumerate(number))
  22. return (total-int(total/11.0)*11) % 10
  23.  
  24. def get_number():
  25. for cat in CATEGORY_INDENTIFIER:
  26. for first in range(0, 10):
  27. for second in range(0, 10):
  28. for third in range(0, 10):
  29. for fourth in range(0, 10):
  30. for fifth in range(0 ,10):
  31. for sixth in range(0, 10):
  32. yield (cat, first, second, fourth, fifth, sixth)
  33.  
  34. def get_random_number():
  35. cat = random.randint(0, len(CATEGORY_INDENTIFIER)-1)
  36. number = [ str(random.randint(0, 9)) for _ in range(6)]
  37. number.insert(0, CATEGORY_INDENTIFIER[cat])
  38. check_digit = compute_check_digit(''.join(number))
  39. number.append(str(check_digit))
  40.  
  41. return ''.join(number)
  42.  
  43. CATEGORY_INDENTIFIER = ['EGHU', 'EGSU', 'EISU', 'EMCU', 'HMCU', 'PCIU', 'DRYU', 'EITU', 'WHLU', 'TCNU', 'IMTU', 'KKFU']
  44.  
  45. images = glob.glob('preprocess3/**/*.png')
  46. backgrounds = glob.glob('background/*.png')
  47. mapping = defaultdict(list)
  48.  
  49. # build label mapping
  50. for im in images:
  51. label = im.split('/')[-2]
  52. mapping[label].append(im)
  53.  
  54.  
  55.  
  56. number = get_random_number()
  57. print number[0]
  58.  
  59. im1 = cv2.imread(mapping[number[0]][random.randint(0, len(mapping[number[0]])-1)], 0)
  60.  
  61. blank_image = np.zeros((96,512), np.uint8)
  62.  
  63. start_row = 20
  64. blank_image[start_row:im1.shape[0] + start_row,0:im1.shape[1]] = im1
  65.  
  66. height, width = blank_image.shape
  67.  
  68. for i in range(1, len(number)):
  69. im2 = cv2.imread(mapping[number[i]][random.randint(0, len(mapping[number[i]])-1)], 0)
  70. for j in range(width-1, -1, -1):
  71. if np.sum(blank_image[:,j])>0:
  72. col = j
  73. break
  74. # print row, col
  75. padding = 0
  76. row_padding = 0
  77. if i < 4:
  78. padding = 4
  79. elif i == 4:
  80. padding = 20
  81. elif i == len(number) - 1:
  82. padding = 21
  83. # last number
  84. # put the bounding box around it
  85. im2 = np.pad(im2, ((1,1),(1,1)), mode='constant', constant_values=255)
  86. row_padding = -1
  87.  
  88. elif i > 4 and i < len(number) - 1:
  89. padding = 5
  90.  
  91. blank_image[start_row + row_padding:start_row + row_padding + im2.shape[0], col + padding: col + padding + im2.shape[1]] = im2
  92.  
  93. # get the bounding box of whole number
  94. while np.sum(blank_image[0]) == 0:
  95. blank_image = blank_image[1:]
  96.  
  97. while np.sum(blank_image[:,0]) == 0:
  98. blank_image = np.delete(blank_image,0,1)
  99.  
  100. while np.sum(blank_image[-1]) == 0:
  101. blank_image = blank_image[:-1]
  102.  
  103. while np.sum(blank_image[:,-1]) == 0:
  104. blank_image = np.delete(blank_image,-1,1)
  105.  
  106. number_rows, number_cols = blank_image.shape
  107.  
  108. # put it to background image
  109.  
  110. # get background
  111. background = cv2.imread(backgrounds[random.randint(0, len(backgrounds) - 1)])
  112. b_height, b_width, _ = background.shape
  113. if b_height < number_height or b_width < number_width:
  114. if b_height < number_height:
  115. background = cv2.resize(background, (b_width, resize_backgound))
  116. elif b_width < number_width:
  117. background = cv2.resize(background, (resize_backgound, b_height))
  118.  
  119. b_height, b_width, _ = background.shape
  120. print background.shape
  121. print blank_image.shape
  122.  
  123. startX = random.randint(0, b_width - number_cols - 1)
  124. startY = random.randint(0, b_height - number_rows - 1)
  125.  
  126. for c in range(0, 3):
  127. for u in range(0, number_rows):
  128. for uu in range(0, number_cols):
  129. if blank_image[u][uu] > 60:
  130. background[startY + u][startX + uu] = blank_image[u][uu]
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137. cv2.imshow('im1', blank_image)
  138. cv2.imwrite('bb.png', background)
  139. cv2.waitKey(0)
  140. cv2.destroyAllWindows()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement