File size: 1,805 Bytes
fa3146d
 
 
 
 
365881c
 
 
fa3146d
365881c
 
fa3146d
365881c
 
 
 
 
 
 
 
fa3146d
365881c
 
 
 
 
 
 
 
 
 
fa3146d
365881c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c795283
365881c
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import gradio as gr
import numpy as np
import pickle
from tensorflow.keras.models import load_model

model=load_model('Best_GRU_solar_insolation_model.keras')
with open('scaler.pkl','rb') as f:
    scaler=pickle.load(f)

def is_leap_year(year):
    return(year%4==0 and year%100!=0)or(year%400==0)

def is_valid_day(year,month,day):
    days_in_month={1:31,2:28,3:31,4:30,5:31,6:30,7:31,8:31,9:30,10:31,11:30,12:31}
    if month==2:
        if is_leap_year(year):
            return 1<=day<=29
        else:
            return 1<=day<=28
    return 1<=day<=days_in_month.get(month,31)

def preprocess_input(year,month,day,hour):
    day_sin=np.sin(2*np.pi*day/31)
    day_cos=np.cos(2*np.pi*day/31)
    month_sin=np.sin(2*np.pi*month/12)
    month_cos=np.cos(2*np.pi*month/12)
    hour_sin=np.sin(2*np.pi*hour/24)
    hour_cos=np.cos(2*np.pi*hour/24)
    input_data=np.array([year,day_sin,day_cos,month_sin,month_cos,hour_sin,hour_cos]).reshape(1,-1)
    input_scaled=scaler.transform(input_data)
    return np.expand_dims(input_scaled,axis=-1)

def predict_solar_insolation(year,month,day,hour):
    if not(1<=month<=12):
        return"Invalid month! Please enter a value between 1 and 12."
    if not is_valid_day(year,month,day):
        return f"Invalid day! Please enter a valid day for month {month}."
    if not(0<=hour<24):
        return"Invalid hour! Please enter a value between 0 and 23."
    input_data=preprocess_input(year,month,day,hour)
    prediction=model.predict(input_data)
    return round(float(prediction[0][0]),3)if float(prediction[0][0])>10 else 0

app=gr.Interface(fn=predict_solar_insolation,
    inputs=[gr.Number(label="Year"),
            gr.Number(label="Month"),
            gr.Number(label="Day"),
            gr.Number(label="Hour")],
    outputs="text")

app.launch()