From 75daee99d13c7d2de628254a322910ec838d1720 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20W=C3=B6lfer?= Date: Fri, 3 May 2019 00:23:55 +0200 Subject: [PATCH] Added board parser --- shenzhen_solitaire/cv/board_parser.py | 35 +++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 shenzhen_solitaire/cv/board_parser.py diff --git a/shenzhen_solitaire/cv/board_parser.py b/shenzhen_solitaire/cv/board_parser.py new file mode 100644 index 0000000..79b939c --- /dev/null +++ b/shenzhen_solitaire/cv/board_parser.py @@ -0,0 +1,35 @@ +import numpy as np +from .configuration import Configuration +from ..board import Board +from . import card_finder +import copy + + +def parse_board(image: np.ndarray, conf: Configuration) -> Board: + squares = card_finder.get_field_squares( + image, conf.field_adjustment, count_x=13, count_y=8) + squares = [card_finder.simplify(square)[0] for square in squares] + square_rows = [squares[13 * i:13 * (i + 1)] for i in range(8)] + empty_square = np.full( + shape=(conf.field_adjustment.w, + conf.field_adjustment.h), + fill_value=card_finder.GREYSCALE_COLOR[card_finder.Cardcolor.Background], + dtype=np.uint8) + assert empty_square.shape == squares[0].shape + result: Board = Board() + for row_id, square_row in enumerate(square_rows): + for square in square_row: + fitting_square, _ = card_finder.find_square( + square, [empty_square] + [x[0] for x in conf.catalogue]) + if np.array_equal(fitting_square, empty_square): + print("empty") + break + for cat_square, cardtype in conf.catalogue: + if np.array_equal(fitting_square, cat_square): + print(cardtype) + result.field[row_id].append(cardtype) + break + else: + print("did not find image") + + return result