TryApi / app.py
tejani's picture
Create app.py
f332e2d verified
raw
history blame
2.87 kB
from fastapi import FastAPI, File, UploadFile, HTTPException, Form
from fastapi.responses import FileResponse
from fastapi.staticfiles import StaticFiles
import requests
import os
import uuid
import shutil
from tempfile import NamedTemporaryFile
app = FastAPI()
# Mount a static directory to serve files
STATIC_DIR = "/app/static"
os.makedirs(STATIC_DIR, exist_ok=True)
app.mount("/static", StaticFiles(directory=STATIC_DIR), name="static")
# API endpoint for ChangeClothesAI
CHANGE_CLOTHES_API = os.environ.get('URL')
@app.post("/try-on/")
async def try_on(
human_img: UploadFile = File(...),
garment_img: UploadFile = File(...),
garment_desc: str = Form("dresses"),
category: str = Form("dresses")
):
try:
# Generate unique filenames
human_filename = f"{uuid.uuid4()}_{human_img.filename}"
garment_filename = f"{uuid.uuid4()}_{garment_img.filename}"
# Save files temporarily in the static directory
human_path = os.path.join(STATIC_DIR, human_filename)
garment_path = os.path.join(STATIC_DIR, garment_filename)
try:
# Save human image
with open(human_path, "wb") as f:
shutil.copyfileobj(human_img.file, f)
# Save garment image
with open(garment_path, "wb") as f:
shutil.copyfileobj(garment_img.file, f)
# Generate public URLs (assuming the Space is hosted at a public URL)
# Replace YOUR_SPACE_URL with the actual Hugging Face Space URL
base_url = "https://tejani-tryapi.hf.space" # e.g., https://your-username-your-space.hf.space
human_url = f"{base_url}/static/{human_filename}"
garment_url = f"{base_url}/static/{garment_filename}"
# Call the ChangeClothesAI API
response = requests.post(CHANGE_CLOTHES_API, headers=headers, data=data)
# Check if the API call was successful
if response.status_code != 200:
raise HTTPException(status_code=response.status_code, detail="Error calling ChangeClothesAI API")
# Delete temporary files
os.remove(human_path)
os.remove(garment_path)
return response.json()
except Exception as e:
# Clean up in case of any errors
if os.path.exists(human_path):
os.remove(human_path)
if os.path.exists(garment_path):
os.remove(garment_path)
raise HTTPException(status_code=500, detail=str(e))
finally:
human_img.file.close()
garment_img.file.close()
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error processing files: {str(e)}")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=7860)