Grandediw commited on
Commit
2c80a62
·
verified ·
1 Parent(s): bc61848

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -35
app.py CHANGED
@@ -81,61 +81,50 @@ model = load_model(MODEL_PATH)
81
 
82
  # Create Gradio Interface
83
  with gr.Blocks(css="""
84
- .image-container img {
85
  width: 80px !important;
86
  height: 80px !important;
87
  object-fit: contain;
88
- cursor: pointer;
89
  }
90
- .image-container {
91
  text-align: center;
92
- margin: 5px;
93
  padding: 5px;
94
  border: 1px solid #ddd;
95
  border-radius: 8px;
 
96
  }
97
- .card-label {
98
- font-size: 12px;
99
  margin-top: 5px;
100
- text-align: center;
101
  }
102
  """) as interface:
103
  gr.Markdown("## Clash Royale Prediction")
104
  gr.Markdown("Select 8 cards from the opponent's deck to predict the probability of winning!")
105
 
106
  # State for tracking selected cards
107
- selected_deck = gr.State([])
108
-
109
- # Display for currently selected cards
110
  selected_cards_display = gr.Markdown("Selected cards: 0/8")
111
 
112
- def toggle_card(card_name, current_deck):
113
- if card_name in current_deck:
114
- current_deck.remove(card_name)
115
- else:
116
- if len(current_deck) < 8:
117
- current_deck.append(card_name)
118
- return current_deck, f"Selected cards: {len(current_deck)}/8"
119
 
120
  # Create card grid using rows and columns
121
  cards_per_row = 8
122
  cards_list = list(valid_card_images.items())
 
123
 
124
  for i in range(0, len(cards_list), cards_per_row):
125
  with gr.Row():
126
  for card, url in cards_list[i:i + cards_per_row]:
127
- with gr.Column(elem_classes="image-container"):
128
- img = gr.Image(value=url, interactive=False, show_label=False)
129
- gr.Markdown(card, elem_classes="card-label")
130
- # Create a hidden button for click handling
131
- click_btn = gr.Button(visible=False)
132
- click_btn.click(
133
- toggle_card,
134
- inputs=[gr.Textbox(value=card, visible=False), selected_deck],
135
- outputs=[selected_deck, selected_cards_display]
136
  )
137
- # Trigger the hidden button when the image is clicked
138
- img.click(lambda: None, None, click_btn.click)
139
 
140
  with gr.Row():
141
  result = gr.Textbox(label="Prediction Result:", interactive=False)
@@ -143,22 +132,26 @@ with gr.Blocks(css="""
143
  predict_btn = gr.Button("Make Prediction", variant="primary")
144
 
145
  def clear_selection():
146
- return [], "Selected cards: 0/8", ""
147
 
148
  clear_btn.click(
149
  clear_selection,
150
- outputs=[selected_deck, selected_cards_display, result]
151
  )
152
 
153
- def validate_and_predict(deck):
154
- if len(deck) != 8:
 
 
 
 
155
  return "Error: Please select exactly 8 cards"
156
- return predict_outcome(deck)
157
 
158
  predict_btn.click(
159
  validate_and_predict,
160
- inputs=[selected_deck],
161
- outputs=[result]
162
  )
163
 
164
  interface.launch()
 
81
 
82
  # Create Gradio Interface
83
  with gr.Blocks(css="""
84
+ .card-container img {
85
  width: 80px !important;
86
  height: 80px !important;
87
  object-fit: contain;
88
+ margin: 5px auto;
89
  }
90
+ .card-container {
91
  text-align: center;
 
92
  padding: 5px;
93
  border: 1px solid #ddd;
94
  border-radius: 8px;
95
+ margin: 5px;
96
  }
97
+ .checkbox-container {
 
98
  margin-top: 5px;
 
99
  }
100
  """) as interface:
101
  gr.Markdown("## Clash Royale Prediction")
102
  gr.Markdown("Select 8 cards from the opponent's deck to predict the probability of winning!")
103
 
104
  # State for tracking selected cards
 
 
 
105
  selected_cards_display = gr.Markdown("Selected cards: 0/8")
106
 
107
+ def update_selection(checkbox_values):
108
+ selected_count = sum(1 for v in checkbox_values if v)
109
+ return f"Selected cards: {selected_count}/8"
 
 
 
 
110
 
111
  # Create card grid using rows and columns
112
  cards_per_row = 8
113
  cards_list = list(valid_card_images.items())
114
+ all_checkboxes = []
115
 
116
  for i in range(0, len(cards_list), cards_per_row):
117
  with gr.Row():
118
  for card, url in cards_list[i:i + cards_per_row]:
119
+ with gr.Column(elem_classes="card-container"):
120
+ gr.Image(value=url, show_label=False)
121
+ checkbox = gr.Checkbox(label=card, elem_classes="checkbox-container")
122
+ all_checkboxes.append(checkbox)
123
+ checkbox.change(
124
+ update_selection,
125
+ inputs=all_checkboxes,
126
+ outputs=selected_cards_display
 
127
  )
 
 
128
 
129
  with gr.Row():
130
  result = gr.Textbox(label="Prediction Result:", interactive=False)
 
132
  predict_btn = gr.Button("Make Prediction", variant="primary")
133
 
134
  def clear_selection():
135
+ return [False] * len(all_checkboxes) + ["Selected cards: 0/8", ""]
136
 
137
  clear_btn.click(
138
  clear_selection,
139
+ outputs=all_checkboxes + [selected_cards_display, result]
140
  )
141
 
142
+ def validate_and_predict(*checkbox_values):
143
+ selected_cards = [
144
+ card for card, checked in zip(valid_card_images.keys(), checkbox_values)
145
+ if checked
146
+ ]
147
+ if len(selected_cards) != 8:
148
  return "Error: Please select exactly 8 cards"
149
+ return predict_outcome(selected_cards)
150
 
151
  predict_btn.click(
152
  validate_and_predict,
153
+ inputs=all_checkboxes,
154
+ outputs=result
155
  )
156
 
157
  interface.launch()