From 9a38c6048892e35204bc70d2e9569c91612257df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20W=C3=B6lfer?= Date: Thu, 9 Apr 2020 02:55:08 +0200 Subject: [PATCH] Worked on rust compatibility --- .../card_detection/board_parser.py | 39 +++++++++++++++++++ tools/to_json.py | 19 +++++++++ 2 files changed, 58 insertions(+) create mode 100644 tools/to_json.py diff --git a/shenzhen_solitaire/card_detection/board_parser.py b/shenzhen_solitaire/card_detection/board_parser.py index b859637..641ad0a 100644 --- a/shenzhen_solitaire/card_detection/board_parser.py +++ b/shenzhen_solitaire/card_detection/board_parser.py @@ -6,6 +6,7 @@ from typing import Any, Dict, Iterable, List, Optional, Tuple, Union import cv2 import numpy as np +import json from ..board import Board, Card, NumberCard, SpecialCard from . import adjustment, card_finder @@ -230,3 +231,41 @@ def parse_board(image: np.ndarray, conf: Configuration) -> Board: result.bunker = parse_bunker(image, conf) result.goal = parse_goal(image, conf) return result + + +def field_card_to_str(card: Card): + if card == SpecialCard.Hua: + return "Hua" + if isinstance(card, SpecialCard): + return {"Special": card.name} + elif isinstance(card, NumberCard): + return {"Number": {"value": card.number, "suit": card.suit.name}} + + +def bunker_card_to_str(card: Union[Tuple[SpecialCard, int], Optional[Card]]): + if card is None: + return "Empty" + if isinstance(card, tuple): + return {"Blocked": card[0].name} + return {"Stashed": field_card_to_str(card)} + + +def goal_card_to_str(card: Optional[NumberCard]): + if card is None: + return None + return {"value": card.number, "suit": card.suit.name} + + +def parse_to_json(image: np.ndarray, conf: Configuration) -> str: + field = parse_field(image, conf) + flower_gone = parse_hua(image, conf) + bunker = parse_bunker(image, conf) + goal = parse_goal(image, conf) + + mystruct = { + "field": [[field_card_to_str(card) for card in row] for row in field], + "hua_set": flower_gone, + "bunker": [bunker_card_to_str(card) for card in bunker], + "goal": [goal_card_to_str(card) for card in goal], + } + return json.dumps(mystruct) diff --git a/tools/to_json.py b/tools/to_json.py new file mode 100644 index 0000000..b777cbd --- /dev/null +++ b/tools/to_json.py @@ -0,0 +1,19 @@ +from shenzhen_solitaire.card_detection.board_parser import parse_to_json +import shenzhen_solitaire.card_detection.configuration as configuration +import cv2 +import sys + + +def main() -> None: + if len(sys.argv) < 2: + print("Give filename pls") + return + image = cv2.imread(str(sys.argv[1])) + + conf = configuration.load("test_config.zip") + + print(parse_to_json(image, conf)) + + +if __name__ == "__main__": + main()