Spaces:
				
			
			
	
			
			
		Runtime error
		
	
	
	
			
			
	
	
	
	
		
		
		Runtime error
		
	| from enum import Enum | |
| from typing import Any | |
| import gradio as gr | |
| from constants.app_constants import PAPER, ROCK, SCISSORS | |
| from factory.game_strategy_factory import GameStrategyFactory | |
| from factory.hand_factory import HandFactory | |
| from hands.hand_interface import Hand | |
| hand_labels = [ROCK, PAPER, SCISSORS] | |
| # Use hand names to add logic for the game | |
| # Define a User enum | |
| class User(Enum): | |
| HUMAN = 1 | |
| AI = 2 | |
| from fastai.vision.all import * # type: ignore | |
| learn = load_learner("export.pkl") | |
| class RockPaperScissors: | |
| def __init__(self): | |
| self.hand_factory: HandFactory = HandFactory(GameStrategyFactory()) | |
| def getRCPWinner(self, human_hand_image_path) -> str: | |
| human_hand_image = PILImage.create(human_hand_image_path) | |
| user_hand = self.__get_hand_for_user(User.HUMAN, human_hand_image) # type: ignore | |
| ai_hand = self.__get_hand_for_user(User.AI, human_hand_image) # type: ignore | |
| winner = user_hand.getWinner(ai_hand) | |
| return f"<p>I have {ai_hand.getName()} <br> {winner}</p>" | |
| def __get_hand_for_user( | |
| self, | |
| user: User, | |
| hand_image: PILImage, | |
| ) -> Hand: | |
| if user == User.AI: | |
| return self.hand_factory.get_hand(random.choice(hand_labels)) # type: ignore | |
| else: | |
| pred = learn.predict(hand_image) | |
| return self.hand_factory.get_hand(pred[0]) | |
| if __name__ == "__main__": | |
| title = "Rock Paper Scissors AI" | |
| description = "A simple rock paper scissors game with AI" | |
| examples = [ | |
| "example_rock.png", | |
| "example_scissors.png", | |
| "example_paper2.png", | |
| ] | |
| interpretation = "default" | |
| enable_queue = True | |
| webcam = gr.inputs.Image(shape=(640, 480), source="webcam") | |
| rock_paper_scissors = RockPaperScissors() | |
| gr.Interface( | |
| fn=rock_paper_scissors.getRCPWinner, | |
| inputs=webcam, | |
| outputs=gr.outputs.HTML(), | |
| title=title, | |
| description=description, | |
| examples=examples, | |
| interpretation=interpretation, | |
| enable_queue=enable_queue, | |
| ).launch() | |