Devashishraghav's picture
Upload app.py with huggingface_hub
5298dcc verified
import os
from fastapi import FastAPI, UploadFile, File
from fastapi.staticfiles import StaticFiles
from typing import List
from processor.pipeline import run_card_pipeline
from processor.zipper import standardize_and_zip
from fastapi.responses import FileResponse, JSONResponse, Response
app = FastAPI(title="CardProcessor-Pro")
# Serve static files for the UI
os.makedirs("static", exist_ok=True)
app.mount("/static", StaticFiles(directory="static"), name="static")
@app.get("/")
def serve_index():
return FileResponse("static/index.html")
@app.post("/api/process")
async def process_images(files: List[UploadFile] = File(...)):
"""
Receives multiple images, processes them (bg removal, crop, upscale, redact),
and returns a ZIP file containing the processed outputs.
"""
processed_images = []
for file in files:
try:
img_bytes = await file.read()
processed_img = run_card_pipeline(img_bytes)
processed_images.append((file.filename, processed_img))
except Exception as e:
print(f"Error processing {file.filename}: {e}")
continue
if not processed_images:
return JSONResponse(status_code=400, content={"error": "No valid images could be processed."})
try:
zip_stream = standardize_and_zip(processed_images)
return Response(
content=zip_stream.getvalue(),
media_type="application/zip",
headers={"Content-Disposition": "attachment; filename=processed_cards.zip"}
)
except Exception as e:
return JSONResponse(status_code=500, content={"error": f"Failed to zip images: {str(e)}"})
if __name__ == "__main__":
import uvicorn
uvicorn.run("app:app", host="0.0.0.0", port=8000, reload=True)