Spaces:
Sleeping
Sleeping
| from flask import Flask, render_template, request | |
| import requests | |
| import json | |
| app = Flask(__name__) | |
| # API URL | |
| API_URL = "https://ak0601-et-alzheimer.hf.space/predict" | |
| # Feature names in order | |
| FEATURE_NAMES = [ | |
| "ROI", | |
| "nFixations", | |
| "nTobiiSaccades", | |
| "regSaccades", | |
| "longSaccades", | |
| "tinySaccades", | |
| "saccadeTotLength", | |
| "totalFixTime", | |
| "totalSpokenTime", | |
| "speechDelay", | |
| "endSpeechDelay", | |
| "startPupL", | |
| "startPupR", | |
| "endPupL", | |
| "endPupR", | |
| "diffPupL", | |
| "diffPupR" | |
| ] | |
| def index(): | |
| prediction_result = None | |
| input_values = {} | |
| error_message = None | |
| if request.method == 'POST' and 'predict_btn' in request.form: | |
| try: | |
| # Collect and convert features | |
| features = [] | |
| for name in FEATURE_NAMES: | |
| val = request.form.get(name) | |
| input_values[name] = val # Keep for re-populating form | |
| features.append(float(val)) | |
| # Prepare payload | |
| payload = {"features": features} | |
| # Call API | |
| response = requests.post(API_URL, json=payload) | |
| if response.status_code == 200: | |
| result = response.json() | |
| # Determine class label (optional mapping) | |
| class_map = {0: "Control/Healthy", 1: "MCI (Mild Cognitive Impairment)", 2: "Alzheimer's Disease"} | |
| predicted_class_idx = result.get("predicted_class") | |
| predicted_label = class_map.get(predicted_class_idx, f"Class {predicted_class_idx}") | |
| prediction_result = { | |
| "class_index": predicted_class_idx, | |
| "label": predicted_label, | |
| "confidence": f"{result.get('confidence', 0):.2%}", | |
| "probabilities": result.get("probabilities") | |
| } | |
| else: | |
| error_message = f"API Error: {response.status_code} - {response.text}" | |
| except ValueError: | |
| error_message = "Invalid input: Please ensure all fields contain numeric values." | |
| except requests.exceptions.ConnectionError: | |
| error_message = "Connection Error: Could not connect to the prediction API." | |
| except Exception as e: | |
| error_message = f"An error occurred: {str(e)}" | |
| return render_template('index.html', feature_names=FEATURE_NAMES, result=prediction_result, inputs=input_values, error=error_message) | |
| if __name__ == '__main__': | |
| app.run(debug=True, port=7860) # Use 8080 to avoid conflict with default 5000 if needed | |