205 lines
6.0 KiB
Python
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
|
|
}) |