Spaces:
Running
Running
import streamlit as st | |
import numpy as np | |
import joblib | |
from tensorflow.keras.models import load_model | |
# Set Streamlit configuration | |
st.set_page_config(page_title="π Match Scenario Simulator") | |
st.title("π Match Scenario Simulator") | |
# Load model and scalers | |
try: | |
gru_model = load_model("gru_score_predictor.keras", compile=False) | |
scaler_input = joblib.load("scaler_input.save") | |
scaler_output = joblib.load("scaler_output.save") | |
except Exception as e: | |
st.error(f"Model or scaler files not found: {e}") | |
st.stop() | |
# User Input Section | |
st.subheader("π Input Current Match Situation") | |
st.markdown("π’ Enter **runs scored per over**, not cumulative. For example:\n- Over 1: 6\n- Over 2: 9\n- Over 3: 0") | |
# Number of completed overs | |
current_over = st.slider("Select Over Completed (1 to 20)", 1, 20, 10) | |
# Input per-over runs | |
runs_input = [] | |
for i in range(current_over): | |
run = st.number_input(f"Runs in Over {i+1}", min_value=0, max_value=36, step=1, key=f"run_{i}") | |
runs_input.append(run) | |
# Predict button | |
if st.button("Predict Final Score"): | |
if len(runs_input) == current_over: | |
try: | |
# Convert to cumulative for model | |
cumulative_runs = np.cumsum(runs_input).tolist() | |
padded_runs = cumulative_runs + [0]*(20 - len(cumulative_runs)) | |
padded_array = np.array(padded_runs).reshape(-1, 1) | |
# Scale & reshape | |
scaled_input = scaler_input.transform(padded_array) | |
model_input = scaled_input.reshape(1, 20, 1) | |
# Predict | |
pred_scaled = gru_model.predict(model_input, verbose=0) | |
predicted_score = scaler_output.inverse_transform(pred_scaled)[0][0] | |
st.success(f"π― Predicted Final Score: {predicted_score:.2f} runs") | |
except Exception as e: | |
st.error(f"β Prediction error: {e}") | |
else: | |
st.warning("β οΈ Please enter runs for all overs.") | |