Files
Resume/routes/projects.py
2025-11-08 19:15:39 +01:00

205 lines
6.0 KiB
Python

from fastapi import APIRouter, Request, Form
from fastapi.templating import Jinja2Templates
from models.models import MODELS, runner
from datasets.datasets import DATASETS
from models.utils import save_result, load_results, predict_yolo
from datasets.MC_NDCC import MC_NDCC
import glob
import os
import time
router = APIRouter(prefix="/projects", tags=["projects"])
templates = Jinja2Templates(directory="templates")
@router.get("")
async def get_projects(request: Request):
return templates.TemplateResponse("projects.html", {"request": request, "title": "Projects"})
@router.get("/run-models")
async def run_models(request: Request):
results = load_results(limit = 20, results_file='templates/static/public/files/results.csv')
return templates.TemplateResponse("projects/run_models.html", {"request": request, "title": "Run Models", "models": MODELS, "datasets": DATASETS, "results": results})
@router.post("/run-models")
async def run_models(request: Request,
model: str = Form(...),
dataset: str = Form(...),
C1: float = Form(None),
C2: float = Form(None),
C3: float = Form(None),
C4: float = Form(None),
C5: float = Form(None),
C6: float = Form(None),
):
params = None
if model == MODELS[0]:
params = {'C': C1}
elif model == MODELS[1]:
params = {'C': C1}
elif model == MODELS[2]:
params = {'C': [C1, C2, C3, C4, C5, C6]}
elif model == MODELS[3]:
params = {'C': [C1, C2]}
elif model == MODELS[4]:
params = {'C': [C1, C2]}
result = runner(model, dataset, params)
save_result(result['model'], result['dataset'], result['accuracy'], result['params'], results_file='templates/static/public/files/results.csv')
results = load_results(limit = 20, results_file='templates/static/public/files/results.csv')
return templates.TemplateResponse("projects/run_models.html",
{"request": request,
"title": "Run Models",
"models": MODELS,
"datasets": DATASETS,
"selected_model": model,
"selected_dataset": dataset,
"results": results
})
@router.get("/generate-ndcc")
async def generate_ndcc(request: Request):
return templates.TemplateResponse("projects/generate_ndcc.html",
{"request": request,
"centers": 1,
"nos": 100,
"nof": 10,
"noc": 2,
"title": "Generate NDCC Dataset"
})
@router.post("/generate-ndcc")
async def generate_ndcc(request: Request,
centers: int = Form(None),
nos: int = Form(None),
nof: int = Form(None),
noc: int = Form(None)
):
tmp_dir = "templates/static/public/files"
for f in glob.glob(os.path.join(tmp_dir, "NDCC_*.csv")):
try:
os.remove(f)
except Exception as e:
print(f"Could not remove {f}: {e}")
ndccObj = MC_NDCC(centers, nos, nof, noc)
dataset_name = f"NDCC_{nos}_{nof}_{noc}.csv"
_ = ndccObj.get_csv(f"templates/static/public/files/NDCC_{nos}_{nof}_{noc}.csv")
print(dataset_name)
return templates.TemplateResponse("projects/generate_ndcc.html",
{"request": request,
"title": "Generate NDCC Dataset",
"centers": centers,
"nos": nos,
"nof": nof,
"noc": noc,
"dataset_name": dataset_name,
})
@router.get("/run-yolo")
async def run_yolo(request: Request,
):
images = [
"RPf_00152.png",
"RPf_00153.png",
"RPf_00156.png",
"RPf_00200.png",
"RPf_00201.png",
"RPf_00202.png",
"RPf_00281.png",
"RPf_00282.png",
"RPf_00283.png",
"RPf_00291.png",
"RPf_00293.png",
"RPf_00294.png",
"RPf_00302.png",
"RPf_00303.png",
"RPf_00304.png",
"RPf_00310.png",
"RPf_00311.png",
"RPf_00312.png",
]
return templates.TemplateResponse("projects/run_yolo.html", {
"request": request,
"title": "Run Yolo",
"images": images,
"selected_image": images[0]
})
@router.post("/run-yolo")
async def run_yolo_post(
request: Request,
selected_image: str = Form(...),
confidence: float = Form(...)
):
images = [
"RPf_00152.png",
"RPf_00153.png",
"RPf_00156.png",
"RPf_00200.png",
"RPf_00201.png",
"RPf_00202.png",
"RPf_00281.png",
"RPf_00282.png",
"RPf_00283.png",
"RPf_00291.png",
"RPf_00293.png",
"RPf_00294.png",
"RPf_00302.png",
"RPf_00303.png",
"RPf_00304.png",
"RPf_00310.png",
"RPf_00311.png",
"RPf_00312.png",
]
# Run YOLO prediction
file_path = "templates/static/public/files/repair/predicted/predicted_image.jpg"
if os.path.exists(file_path):
os.remove(file_path)
print("File removed.")
else:
print("File does not exist.")
_ = predict_yolo(selected_image, confidence)
# Add cache-busting query string (timestamp)
result_url = f"../static/public/files/repair/predicted/predicted_image.jpg?{int(time.time())}"
return templates.TemplateResponse("projects/run_yolo.html", {
"request": request,
"title": "Run Yolo",
"images": images,
"selected_image": selected_image,
"selected_confidence": confidence,
"result_path": result_url
})