Spaces:
Running
Running
File size: 5,928 Bytes
1e3590e 2109445 7c944d2 29ad646 1abda0b 689365f 29ad646 2109445 1abda0b e2f6b47 2109445 29ad646 2109445 689365f 62b6149 aa2dc1a 5e83dfa 29ad646 2109445 29ad646 2109445 29ad646 2109445 9206f91 2109445 29ad646 2109445 29ad646 2109445 29ad646 9206f91 29ad646 2109445 29ad646 2109445 29ad646 9206f91 29ad646 2109445 29ad646 ab55739 a1f20ce ab55739 020f091 2109445 29ad646 2109445 29ad646 2109445 29ad646 fc208cf df05657 fc208cf fea12bc fc208cf fea12bc 5d9e0d9 fea12bc fc208cf aa2dc1a 7dfe6b1 fc208cf 29ad646 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
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 --------
@app.route("/")
def index():
if "username" in session:
return redirect(url_for("home"))
return redirect(url_for("login"))
# Signup
@app.route("/signup", methods=["GET", "POST"])
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
@app.route("/login", methods=["GET", "POST"])
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
@app.route("/logout")
def logout():
session.pop("username", None)
flash("You have been logged out.", "info")
return redirect(url_for("login"))
# Home page
@app.route("/home")
def home():
if "username" not in session:
return redirect(url_for("login"))
return render_template("home.html", username=session["username"])
#COUNTDOWN
@app.route("/countdown")
def countdown():
if "username" not in session:
return redirect(url_for("login"))
return render_template("countdown.html", username=session["username"])
# Predict page
@app.route("/predict", methods=["GET", "POST"])
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)
@app.route("/titanic", methods=["GET", "POST"])
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)
@app.route("/heart", methods=["GET", "POST"])
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)
|