# Complete code for Hugging Face Spaces deployment # Your CSV file name: brain_tumor_dataset.csv import gradio as gr import pandas as pd import numpy as np from sklearn.ensemble import RandomForestClassifier from sklearn.preprocessing import LabelEncoder import os print("Loading Brain Tumor Detection System...") # Load dataset from CSV file csv_file = 'brain_tumor_dataset.csv' if not os.path.exists(csv_file): print(f"Error: {csv_file} not found!") print("Please upload brain_tumor_dataset.csv to the current directory") else: df = pd.read_csv(csv_file) print(f"✅ Dataset loaded: {len(df)} patient records") print(f"📊 Columns in CSV: {list(df.columns)}") # Check which columns exist and use only available ones available_columns = df.columns.tolist() # Define required columns required_columns = ['Age', 'Gender', 'Headache_Score', 'Memory_Loss', 'Visual_Disturbance', 'Nausea', 'Vomiting', 'Seizures', 'Weakness', 'Coordination_Issues', 'Tumor_Detected'] # Check if all required columns exist for col in required_columns: if col not in available_columns: print(f"⚠️ Warning: '{col}' not found in CSV") # Use only columns that exist feature_columns = [col for col in required_columns if col in available_columns] print(f"✅ Using features: {feature_columns}") # Train model with available columns le_gender = LabelEncoder() le_memory = LabelEncoder() le_visual = LabelEncoder() le_nausea = LabelEncoder() le_vomiting = LabelEncoder() le_seizures = LabelEncoder() le_weakness = LabelEncoder() le_coordination = LabelEncoder() le_tumor = LabelEncoder() # Encode categorical columns df['Gender_E'] = le_gender.fit_transform(df['Gender']) df['Memory_E'] = le_memory.fit_transform(df['Memory_Loss']) df['Visual_E'] = le_visual.fit_transform(df['Visual_Disturbance']) df['Nausea_E'] = le_nausea.fit_transform(df['Nausea']) df['Vomiting_E'] = le_vomiting.fit_transform(df['Vomiting']) df['Seizures_E'] = le_seizures.fit_transform(df['Seizures']) df['Weakness_E'] = le_weakness.fit_transform(df['Weakness']) df['Coordination_E'] = le_coordination.fit_transform(df['Coordination_Issues']) df['Tumor_E'] = le_tumor.fit_transform(df['Tumor_Detected']) # Prepare features X = df[['Age', 'Gender_E', 'Headache_Score', 'Memory_E', 'Visual_E', 'Nausea_E', 'Vomiting_E', 'Seizures_E', 'Weakness_E', 'Coordination_E']] y = df['Tumor_E'] # Train model model = RandomForestClassifier(n_estimators=200, max_depth=15, random_state=42) model.fit(X, y) print("✅ Model trained successfully!") def predict_tumor(age, gender, headache, memory_loss, visual_disturbance, nausea, vomiting, seizures, weakness, coordination_issues): gender_e = 0 if gender == 'Male' else 1 memory_e = 1 if memory_loss == 'Yes' else 0 visual_e = 1 if visual_disturbance == 'Yes' else 0 nausea_e = 1 if nausea == 'Yes' else 0 vomiting_e = 1 if vomiting == 'Yes' else 0 seizures_e = 1 if seizures == 'Yes' else 0 weakness_e = 1 if weakness == 'Yes' else 0 coordination_e = 1 if coordination_issues == 'Yes' else 0 input_data = [[age, gender_e, headache, memory_e, visual_e, nausea_e, vomiting_e, seizures_e, weakness_e, coordination_e]] prediction = model.predict(input_data)[0] probability = model.predict_proba(input_data)[0][1] result = "TUMOR DETECTED" if prediction == 1 else "NO TUMOR" if prediction == 1: recommendations = """ 🚨 **URGENT RECOMMENDATIONS:** • Consult a neurologist immediately • Schedule brain MRI with contrast • Get a complete neurological examination • Do not delay treatment """ color = "#c8a2c8" icon = "⚠️" else: recommendations = """ ✅ **HEALTHY RECOMMENDATIONS:** • Continue regular health checkups • Maintain healthy lifestyle • Monitor any persistent symptoms • Annual medical examination """ color = "#e6e6fa" icon = "✅" return result, f"{probability*100:.1f}%", recommendations, color, icon custom_css = """ """ with gr.Blocks(css=custom_css, title="Brain Tumor Detection System") as demo: gr.HTML("""

🧠 BRAIN TUMOR DETECTION SYSTEM

✨ AI-Powered Medical Diagnosis | Instant Results ✨
""") with gr.Row(): with gr.Column(scale=1): with gr.Group(elem_classes="card"): gr.Markdown("### 📋 PATIENT INFORMATION") age = gr.Slider( minimum=1, maximum=120, value=45, step=1, label="🎂 Age (Years)", info="Patient's current age" ) gender = gr.Radio( choices=['Male', 'Female'], label="⚥ Gender", info="Biological sex", value='Male' ) headache = gr.Slider( minimum=1, maximum=60, value=30, step=1, label="🤕 Headache Severity (1-60)", info="Pain intensity scale - higher score means more severe headache" ) with gr.Group(elem_classes="card"): gr.Markdown("### 🧠 NEUROLOGICAL SYMPTOMS") memory_loss = gr.Radio( choices=['No', 'Yes'], label="📝 Memory Loss", info="Forgetting recent events", value='No' ) visual_disturbance = gr.Radio( choices=['No', 'Yes'], label="👁️ Visual Disturbance", info="Blurred or double vision", value='No' ) coordination_issues = gr.Radio( choices=['No', 'Yes'], label="🎯 Coordination Issues", info="Difficulty walking or maintaining balance", value='No' ) with gr.Column(scale=1): with gr.Group(elem_classes="card"): gr.Markdown("### 🏥 PHYSICAL SYMPTOMS") nausea = gr.Radio( choices=['No', 'Yes'], label="🤢 Nausea", info="Feeling sick to stomach", value='No' ) vomiting = gr.Radio( choices=['No', 'Yes'], label="🤮 Vomiting", info="Throwing up, especially in morning", value='No' ) seizures = gr.Radio( choices=['No', 'Yes'], label="⚡ Seizures", info="Uncontrolled body movements", value='No' ) weakness = gr.Radio( choices=['No', 'Yes'], label="💪 Weakness", info="Unexplained loss of strength", value='No' ) predict_btn = gr.Button("🔍 PREDICT NOW", variant="primary", size="lg") with gr.Row(): with gr.Column(scale=1): with gr.Group(elem_classes="card"): gr.Markdown("### 📊 DIAGNOSIS RESULT") result_text = gr.HTML(label="Prediction") probability = gr.Textbox( label="Confidence Score", interactive=False, placeholder="Click predict to see result", lines=1, show_label=True ) recommendations = gr.Markdown("### 💡 RECOMMENDATIONS\n\n*Click predict to see recommendations*") def handle_prediction(age, gender, headache, memory_loss, visual_disturbance, nausea, vomiting, seizures, weakness, coordination_issues): result, prob, recs, color, icon = predict_tumor( age, gender, headache, memory_loss, visual_disturbance, nausea, vomiting, seizures, weakness, coordination_issues ) styled_result = f"""
{icon}
{result}
Risk Assessment Complete
""" return styled_result, prob, recs predict_btn.click( handle_prediction, inputs=[age, gender, headache, memory_loss, visual_disturbance, nausea, vomiting, seizures, weakness, coordination_issues], outputs=[result_text, probability, recommendations] ) gr.HTML(""" """) demo.launch()