Spaces:
Sleeping
Sleeping
| from flask import Flask, render_template, request, redirect, url_for, session, flash | |
| from werkzeug.security import generate_password_hash, check_password_hash | |
| from supabase import create_client | |
| import joblib | |
| import numpy as np | |
| import os | |
| import skops.io as sio | |
| app = Flask(__name__) | |
| app.secret_key = "supersecretkey" # change in production | |
| # -------- Supabase setup -------- | |
| SUPABASE_URL = os.environ.get("SUPABASE_URL") | |
| SUPABASE_KEY = os.environ.get("SUPABASE_KEY") | |
| if not SUPABASE_URL or not SUPABASE_KEY: | |
| raise ValueError("Supabase URL or KEY not set in environment variables") | |
| supabase = create_client(SUPABASE_URL, SUPABASE_KEY) | |
| # -------- Load ML model -------- | |
| # model = joblib.load("rf_house_price_model.joblib") | |
| model = sio.load("rf_house_price_model.skops") | |
| #titanic_model = joblib.load("titanic_rf_model.joblib") | |
| titanic_model = sio.load("titanic_rf_model.skops") | |
| # Load Heart Disease model | |
| heart_model = sio.load("heart_rf.skops") | |
| # -------- Routes -------- | |
| def index(): | |
| if "username" in session: | |
| return redirect(url_for("home")) | |
| return redirect(url_for("login")) | |
| # Signup | |
| def signup(): | |
| if request.method == "POST": | |
| username = request.form["username"] | |
| password_hashed = generate_password_hash(request.form["password"]) | |
| # Check if username exists | |
| res = supabase.table("users").select("*").eq("username", username).execute() | |
| if res.data: | |
| flash("Username already exists. Try another one.", "error") | |
| return redirect(url_for("signup")) | |
| # Insert new user | |
| supabase.table("users").insert({"username": username, "password": password_hashed}).execute() | |
| flash("Signup successful! Please log in.", "success") | |
| return redirect(url_for("login")) | |
| return render_template("signup.html") | |
| # Login | |
| def login(): | |
| if request.method == "POST": | |
| username = request.form["username"] | |
| password = request.form["password"] | |
| res = supabase.table("users").select("*").eq("username", username).execute() | |
| if res.data and check_password_hash(res.data[0]["password"], password): | |
| session["username"] = username | |
| flash("Login successful!", "success") | |
| return redirect(url_for("home")) | |
| flash("Invalid credentials. Try again.", "error") | |
| return redirect(url_for("login")) | |
| return render_template("login.html") | |
| # Logout | |
| def logout(): | |
| session.pop("username", None) | |
| flash("You have been logged out.", "info") | |
| return redirect(url_for("login")) | |
| # Home page | |
| def home(): | |
| if "username" not in session: | |
| return redirect(url_for("login")) | |
| return render_template("home.html", username=session["username"]) | |
| #COUNTDOWN | |
| def countdown(): | |
| if "username" not in session: | |
| return redirect(url_for("login")) | |
| return render_template("countdown.html", username=session["username"]) | |
| # Predict page | |
| def predict(): | |
| if "username" not in session: | |
| return redirect(url_for("login")) | |
| prediction = None | |
| if request.method == "POST": | |
| features = [ | |
| float(request.form["longitude"]), | |
| float(request.form["latitude"]), | |
| float(request.form["housing_median_age"]), | |
| float(request.form["total_rooms"]), | |
| float(request.form["total_bedrooms"]), | |
| float(request.form["population"]), | |
| float(request.form["households"]), | |
| float(request.form["median_income"]), | |
| float(request.form["rooms_per_household"]) | |
| ] | |
| prediction = round(model.predict([features])[0], 2) | |
| return render_template("predict.html", prediction=prediction) | |
| def titanic(): | |
| if "username" not in session: | |
| return redirect(url_for("login")) | |
| prediction = None | |
| if request.method == "POST": | |
| # Example Titanic features (adjust to your model) | |
| features = [ | |
| float(request.form["pclass"]), | |
| float(request.form["sex"]), # encode 0=male,1=female | |
| float(request.form["age"]), | |
| float(request.form["sibsp"]), | |
| float(request.form["parch"]), | |
| float(request.form["fare"]), | |
| float(request.form["alone"]), # encode 0=False,1=True | |
| float(request.form["IsAlone"]), # encode 0=False,1=True | |
| float(request.form["FamilySize"]), | |
| float(request.form["embarked_Q"]), # encode 0=False,1=True | |
| float(request.form["embarked_S"]) # encode 0=False,1=True | |
| ] | |
| prediction = titanic_model.predict([features])[0] | |
| return render_template("titanic.html", prediction=prediction) | |
| def heart(): | |
| if "username" not in session: | |
| return redirect(url_for("login")) | |
| prediction = None | |
| if request.method == "POST": | |
| features = [ | |
| float(request.form["age"]), | |
| float(request.form["sex"]), | |
| float(request.form["cp"]), | |
| float(request.form["trestbps"]), | |
| float(request.form["chol"]), | |
| float(request.form["fbs"]), | |
| float(request.form["restecg"]), | |
| float(request.form["thalach"]), | |
| float(request.form["exang"]), | |
| float(request.form["oldpeak"]), | |
| float(request.form["slope"]), | |
| float(request.form["ca"]), | |
| float(request.form["thal"]) | |
| ] | |
| prediction = heart_model.predict([features])[0] | |
| return render_template("heart.html", prediction=prediction) | |
| if __name__ == "__main__": | |
| app.run(host="0.0.0.0", port=7860) | |