utils.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. import cv2
  2. import numpy as np
  3. import sys
  4. def read_from_csv(csv_f):
  5. with open(csv_f,'r') as f:
  6. movie_data = {}
  7. for line in f.readlines():
  8. line_split = line.strip().split(",")
  9. year = line_split[-1].split("|")
  10. keywords = line_split[-2].split("|")
  11. tagline = line_split[-3].split("|")
  12. director = line_split[-4].split("|")
  13. cast = line_split[-5].split("|")
  14. movie = line_split[0].upper()
  15. movie_data[movie] = [year,keywords,tagline,director,cast]
  16. return movie_data
  17. def get_movie_info(movies_data):
  18. movies_list = list(movies_data.keys())
  19. movie = np.random.choice(movies_list,1)[0].upper()
  20. movie_info = movies_data[movie]
  21. return movie,movie_info
  22. def select_hints(movie_info):
  23. # We will randomly select 3 types of
  24. # hints to display
  25. hints_index = list(np.random.choice(5,3,replace=False))
  26. hints = []
  27. hints_labels = ["Release Year","Keyword","Tagline","Director","Cast"]
  28. labels = []
  29. for hint_index in hints_index:
  30. hint = np.random.choice(movie_info[hint_index],1)[0].upper()
  31. hints.append(hint)
  32. labels.append(hints_labels[hint_index].upper())
  33. return hints,labels
  34. def get_canvas(canvas_file):
  35. img = cv2.imread(canvas_file,1)
  36. return img
  37. def draw_wrong(img,incorrect_attempts):
  38. cv2.putText(img,"WRONG {}/6".format(incorrect_attempts+1),(380,40),\
  39. cv2.FONT_HERSHEY_SIMPLEX,1,\
  40. (0,0,255),2)
  41. return img
  42. def draw_hint(img,hints,labels,incorrect_attempts):
  43. x,y = 20,30
  44. if incorrect_attempts == 0:
  45. return img
  46. elif incorrect_attempts <= 1:
  47. index = 0
  48. elif incorrect_attempts <= 3:
  49. index = 1
  50. elif incorrect_attempts <= 6:
  51. index = 2
  52. cv2.putText(img,"HINT: {}".format(labels[index]),(x,y),\
  53. cv2.FONT_HERSHEY_SIMPLEX,0.6,\
  54. (255,0,255),1)
  55. cv2.putText(img,"{}".format(hints[index]),(x,y+30),\
  56. cv2.FONT_HERSHEY_SIMPLEX,0.6,\
  57. (255,0,255),1)
  58. return img
  59. def draw_right(img):
  60. cv2.putText(img,"RIGHT",(380,40),\
  61. cv2.FONT_HERSHEY_SIMPLEX,0.7,\
  62. (0,255,0),2)
  63. return img
  64. def draw_lost(img):
  65. cv2.putText(img,"YOU LOST",(380,40),\
  66. cv2.FONT_HERSHEY_SIMPLEX,0.7,\
  67. (0,0,255),2)
  68. return img
  69. def draw_won(img):
  70. cv2.putText(img,"YOU WON",(380,40),\
  71. cv2.FONT_HERSHEY_SIMPLEX,0.7,\
  72. (0,255,0),2)
  73. return img
  74. def draw_invalid(img):
  75. cv2.putText(img,"INVALID INPUT",(300,40),\
  76. cv2.FONT_HERSHEY_SIMPLEX,0.7,\
  77. (0,0,255),2)
  78. return img
  79. def draw_reuse(img):
  80. cv2.putText(img,"ALREADY USED",(300,40),\
  81. cv2.FONT_HERSHEY_SIMPLEX,0.7,\
  82. (0,0,255),2)
  83. return img
  84. def draw_used_chars(img,chars_entered,letter):
  85. cv2.putText(img,"Letters used:",(300,80),\
  86. cv2.FONT_HERSHEY_SIMPLEX,0.5,\
  87. (0,0,0),1)
  88. y = 120
  89. x = 350
  90. count = 0
  91. for i in chars_entered:
  92. if count == 10:
  93. x += 50
  94. y = 120
  95. if i==letter:
  96. cv2.putText(img,i,(x,y),\
  97. cv2.FONT_HERSHEY_SIMPLEX,0.5,\
  98. (0,0,255),1)
  99. else:
  100. cv2.putText(img,i,(x,y),\
  101. cv2.FONT_HERSHEY_SIMPLEX,0.5,\
  102. (0,0,0),1)
  103. y += 20
  104. count += 1
  105. return img
  106. def get_char_coords(movie):
  107. x_coord = 100
  108. y_coord = 400
  109. char_ws = []
  110. char_hs = []
  111. for i in movie:
  112. char_width, char_height = cv2.getTextSize(i,\
  113. cv2.FONT_HERSHEY_SIMPLEX,1,2)[0]
  114. char_ws.append(char_width)
  115. char_hs.append(char_height)
  116. max_char_h = max(char_hs)
  117. max_char_w = max(char_ws)
  118. char_rects = []
  119. for i in range(len(char_ws)):
  120. rect_coord = [(x_coord,y_coord-max_char_h),\
  121. (x_coord+max_char_w,y_coord)]
  122. char_rects.append(rect_coord)
  123. x_coord = x_coord + max_char_w
  124. return char_rects
  125. def draw_blank_rects(movie,char_rects,img):
  126. for i in range(len(char_rects)):
  127. top_left, bottom_right = char_rects[i]
  128. if not movie[i].isalpha() or \
  129. ord(movie[i]) < 65 or \
  130. ord(movie[i]) > 122 or \
  131. (ord(movie[i]) > 90 and \
  132. ord(movie[i]) < 97):
  133. cv2.putText(img,movie[i],(top_left[0],\
  134. bottom_right[1]),\
  135. cv2.FONT_HERSHEY_SIMPLEX,\
  136. 1,(0,0,255),2)
  137. continue
  138. cv2.rectangle(img,top_left,\
  139. bottom_right,\
  140. (0,0,255),thickness=1,\
  141. lineType = cv2.LINE_8)
  142. return img
  143. def check_all_chars_found(movie, chars_entered):
  144. chars_to_be_checked = [i for i in movie if i.isalpha()]
  145. for i in chars_to_be_checked:
  146. if i not in chars_entered:
  147. return False
  148. return True
  149. def draw_circle(img):
  150. cv2.circle(img,(190,160),40,(0,0,0),thickness=2,\
  151. lineType=cv2.LINE_AA)
  152. return img
  153. def draw_back(img):
  154. cv2.line(img,(190,200),(190,320),\
  155. (0,0,0),thickness=2,\
  156. lineType=cv2.LINE_AA)
  157. return img
  158. def draw_left_hand(img):
  159. cv2.line(img,(190,240),(130,200),\
  160. (0,0,0),thickness=2,\
  161. lineType=cv2.LINE_AA)
  162. return img
  163. def draw_right_hand(img):
  164. cv2.line(img,(190,240),(250,200),\
  165. (0,0,0),thickness=2,\
  166. lineType=cv2.LINE_AA)
  167. return img
  168. def draw_left_leg(img):
  169. cv2.line(img,(190,320),(130,360),\
  170. (0,0,0),thickness=2,\
  171. lineType=cv2.LINE_AA)
  172. return img
  173. def draw_right_leg(img):
  174. cv2.line(img,(190,320),(250,360),\
  175. (0,0,0),thickness=2,\
  176. lineType=cv2.LINE_AA)
  177. return img
  178. def draw_hangman(img,num_tries):
  179. if num_tries==1:
  180. return draw_circle(img)
  181. elif num_tries==2:
  182. return draw_back(img)
  183. elif num_tries==3:
  184. return draw_left_hand(img)
  185. elif num_tries==4:
  186. return draw_right_hand(img)
  187. elif num_tries==5:
  188. return draw_left_leg(img)
  189. elif num_tries==6:
  190. return draw_right_leg(img)
  191. else:
  192. return img
  193. def revealMovie(movie,img,char_rects):
  194. #img = cv2.imread(canvas_file,1)
  195. for i in range(len(movie)):
  196. top_left, bottom_right = char_rects[i]
  197. cv2.putText(img,movie[i],(top_left[0],bottom_right[1]),\
  198. cv2.FONT_HERSHEY_SIMPLEX,\
  199. 1,(0,255,0),2)
  200. return img
  201. def displayLetter(img,letter,movie,char_rects):
  202. for i in range(len(movie)):
  203. if movie[i]==letter:
  204. top_left, bottom_right = char_rects[i]
  205. cv2.putText(img, movie[i],\
  206. (top_left[0],bottom_right[1]),\
  207. cv2.FONT_HERSHEY_SIMPLEX,\
  208. 1,(255,0,0),2)
  209. return img