import json import logging from fastapi import APIRouter, HTTPException, BackgroundTasks from app.schemas.design import DesignModel, ModelProgressModel, DesignStreamModel from app.schemas.response_template import ResponseModel from app.service.design_fast.design_generate import design_generate, design_generate_v2 from app.service.design_fast.model_process_service import model_transpose router = APIRouter() logger = logging.getLogger() @router.post("/design") def design(request_data: DesignModel): """ - **objects.items.transparent**: ```json "transparent":{ "mask_url":"test/transparent_test/transparent_mask.png", "scale":0.1 }, ``` - **mask_url** 为空"" -> 单件衣服透明 - **mask_url** 非空"mask_url" -> 区域透明 - **transpose** 镜像模式 ,:"top_bottom"或"left_right" - **rotate** 45, - 创建一个具有以下参数的请求体: 示例参数: ```json { "objects": [ { "basic": { "body_point_test": { "waistband_right": [ 203, 249 ], "hand_point_right": [ 229, 343 ], "waistband_left": [ 119, 248 ], "hand_point_left": [ 97, 343 ], "shoulder_left": [ 108, 107 ], "shoulder_right": [ 212, 107 ] }, "layer_order": true, "preview_submit": "preview", "scale_bag": 0.7, "scale_earrings": 0.16, "self_template": true, "single_overall": "overall", "switch_category": "" }, "items": [ { "businessId": 2115382, "color": "", "image_id": 61686, "offset": [ 0, 0 ], "path": "aida-sys-image/images/female/dress/0628000564.jpg", "print": { "element": { "element_angle_list": [], "element_path_list": [], "element_scale_list": [], "location": [] }, "overall": { "location": [ [ 53.0, 118.5 ] ], "print_angle_list": [ 0.0 ], "print_path_list": [ "aida-users/89/print/02d57aa8-f342-4e1d-b02c-b278f94dcfe6-3-89.png" ], "print_scale_list": [ [ 0.5, 0.5 ] ], "gap": [ [ 10, 10 ] ] }, "single": { "location": [], "print_angle_list": [], "print_path_list": [], "print_scale_list": [] } }, "priority": 10, "resize_scale": [ 1.0, 1.0 ], "seg_mask_url": "aida-clothing/mask/mask_9698b428-eb93-11f0-9327-0242c0a80003.png", "type": "Dress" }, { "body_path": "aida-sys-image/models/female/2e4815b9-1191-419d-94ed-5771239ca4a5.png", "image_id": 67277, "type": "Body" } ] } ], "process_id": "89" } ``` """ # logger.info(f"design request item is : @@@@@@:{json.dumps(request_data.dict(),indent=4)}") # data = generate(request_data=request_data) # logger.info(f"design response @@@@@@:{json.dumps(data, indent=4)}") # try: logger.info(f"design request item is : @@@@@@:{json.dumps(request_data.dict(), indent=4)}") data = design_generate(request_data=request_data) logger.info(f"design response @@@@@@:{json.dumps(data, indent=4)}") except Exception as e: logger.warning(f"design Run Exception @@@@@@:{e}") raise HTTPException(status_code=404, detail=str(e)) return ResponseModel(data=data) @router.post("/design_v2") async def design_v2(request_data: DesignStreamModel, background_tasks: BackgroundTasks): """ 创建一个具有以下参数的请求体: 示例参数: { "objects": [ { "basic": { "body_point_test": { "waistband_right": [ 203, 249 ], "hand_point_right": [ 229, 343 ], "waistband_left": [ 119, 248 ], "hand_point_left": [ 97, 343 ], "shoulder_left": [ 108, 107 ], "relation_type": "System", "shoulder_right": [ 212, 107 ], "relation_id": 1020356 }, "layer_order": false, "scale_bag": 0.7, "scale_earrings": 0.16, "self_template": false, "single_overall": "overall", "switch_category": "" }, "items": [ { "color": "209 196 171", "image_id": 84093, "offset": [ 1, 1 ], "path": "aida-users/89/sketchboard/female/Outwear/0943d209-7ce0-408c-bc61-83f15da94138.png", "print": { "element": { "element_angle_list": [], "element_path_list": [], "element_scale_list": [], "location": [] }, "overall": { "location": [ [ 0.0, 0.0 ] ], "print_angle_list": [ 0.0, 0.0 ], "print_path_list": [], "print_scale_list": [ [ 0.0, 0.0 ] ] }, "single": { "location": [], "print_angle_list": [], "print_path_list": [], "print_scale_list": [] } }, "resize_scale": [ 1.0, 1.0 ], "type": "Outwear" }, { "color": "63 71 73", "image_id": 100496, "offset": [ 1, 1 ], "path": "aida-sys-image/images/female/blouse/0628001684.jpg", "print": { "element": { "element_angle_list": [], "element_path_list": [], "element_scale_list": [], "location": [] }, "overall": { "location": [ [ 0.0, 0.0 ] ], "print_angle_list": [ 0.0, 0.0 ], "print_path_list": [], "print_scale_list": [ [ 0.0, 0.0 ] ] }, "single": { "location": [], "print_angle_list": [], "print_path_list": [], "print_scale_list": [] } }, "resize_scale": [ 1.0, 1.0 ], "type": "Blouse" }, { "color": "111 78 63", "gradient": "aida-gradient/f69b98e8-4248-4f7a-98a2-21bac41bf3e0.png", "image_id": 92193, "offset": [ 1, 1 ], "path": "aida-sys-image/images/female/trousers/0825001160.jpg", "print": { "element": { "element_angle_list": [], "element_path_list": [], "element_scale_list": [], "location": [] }, "overall": { "location": [ [ 0.0, 0.0 ] ], "print_angle_list": [ 0.0, 0.0 ], "print_path_list": [], "print_scale_list": [ [ 0.0, 0.0 ] ] }, "single": { "location": [], "print_angle_list": [], "print_path_list": [], "print_scale_list": [] } }, "resize_scale": [ 1.0, 1.0 ], "type": "Trousers" }, { "body_path": "aida-sys-image/models/female/2e4815b9-1191-419d-94ed-5771239ca4a5.png", "image_id": 67277, "offset": [ 1, 1 ], "resize_scale": [ 1.0, 1.0 ], "type": "Body" } ], "objectSign": "65830966" } ], "process_id": "4802946666428422", "requestId": "1d1e7641-0d62-4da2-adc0-b4404910723c", "callback_url": "https://api.aida.com.hk/api/third/party/receiveDesignResults" } """ try: # 异步 logger.info(f"generate_image request item is : @@@@@@:{json.dumps(request_data.dict(), indent=4)}") background_tasks.add_task(design_generate_v2, request_data) except Exception as e: logger.warning(f"design Run Exception @@@@@@:{e}") raise HTTPException(status_code=404, detail=str(e)) return ResponseModel() # @router.post('/get_progress') # def get_progress(request_data: DesignProgressModel): # """ # 获取design 进度 # 创建一个具有以下参数的请求体: # - **process_id**: 进度id # # 示例参数: # { # "process_id": "6878547032381675" # } # """ # try: # logger.info(f"get_progress request item is : @@@@@@:{json.dumps(request_data.dict(), indent=4)}") # process_id = request_data.process_id # r = Redis() # data = r.read(key=process_id) # if data is None: # raise ValueError(f"No progress ID: {process_id}") # logging.info(f"get_progress process_id @@@@@@ : {process_id} , progress : {json.dumps(data, indent=4)}") # except Exception as e: # logger.warning(f"get_progress Run Exception @@@@@@:{e}") # raise HTTPException(status_code=404, detail=str(e)) # return ResponseModel(data=data) @router.post('/model_process') def model_process(request_data: ModelProgressModel): """ 获取模特图片预处理 创建一个具有以下参数的请求体: - **model_path**: 模特图片的minio或s3 url地址 示例参数: { "model_path": "aida-users/10/models/female/9c788f5b-b8c7-424c-b149-025aeb0bda51model.jpg" } """ try: logger.info(f"model_process request item is : @@@@@@:{json.dumps(request_data.dict(), indent=4)}") data = model_transpose(image_path=request_data.model_path) logger.info(f"model_process response @@@@@@:{json.dumps(data, indent=4)}") except Exception as e: logger.warning(f"model_process Run Exception @@@@@@:{e}") raise HTTPException(status_code=404, detail=str(e)) return ResponseModel(data=data) """design 批量处理 停用""" # @router.post("/design_batch_generate") # async def design_batch(file: UploadFile = File(...), # tasks_id: str = Form(...), # user_id: str = Form(...), # file_name: str = Form(...), # total: int = Form(...) # ): # dbg_config = DBGConfigModel( # tasks_id=tasks_id, # user_id=user_id, # file_name=file_name, # total=total # ) # contents = await file.read() # file_name = file.filename # await save_request_file(contents, file_name) # return await start_design_batch_generate(dbg_config, contents) # # # async def save_request_file(contents, file_name): # # 创建保存文件的目录(如果不存在) # save_dir = os.path.join(os.getcwd(), "service/design_batch", "request_data") # if not os.path.exists(save_dir): # os.makedirs(save_dir) # # 处理文件 # file_path = os.path.join(save_dir, file_name) # with open(file_path, "wb") as f: # f.write(contents)