stevenIguza's picture
Update app.py
74328a8 verified
import gradio as gr
import tensorflow as tf
import joblib
import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler,Normalizer,MinMaxScaler
import pandas as pd
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Dense, LeakyReLU, ELU
from tensorflow.keras.models import load_model
title = "Concrete Strength Prediction"
head = (
"<center>"
"Predict the cement strength based on input parameters. Built by Steven Iguza 2024"
"</center>"
)
ref = "Find the whole code [here](https://github.com/hanif-adedotun)."
# Load the model
model = load_model('model.h5')
# model = joblib.load("model.pkl")
#model = pickle.load(open('model.pkl', 'rb'))
# Function to preprocess input data
def preprocess_input(Yvi, Yvii, Q7, Q28, Qi, Qii, Si, Sii, Siii, Siv, Sv, Svi, Svii, Yi, Yii, Yiii,):
# Create a DataFrame from the input data
# Yvi (7 days) Yvii (28 days) Q (curing temp) 7days Q (curing temp) 28days Qi (Ambaint temp)
# Qii (Concrete temp) Si (water content)
# Sii (W/C Ratio) Siii (River sand) Siv Aggregate 3/8 Sv Aggregate 1/2
# Svi Rhsobuild 561 plasticizer Svii Cement content Yi (Initial) Yii (Final) Yiii (expansion
data = {
# 'Yiv (7 days)': [Yiv],
# 'Yv (28 days)': [Yv],
'Yvi (7 days)': [Yvi],
'Yvii (28 days)': [Yvii],
'Q (curing temp) 7days': [Q7],
'Q (curing temp) 28days': [Q28],
'Qi (Ambaint temp)': [Qi],
'Qii (Concrete temp)': [Qii],
'Si (water content)': [Si],
'Sii (W/C Ratio)': [Sii],
'Siii (River sand)': [Siii],
'Siv Aggregate 3/8': [Siv],
'Sv Aggregate 1/2': [Sv],
'Svi Rhsobuild 561 plasticizer': [Svi],
'Svii Cement content': [Svii],
'Yi (Initial)': [Yi],
'Yii (Final)': [Yii],
'Yiii (expansion)': [Yiii],
}
df_predict = pd.DataFrame(data)
scaler = Pipeline([('Normalizer', Normalizer()),
# ('log-transformation', math.logp())
])
df_predict_scaled=scaler.fit_transform(df_predict);
return predict_cement_strength(df_predict_scaled)
# Function to make predictions
def predict_cement_strength(input_data):
# Assuming 'model' is your trained regression model
prediction_7days,prediction_28days = model.predict(input_data)
return round(float(np.float64(prediction_7days)), 2), round(float(np.float64(prediction_28days)), 2)
# Input components for Gradio
inputs = [
gr.Number(label="Yvi (7 days) (Mpa)"),
gr.Number(label="Yvii (28 days) (Mpa)"),
gr.Number(label="Q (Curing Temp) 7 days (°C)"),
gr.Number(label="Q (Curing Temp) 28 days (°C)"),
gr.Number(label="Qi (Ambient Temp) (°C)"),
gr.Number(label="Qii (Concrete Temp) (°C)"),
gr.Number(label="Si (Water Content) (Kg/m^3)"),
gr.Number(label="Sii (W/C Ratio)"),
gr.Number(label="Siii (River Sand) (Kg/m^3)"),
gr.Number(label="Siv (Aggregate 3/8) (Kg/m^3)"),
gr.Number(label="Sv (Aggregate 1/2) (Kg/m^3)"),
gr.Number(label="Svi (Rhsobuild 561 Plasticizer) (Kg/m^3)"),
gr.Number(label="Svii (Cement Content) (Kg/m^3)"),
gr.Number(label="Yi (Initial) (min)"),
gr.Number(label="Yii (Final) (min)"),
gr.Number(label="Yiii (Expansion) (mm)"),
]
# Gradio interface
gr.Interface(
fn=preprocess_input,
inputs=[i for i in inputs],
outputs=[gr.Number(label="Prediction after 7 days"), gr.Number(label="Prediction after 28 days")],
title=title,
description=head,
allow_flagging=False
).launch()