File size: 2,082 Bytes
44acddd 2d15367 44acddd c1364b9 44acddd 736bf26 44acddd aeee3ba 44acddd 2d15367 44acddd 39e53c4 44acddd e6702de aeee3ba e6702de |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
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
app = FastAPI(
title=settings.PROJECT_NAME, openapi_url=f"{settings.API_V1_STR}/openapi.json"
)
app.mount("/static", FileResponse, name="static")
templates = Jinja2Templates(directory="templates")
app.mount("/static", StaticFiles(directory="app/static"), 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, 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}"},
)
# Set all CORS enabled origins
if settings.BACKEND_CORS_ORIGINS:
app.add_middleware(
CORSMiddleware,
allow_origins=[str(origin) for origin in settings.BACKEND_CORS_ORIGINS],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Start app
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8001)
|