|
import os |
|
from fastapi import FastAPI, Request, UploadFile |
|
from fastapi.responses import HTMLResponse, FileResponse |
|
from fastapi.staticfiles import StaticFiles |
|
from fastapi.templating import Jinja2Templates |
|
from fastapi.middleware.cors import CORSMiddleware |
|
from pydantic import BaseModel |
|
|
|
import subprocess |
|
from pathlib import Path |
|
from config import settings |
|
import logging |
|
|
|
|
|
app = FastAPI( |
|
title=settings.PROJECT_NAME, openapi_url=f"{settings.API_V1_STR}/openapi.json" |
|
) |
|
|
|
|
|
|
|
|
|
app.mount("/static", FileResponse, name="static") |
|
templates = Jinja2Templates(directory="app/templates") |
|
|
|
class Item(BaseModel): |
|
file: UploadFile |
|
|
|
|
|
@app.get("/", response_class=HTMLResponse) |
|
async def root(request: Request): |
|
return templates.TemplateResponse("index.html", {"request": request}) |
|
|
|
|
|
@app.post("/detect/", response_class=HTMLResponse) |
|
async def detect_objects(request: Request, file: UploadFile): |
|
try: |
|
|
|
print('File name:', file.filename) |
|
|
|
input_file_path = f"app/static/{file.filename}" |
|
output_file_path = f"app/static/output/{file.filename}" |
|
|
|
|
|
with open(input_file_path, "wb") as input_file: |
|
input_file.write(await file.read()) |
|
|
|
print('Detect start') |
|
|
|
|
|
subprocess.run(["python", "detect.py", "--conf", "0.5", "--img-size", "640", "--weights", "app/model/best.pt", |
|
"--source", str(input_file_path), "--save-txt", "--save-conf", "--exist-ok", "--project", str(output_file_path)]) |
|
|
|
print('Detect end') |
|
|
|
|
|
return templates.TemplateResponse( |
|
"result.html", |
|
{"request": request, "original_image": str(input_file_path), "output_image": str(output_file_path)}, |
|
) |
|
|
|
|
|
except Exception as e: |
|
logging.error(f"Error in /detect endpoint: {str(e)}") |
|
raise e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
import uvicorn |
|
uvicorn.run(app, host="0.0.0.0", port=8001) |
|
|