Sudipta Nayak
app start code added
e6702de
raw
history blame
1.46 kB
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}"
# Save the uploaded file
with open(input_file, "wb") as file:
file.write(item.file.file.read())
# Run YOLOv7 detection and save output
subprocess.run(["python", "detect.py", "--weights", "model/best.pt", "--img-size", "640", "--source", input_file, "--save-txt", "--save-conf", "--exist-ok", "--output", output_file])
# Render HTML using Jinja2Templates
return templates.TemplateResponse(
"result.html",
{"request": request, "original_image": f"/static/{item.file.filename}", "output_image": f"/static/output/{item.file.filename}"},
)
# Start app
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8001)