import os import numpy as np import matplotlib.pyplot as plt import joblib import gradio as gr # Visualization Function def plot_simulation(pressure, temperature, material_type): if material_type <= 0 or temperature <= 0: raise ValueError("Temperature and Material Type must be positive.") stress = np.linspace(pressure * 0.5, pressure * 1.5, 100) strain = stress / (temperature * 0.01 * material_type) plt.figure(figsize=(6, 4)) plt.plot(stress, strain, label="Stress-Strain Curve") plt.xlabel("Stress (MPa)") plt.ylabel("Strain (%)") plt.title("Stress-Strain Simulation") plt.legend() plt.grid(True) output_path = "simulation_plot.png" plt.savefig(output_path) plt.close() return output_path # Prediction Function def predict_and_visualize(pressure, temperature, material_type): model_path = "defect_model.pkl" if not os.path.exists(model_path): return "Error: Model file not found.", None try: model = joblib.load(model_path) prediction = model.predict([[pressure, temperature, material_type]])[0] defect_map = {0: "No Defect", 1: "Defect"} defect_prediction = defect_map.get(prediction, "Unknown") except Exception as e: return f"Prediction Error: {str(e)}", None try: plot_path = plot_simulation(pressure, temperature, material_type) except Exception as e: return defect_prediction, f"Visualization Error: {str(e)}" return defect_prediction, plot_path # Gradio Interface interface = gr.Interface( fn=predict_and_visualize, inputs=[ gr.Slider(50, 200, step=1, label="Pressure"), gr.Slider(300, 700, step=1, label="Temperature"), gr.Dropdown(choices=["1", "2", "3", "4"], label="Material Type") ], outputs=[ gr.Textbox(label="Prediction"), gr.Image(label="Stress-Strain Visualization") ], title="Defect Prediction & Simulation", description="Predict defect type and visualize stress-strain simulation." ) if __name__ == "__main__": interface.launch()