File size: 2,213 Bytes
44acddd
 
2d15367
44acddd
c1364b9
44acddd
 
 
736bf26
44acddd
aeee3ba
 
 
44acddd
bc13748
 
44acddd
2e79b76
2d15367
 
44acddd
 
 
 
39e53c4
44acddd
 
 
 
b896387
 
3ebd9c2
 
44acddd
 
 
 
 
 
 
3ebd9c2
 
44acddd
9d2c349
44acddd
3ebd9c2
 
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
64
65
66
67
68
69
70
71
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", 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, item: Item):
    print('Item:', item)

    print('File name:', item.file.filename)
    
    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())

    print('Detect start')

    # Run YOLOv7 detection and save output
    subprocess.run(["python", "detect.py", "--conf", "0.5", "--img-size", "640", "--weights", "app/model/best.pt",  "--source", input_file, "--save-txt", "--save-conf", "--exist-ok", "--project", output_file])

    print('Detect end')

    # 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)