PrivaMed / app.py
NMMAITA's picture
Upload 17 files
906d507 verified
import json
import os
import subprocess
import threading
import time
import numpy as np
import tensorflow as tf
from flask import Flask, render_template, jsonify, request
from werkzeug.utils import secure_filename
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads'
os.makedirs('uploads', exist_ok=True)
training_status = {
"running": False,
"finished": False
}
def run_training(file_path):
training_status["running"] = True
training_status["finished"] = False
with open("training_results.json", "w") as f:
json.dump([], f)
server = subprocess.Popen(["python3", "server.py", file_path])
time.sleep(3)
client0 = subprocess.Popen(["python3", "client.py", "0", file_path])
client1 = subprocess.Popen(["python3", "client.py", "1", file_path])
server.wait()
client0.wait()
client1.wait()
training_status["running"] = False
training_status["finished"] = True
@app.route("/")
def index():
return render_template("landing.html")
@app.route("/dashboard")
def dashboard():
return render_template("index.html")
@app.route("/predict")
def predict():
return render_template("predict.html")
@app.route("/predict_result", methods=["POST"])
def predict_result():
diagnosis_type = request.form.get("diagnosis_type", "diabetes")
if diagnosis_type == "diabetes":
features = [
float(request.form.get("pregnancies", 0)),
float(request.form.get("glucose", 0)),
float(request.form.get("blood_pressure", 0)),
float(request.form.get("skin_thickness", 0)),
float(request.form.get("insulin", 0)),
float(request.form.get("bmi", 0)),
float(request.form.get("diabetes_pedigree", 0)),
float(request.form.get("age", 0)),
]
model_path = "diabetes_model.keras"
disease_name = "Diabetes"
elif diagnosis_type == "heart":
features = [
float(request.form.get("age", 0)),
float(request.form.get("sex", 0)),
float(request.form.get("cp", 0)),
float(request.form.get("trestbps", 0)),
float(request.form.get("chol", 0)),
float(request.form.get("fbs", 0)),
float(request.form.get("restecg", 0)),
float(request.form.get("thalach", 0)),
float(request.form.get("exang", 0)),
float(request.form.get("oldpeak", 0)),
float(request.form.get("slope", 0)),
float(request.form.get("ca", 0)),
float(request.form.get("thal", 0)),
]
model_path = "heart_model.keras"
disease_name = "Heart Disease"
else:
return jsonify({"error": "Invalid diagnosis type"})
X = np.array([features])
model = tf.keras.models.load_model(model_path)
prediction = model.predict(X)[0][0]
risk = "High Risk" if prediction > 0.5 else "Low Risk"
confidence = round(float(prediction) * 100, 1) if prediction > 0.5 else round((1 - float(prediction)) * 100, 1)
return jsonify({
"risk": risk,
"confidence": confidence,
"probability": round(float(prediction) * 100, 1),
"disease": disease_name
})
@app.route("/start_training", methods=["POST"])
def start_training():
if training_status["running"]:
return jsonify({"status": "already running"})
file_path = "diabetes.csv"
if "file" in request.files and request.files["file"].filename != "":
file = request.files["file"]
filename = secure_filename(file.filename)
file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(file_path)
thread = threading.Thread(target=run_training, args=(file_path,))
thread.start()
return jsonify({"status": "started"})
@app.route("/status")
def status():
results = []
if os.path.exists("training_results.json"):
with open("training_results.json", "r") as f:
results = json.load(f)
return jsonify({
"running": training_status["running"],
"finished": training_status["finished"],
"rounds": results
})
if __name__ == "__main__":
app.run(debug=False, port=8000)