|
import gradio as gr |
|
import numpy as np |
|
import json |
|
import joblib |
|
import tensorflow as tf |
|
import pandas as pd |
|
from joblib import load |
|
from tensorflow.keras.models import load_model |
|
from sklearn.preprocessing import MinMaxScaler |
|
import os |
|
import sklearn |
|
|
|
|
|
print(f"Gradio version: {gr.__version__}") |
|
print(f"NumPy version: {np.__version__}") |
|
print(f"Scikit-learn version: {sklearn.__version__}") |
|
print(f"Joblib version: {joblib.__version__}") |
|
print(f"TensorFlow version: {tf.__version__}") |
|
print(f"Pandas version: {pd.__version__}") |
|
|
|
|
|
script_dir = os.path.dirname(os.path.abspath(__file__)) |
|
scaler_path = os.path.join(script_dir, 'toolkit', 'scaler_X.json') |
|
rf_model_path = os.path.join(script_dir, 'toolkit', 'rf_model.joblib') |
|
mlp_model_path = os.path.join(script_dir, 'toolkit', 'mlp_model.keras') |
|
meta_model_path = os.path.join(script_dir, 'toolkit', 'meta_model.joblib') |
|
image_path = os.path.join(script_dir, 'toolkit', 'car.png') |
|
|
|
|
|
try: |
|
|
|
with open(scaler_path, 'r') as f: |
|
scaler_params = json.load(f) |
|
scaler_X = MinMaxScaler() |
|
scaler_X.scale_ = np.array(scaler_params["scale_"]) |
|
scaler_X.min_ = np.array(scaler_params["min_"]) |
|
scaler_X.data_min_ = np.array(scaler_params["data_min_"]) |
|
scaler_X.data_max_ = np.array(scaler_params["data_max_"]) |
|
scaler_X.data_range_ = np.array(scaler_params["data_range_"]) |
|
scaler_X.n_features_in_ = scaler_params["n_features_in_"] |
|
scaler_X.feature_names_in_ = np.array(scaler_params["feature_names_in_"]) |
|
|
|
|
|
loaded_rf_model = load(rf_model_path) |
|
print("Random Forest model loaded successfully.") |
|
loaded_mlp_model = load_model(mlp_model_path) |
|
print("MLP model loaded successfully.") |
|
loaded_meta_model = load(meta_model_path) |
|
print("Meta model loaded successfully.") |
|
except Exception as e: |
|
print(f"Error loading models or scaler: {e}") |
|
|
|
def predict_new_values(new_input_data): |
|
try: |
|
|
|
print(f"Raw Input Data: {new_input_data}") |
|
new_input_data = np.array(new_input_data).reshape(1, -1) |
|
|
|
|
|
new_input_scaled = scaler_X.transform(new_input_data) |
|
print(f"Scaled Input Data: {new_input_scaled}") |
|
|
|
|
|
mlp_predictions_new = loaded_mlp_model.predict(new_input_scaled) |
|
rf_predictions_new = loaded_rf_model.predict(new_input_scaled) |
|
|
|
|
|
combined_features_new = np.concatenate([mlp_predictions_new, rf_predictions_new], axis=1) |
|
print(f"Combined Features: {combined_features_new}") |
|
|
|
|
|
loaded_meta_predictions_new = loaded_meta_model.predict(combined_features_new) |
|
print(f"Meta Model Predictions: {loaded_meta_predictions_new}") |
|
|
|
return loaded_meta_predictions_new[0] |
|
except Exception as e: |
|
print(f"Error in prediction: {e}") |
|
return ["Error", "Error", "Error", "Error", "Error", "Error"] |
|
|
|
def gradio_interface(velocity, temperature, precipitation, humidity): |
|
try: |
|
input_data = [velocity, temperature, precipitation, humidity] |
|
print(f"Input Data: {input_data}") |
|
predictions = predict_new_values(input_data) |
|
print(f"Predictions: {predictions}") |
|
return [ |
|
f"{predictions[0] * 100:.2f}%" if predictions[0] != "Error" else "Error", |
|
f"{predictions[1] * 100:.2f}%" if predictions[1] != "Error" else "Error", |
|
f"{predictions[2] * 100:.2f}%" if predictions[2] != "Error" else "Error", |
|
f"{predictions[3] * 100:.2f}%" if predictions[3] != "Error" else "Error", |
|
f"{predictions[4] * 100:.2f}%" if predictions[4] != "Error" else "Error", |
|
f"{predictions[5] * 100:.2f}%" if predictions[5] != "Error" else "Error" |
|
] |
|
except Exception as e: |
|
print(f"Error in Gradio interface: {e}") |
|
return ["Error", "Error", "Error", "Error", "Error", "Error"] |
|
|
|
inputs = [ |
|
gr.Slider(minimum=0, maximum=100, value=50, step=0.05, label="Velocity (mph)"), |
|
gr.Slider(minimum=-2, maximum=30, value=0, step=0.5, label="Temperature (°C)"), |
|
gr.Slider(minimum=0, maximum=1, value=0, step=0.01, label="Precipitation (inch)"), |
|
gr.Slider(minimum=0, maximum=100, value=50, label="Humidity (%)") |
|
] |
|
|
|
outputs = [ |
|
gr.Textbox(label="Front Left"), |
|
gr.Textbox(label="Front Right"), |
|
gr.Textbox(label="Left"), |
|
gr.Textbox(label="Right"), |
|
gr.Textbox(label="Roof"), |
|
gr.Textbox(label="Rear") |
|
] |
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("<h1 style='text-align: center;'>Environmental Factor-Based Contamination Level Prediction</h1>") |
|
gr.Markdown("This application predicts the contamination levels on different parts of a car's LiDAR system based on environmental factors such as velocity, temperature, precipitation, and humidity.") |
|
|
|
|
|
with gr.Row(): |
|
with gr.Column(): |
|
gr.Markdown("### Input Parameters") |
|
for inp in inputs: |
|
inp.render() |
|
|
|
|
|
with gr.Row(): |
|
with gr.Column(scale=1, min_width=0, elem_id="center-column"): |
|
gr.Image(image_path) |
|
|
|
gr.Button(value="Submit", variant="primary").click(fn=gradio_interface, inputs=inputs, outputs=outputs) |
|
gr.Button(value="Clear").click(fn=lambda: None) |
|
|
|
with gr.Column(): |
|
gr.Markdown("### Output Predictions ± 7.1%") |
|
for out in outputs: |
|
out.render() |
|
|
|
demo.launch() |
|
|