File size: 1,791 Bytes
bd55a25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from fastapi import APIRouter, File, UploadFile, HTTPException, Form
from fastapi.responses import StreamingResponse
from app.services.image_generation_service import generate_image_from_files_and_prompt
from app.services.prompt_factory import MULTI_VIEW_TEMPLATE 
from app.schemas.common_schemas import ModelSchema, CameraSchema,GarmentType
import io
from typing import List, Annotated

router = APIRouter()
        
@router.post("/multi_view", tags=["Multi_view"])
async def multi_view(
    garment_images: List[UploadFile] = File(..., description="Exactly one image of the garments (e.g., dress /bag/shoes).", min_items=1, max_items=1),
):
    
    # Validation for exactly two files (FastAPI also handles min_items/max_items for File, but explicit check is fine)
    if not garment_images or len(garment_images) != 1:
        raise HTTPException(status_code=400, detail="Exactly one garment images are required for outfit match.")

    image_bytes_list = []
    for image_file in garment_images: # No need to check if garment_images is None here
        if not image_file.content_type.startswith("image/"):
            raise HTTPException(status_code=400, detail=f"Invalid file type for garment: {image_file.filename}. Must be an image.")
        content = await image_file.read()
        image_bytes_list.append((content, image_file.filename)) # Store as tuple (bytes, filename)
    
    prompt=MULTI_VIEW_TEMPLATE

    generated_image_data = await generate_image_from_files_and_prompt(
        image_files=image_bytes_list, 
        prompt=prompt
    )

    if generated_image_data:
        return StreamingResponse(io.BytesIO(generated_image_data), media_type="image/png")
    else:
        raise HTTPException(status_code=500, detail="Failed to generate image. Check service logs.")