code: def _board_from_game_image(self, game_image):
          
          # board image
          board_rect = self._board_tools['board_region'].region_in(game_image)
          t, l, b, r = board_rect
          board_image = game_image[t:b, l:r]
          # board grid and tiles --> fill in a Board object
          board = Board()
          grid = self._board_tools['grid']
          tile_id = self._board_tools['tile_id']
          for p, borders in grid.borders_by_grid_position(board_image):
              t, l, b, r = borders
              tile = board_image[t:b, l:r]
              tile_character = tile_id.identify(tile)
              if tile_character is None:
                  return None  # soft failure
              board[p] = Tile.singleton(tile_character)
          return board
docs: Return a board object matching the board in the game image.
          Return None if any tiles are not identified.