Spaces:
Sleeping
Sleeping
File size: 4,042 Bytes
a41986a af6288c a41986a af6288c a41986a af6288c 68f9b9e af6288c 68f9b9e 95dae8e 68f9b9e 95dae8e 68f9b9e 95dae8e 68f9b9e 95dae8e 68f9b9e 95dae8e 68f9b9e 95dae8e 68f9b9e 95dae8e 68f9b9e 95dae8e 68f9b9e | 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 | import os
import sys
from types import ModuleType
# 1. SET ENVIRONMENT FIRST
os.environ["KERAS_BACKEND"] = "torch"
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3" # Suppress TF logs
# 2. INLINE MONKEY-PATCH (Absolute priority)
def _patch():
if "tensorflow" in sys.modules: return
try:
import keras
tf = ModuleType("tensorflow")
sys.modules["tensorflow"] = tf
tf.keras = keras
sys.modules["tensorflow.keras"] = keras
# Essential submodules for 'fer'
import keras.models, keras.layers
sys.modules["tensorflow.keras.models"] = keras.models
sys.modules["tensorflow.keras.layers"] = keras.layers
# Support for 'tensorflow.python.keras'
tf_py = ModuleType("tensorflow.python")
sys.modules["tensorflow.python"] = tf_py
tf_py.keras = keras
sys.modules["tensorflow.python.keras"] = keras
print("Inline monkey-patch success.")
except Exception as e:
print(f"Inline monkey-patch failed: {e}")
_patch()
# 3. NOW PROCEED WITH OTHER IMPORTS
from fastapi import FastAPI, Request
from fastapi.responses import RedirectResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from app.database import engine, Base
from app.routers import auth, dashboard, emotion, activities, diary
# Create Database Tables
Base.metadata.create_all(bind=engine)
app = FastAPI(title="NeuroSense")
# Get base directory (backend root)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
FRONTEND_DIR = os.path.join(os.path.dirname(BASE_DIR), "frontend")
# Ensure necessary directories exist in backend/data
os.makedirs(os.path.join(BASE_DIR, "data/uploads/emotions"), exist_ok=True)
os.makedirs(os.path.join(BASE_DIR, "data/uploads/diary"), exist_ok=True)
os.makedirs(os.path.join(BASE_DIR, "data/reports"), exist_ok=True)
# Mount Static Files (CSS, JS) from frontend folder
app.mount("/static", StaticFiles(directory=os.path.join(FRONTEND_DIR, "static")), name="static")
# Mount Data Folders for viewing (from backend/data)
app.mount("/uploads", StaticFiles(directory=os.path.join(BASE_DIR, "data/uploads")), name="uploads")
app.mount("/reports", StaticFiles(directory=os.path.join(BASE_DIR, "data/reports")), name="reports")
# Templates from frontend/templates
templates = Jinja2Templates(directory=os.path.join(FRONTEND_DIR, "templates"))
# Include Routers
app.include_router(auth.router)
app.include_router(dashboard.router)
app.include_router(emotion.router)
app.include_router(activities.router)
app.include_router(diary.router)
# Page Routes
@app.get("/")
def home_page(request: Request):
# Root is Dashboard
return templates.TemplateResponse(request, "dashboard.html", {"request": request})
@app.get("/login")
def login_page(request: Request):
return templates.TemplateResponse(request, "login.html", {"request": request})
@app.get("/children")
def children_page(request: Request):
return templates.TemplateResponse(request, "children.html", {"request": request})
@app.get("/emotion-learning")
def emotion_page(request: Request):
return templates.TemplateResponse(request, "emotion.html", {"request": request})
@app.get("/activities")
def activities_page(request: Request):
return templates.TemplateResponse(request, "activities.html", {"request": request})
@app.get("/game/{game_name}")
def game_page(request: Request, game_name: str):
return templates.TemplateResponse(request, "game.html", {"request": request, "game_name": game_name})
@app.get("/dashboard")
def dashboard_redirect(request: Request):
return RedirectResponse(url="/")
@app.get("/diary")
def diary_page(request: Request):
return templates.TemplateResponse(request, "diary.html", {"request": request})
@app.get("/quiz")
def quiz_page(request: Request):
return templates.TemplateResponse(request, "quiz.html", {"request": request})
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="127.0.0.1", port=8000)
|