Spaces:
Sleeping
Sleeping
import gradio as gr | |
import tensorflow as tf | |
import numpy as np | |
from datetime import datetime | |
import matplotlib.pyplot as plt | |
import matplotlib.cm as cm | |
# Load the saved model | |
model = tf.keras.models.load_model('temperature_model.h5') | |
# Prediction logic | |
def predict_temperature(model, date): | |
# Convert the input date to a numerical feature (e.g., day of the year) | |
try: | |
date_obj = datetime.strptime(date, '%Y-%m-%d') | |
day_of_year = date_obj.timetuple().tm_yday # Get the day of the year (1-366) | |
except ValueError: | |
return "Invalid date format! Please enter the date in 'YYYY-MM-DD' format." | |
# Create input data for the model | |
input_data = np.array([[day_of_year]], dtype=np.float32) | |
# Predict temperature | |
forecast = model.predict(input_data).flatten() | |
# Create a color map for warm and cold temperatures | |
cmap = cm.get_cmap("coolwarm") | |
norm = plt.Normalize(vmin=-30, vmax=40) # Set min and max temperature values | |
# Plotting with temperature color mapping | |
fig, ax = plt.subplots(figsize=(8, 6)) | |
color = cmap(norm(forecast[0])) | |
ax.plot([day_of_year], [forecast[0]], marker='o', color=color, linestyle='-', markersize=10, label=f"Predicted Temp: {forecast[0]:.2f}°C") | |
# Customize the plot | |
ax.set_title(f"Temperature Forecast for {date}", fontsize=18, fontweight='bold', color='darkslategray') | |
ax.set_xlabel("Day of the Year", fontsize=14, color='slategray') | |
ax.set_ylabel("Temperature (°C)", fontsize=14, color='slategray') | |
ax.set_xticks([day_of_year]) | |
ax.set_xticklabels([date], rotation=45, ha='right', fontsize=12, color='darkslategray') | |
ax.grid(True, which='both', linestyle='--', linewidth=0.5, color='lightgray') | |
ax.legend(loc="upper left", fontsize=12) | |
ax.margins(y=0.1) | |
# Add color bar to indicate temperature range | |
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm) | |
sm.set_array([]) # No data needed for colorbar | |
cbar = fig.colorbar(sm, ax=ax) | |
cbar.set_label("Temperature (°C)", fontsize=12) | |
# Return the forecasted temperature and plot | |
return f"The forecasted temperature for {date} is {forecast[0]:.2f}°C.", fig | |
# Gradio interface function | |
def gradio_interface(date): | |
return predict_temperature(model, date) | |
# Set up Gradio input (textbox for date entry) | |
date_input = gr.Textbox(label="Enter Date (YYYY-MM-DD)", placeholder="2024-12-31") | |
# Custom CSS for a warm blue color theme | |
# Set up the Gradio interface | |
iface = gr.Interface( | |
fn=gradio_interface, | |
inputs=date_input, | |
outputs=["text", "plot"], # Output both text and plot | |
title="Temperature Forecasting 🌡️", | |
description="Enter a date to predict the temperature and see it plotted with a color gradient🚨 ...Have a good day🤖🥵🥶", | |
live=False, | |
theme="huggingface", # Keep the compact theme | |
allow_flagging="never" | |
) | |
# Launch the Gradio interface | |
iface.launch() | |