Spaces:
Sleeping
Sleeping
| 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) |