analyze.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #!/usr/bin/env python3
  2. import os
  3. import numpy as np
  4. from PIL import Image
  5. from parse import BLOCK_SIZE, COLUMN_VSHIFT, MIN_COLUMN_VAL, MIN_COLUMN_SAT, \
  6. detect_blocks, detect_exa, detect_held, print_board, \
  7. detect_columns
  8. from strategy import State
  9. def cut_board(board):
  10. y = detect_columns(board) - BLOCK_SIZE
  11. i = row = 0
  12. while y >= 0:
  13. for col, shift in enumerate(COLUMN_VSHIFT):
  14. x = col * BLOCK_SIZE
  15. block = board.crop((x, y + shift,
  16. x + BLOCK_SIZE, y + shift + BLOCK_SIZE))
  17. yield col, row, block
  18. i += 1
  19. y -= BLOCK_SIZE
  20. row += 1
  21. def make_bitmap(board):
  22. h, s, v = board.split()
  23. v = [int(v > MIN_COLUMN_VAL and s > MIN_COLUMN_SAT) * 255
  24. for h, s, v in zip(h.getdata(), s.getdata(), v.getdata())]
  25. v = Image.fromarray(np.uint8(v).reshape((board.height, board.width)))
  26. return Image.merge('RGB', (v, v, v))
  27. if __name__ == '__main__':
  28. import sys
  29. ident = int(sys.argv[1])
  30. extensive = len(sys.argv) > 2 and sys.argv[2] == 'y'
  31. board = Image.open('screens/board%d.png' % ident).convert('HSV')
  32. #board.crop((0, 0, board.width, detect_columns(board))).show()
  33. blocks = list(detect_blocks(board))
  34. exa = detect_exa(board)
  35. held = detect_held(board, exa)
  36. print_board(blocks, exa, held)
  37. if extensive:
  38. make_bitmap(board).save('screens/bitmap%d.png' % ident)
  39. os.makedirs('blocks/board%d' % ident, exist_ok=True)
  40. for row, col, block in cut_board(board):
  41. f = 'blocks/board%d/row%d-col%d.png' % (ident, row, col)
  42. block.convert('RGB').save(f)