jayvatliq's picture
Upload folder using huggingface_hub
b1adb1e verified
Raw
History Blame Contribute Delete
2.71 kB
import os
from io import BytesIO
from typing import Annotated, List
import fastapi
from app.dependencies.yolo_classification_6 import yolo_rule_based_classification
from dotenv import load_dotenv
from fastapi import File, UploadFile
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from PIL import Image
load_dotenv()
app = fastapi.FastAPI()
_default_origins = ",".join(
[
"http://localhost:5173",
"http://localhost:5174",
"http://localhost:8080",
"http://localhost:8081",
"http://localhost:8082",
"https://dusk-upload-suite.lovable.app",
]
)
_cors_origins = [
o.strip()
for o in os.getenv("CORS_ORIGINS", _default_origins).split(",")
if o.strip()
]
app.add_middleware(
CORSMiddleware,
allow_origins=_cors_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
OUTPUT_DIR = os.path.join(BASE_DIR, "output_files")
app.mount("/files", StaticFiles(directory=OUTPUT_DIR), name="files")
@app.post("/api/classify-img")
async def classify_message(
files: Annotated[List[UploadFile], File(...)],
):
try:
print("FILES RECEIVED", files)
imgs = await get_imgs(files)
print("imgs = ", imgs)
img_results = []
for img in imgs:
try:
rule_based_view_type, review, final_scores, file_details = (
await yolo_rule_based_classification(
img["pil_img"],
img["file_name"],
img["img"],
)
)
img_results.append(
{
"rule_based_view_type": rule_based_view_type,
"review": review,
"final_scores": final_scores,
"error": None,
"file_details": file_details,
}
)
except Exception as e:
print("INSIDE ERROR DUDE", e)
img_results.append({"error": e})
print("img_results = ", img_results)
return img_results
except Exception as e:
print("ERROR _ ", e)
return {"error": str(e)}
async def get_imgs(files: List[UploadFile]) -> list[dict]:
imgs = []
for each in files:
resp = await each.read()
image_bytes = BytesIO(resp)
img = Image.open(image_bytes)
imgs.append({"img": each, "pil_img": img, "file_name": each.filename})
each.seek(0)
print("IMAGES = ", imgs)
return imgs