Project_AML / app_gradio.py
Alizain78688's picture
Upload 6 files
840dc13 verified
import numpy as np
import gradio as gr
import pickle
import os
# Try to load model, fallback to dummy if fails
def load_or_create_model():
try:
if os.path.exists('diabetes_model.pkl'):
with open('diabetes_model.pkl', 'rb') as f:
model = pickle.load(f)
with open('scaler.pkl', 'rb') as f:
scaler = pickle.load(f)
print("✓ Loaded trained model")
return model, scaler, False
except:
print("⚠ Could not load model, using demo mode")
# Create simple rule-based model
class SimpleModel:
def predict(self, X):
# Simple rule: glucose > 140 = diabetic
return [1 if x[1] > 140 else 0 for x in X]
def predict_proba(self, X):
probs = []
for x in X:
glucose = x[1]
prob_diabetic = min(0.95, max(0.05, glucose / 200))
probs.append([1 - prob_diabetic, prob_diabetic])
return probs
class SimpleScaler:
def transform(self, X):
return X
return SimpleModel(), SimpleScaler(), True
model, scaler, is_demo = load_or_create_model()
def predict(pregnancies, glucose, bp, skin, insulin, bmi, pedigree, age):
try:
input_data = np.array([[pregnancies, glucose, bp, skin, insulin, bmi, pedigree, age]])
# Scale
if hasattr(scaler, 'transform'):
input_data = scaler.transform(input_data)
# Predict
prediction = model.predict(input_data)[0]
# Get probability
if hasattr(model, 'predict_proba'):
proba = model.predict_proba(input_data)[0]
confidence = proba[1] if prediction == 1 else proba[0]
else:
confidence = 0.5
result = "Diabetic" if prediction == 1 else "Non-Diabetic"
risk = "High" if confidence > 0.7 else "Medium" if confidence > 0.4 else "Low"
return {
"result": result,
"confidence": f"{confidence * 100:.1f}%",
"risk_level": risk,
"demo_mode": is_demo,
"glucose_status": "High" if glucose > 140 else "Normal" if glucose > 70 else "Low"
}
except Exception as e:
return {"error": str(e)}
# Create Gradio interface
iface = gr.Interface(
fn=predict,
inputs=[
gr.Number(label="Pregnancies", value=2),
gr.Number(label="Glucose (mg/dL)", value=148),
gr.Number(label="Blood Pressure (mmHg)", value=72),
gr.Number(label="Skin Thickness (mm)", value=35),
gr.Number(label="Insulin (mu U/ml)", value=0),
gr.Number(label="BMI (kg/m²)", value=33.6),
gr.Number(label="Diabetes Pedigree", value=0.627),
gr.Number(label="Age (years)", value=50)
],
outputs=gr.JSON(label="Prediction Result"),
title="Diabetes Risk Predictor",
description="Enter health metrics to assess diabetes risk",
examples=[
[2, 148, 72, 35, 0, 33.6, 0.627, 50],
[1, 85, 66, 29, 0, 26.6, 0.351, 31],
[5, 116, 74, 0, 0, 25.6, 0.201, 30]
],
theme="soft"
)
if __name__ == "__main__":
iface.launch(server_name="0.0.0.0", server_port=7860)