|
from fastapi import FastAPI, Request, UploadFile |
|
from fastapi.responses import HTMLResponse, FileResponse |
|
from fastapi.templating import Jinja2Templates |
|
from pydantic import BaseModel |
|
import subprocess |
|
from pathlib import Path |
|
|
|
app = FastAPI() |
|
|
|
app.mount("/static", FileResponse, name="static") |
|
|
|
templates = Jinja2Templates(directory="templates") |
|
|
|
class Item(BaseModel): |
|
file: UploadFile |
|
|
|
@app.get("/", response_class=HTMLResponse) |
|
async def read_index(request: Request): |
|
return templates.TemplateResponse("index.html", {"request": request}) |
|
|
|
@app.post("/detect", response_class=HTMLResponse) |
|
async def detect_objects(request: Request, item: Item): |
|
input_file = f"uploads/{item.file.filename}" |
|
output_file = f"static/output/{item.file.filename}" |
|
|
|
|
|
with open(input_file, "wb") as file: |
|
file.write(item.file.file.read()) |
|
|
|
|
|
subprocess.run(["python", "detect.py", "--weights", "model/best.pt", "--img-size", "640", "--source", input_file, "--save-txt", "--save-conf", "--exist-ok", "--output", output_file]) |
|
|
|
|
|
return templates.TemplateResponse( |
|
"result.html", |
|
{"request": request, "original_image": f"/static/{item.file.filename}", "output_image": f"/static/output/{item.file.filename}"}, |
|
) |
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
import uvicorn |
|
uvicorn.run(app, host="0.0.0.0", port=8001) |
|
|