diff --git a/app/service/design/items/pipelines/split.py b/app/service/design/items/pipelines/split.py index 62e61f9..5fb568e 100644 --- a/app/service/design/items/pipelines/split.py +++ b/app/service/design/items/pipelines/split.py @@ -1,3 +1,4 @@ +import io import logging import cv2 @@ -37,8 +38,8 @@ class Split(object): result['front_image'], result["front_image_url"], _ = upload_png_mask(result_front_image_pil, f'{generate_uuid()}', mask=None) height, width = front_mask.shape - mask_image = np.zeros((height, width, 4), dtype=np.uint8) - mask_image[front_mask != 0] = [0, 0, 255, 255] + mask_image = np.zeros((height, width, 3)) + mask_image[front_mask != 0] = [0, 0, 255] if result["name"] in ('blouse', 'dress', 'outwear', 'tops'): result_back_image = np.zeros_like(rgba_image) @@ -46,14 +47,24 @@ class Split(object): result_back_image[back_mask != 0] = rgba_image[back_mask != 0] result_back_image_pil = Image.fromarray(cvtColor(result_back_image, COLOR_BGR2RGBA)) result['back_image'], result["back_image_url"], _ = upload_png_mask(result_back_image_pil, f'{generate_uuid()}', mask=None) - mask_image[back_mask != 0] = [0, 255, 0, 255] + mask_image[back_mask != 0] = [0, 255, 0] - image_bytes = cv2.imencode(".png", mask_image)[1].tobytes() - req = oss_upload_image(bucket=AIDA_CLOTHING, object_name=f"mask/mask_{generate_uuid()}.png", image_bytes=image_bytes) + rbga_mask = rgb_to_rgba(mask_image, front_mask + back_mask) + mask_pil = Image.fromarray(cvtColor(rbga_mask.astype(np.uint8), COLOR_BGR2RGBA)) + image_data = io.BytesIO() + mask_pil.save(image_data, format='PNG') + image_data.seek(0) + image_bytes = image_data.read() + req = oss_upload_image(bucket=AIDA_CLOTHING, object_name=f"mask/mask_{generate_uuid()}.jpg", image_bytes=image_bytes) result['mask_url'] = req.bucket_name + "/" + req.object_name else: - image_bytes = cv2.imencode(".png", mask_image)[1].tobytes() - req = oss_upload_image(bucket=AIDA_CLOTHING, object_name=f"mask/mask_{generate_uuid()}.png", image_bytes=image_bytes) + rbga_mask = rgb_to_rgba(mask_image, front_mask) + mask_pil = Image.fromarray(cvtColor(rbga_mask.astype(np.uint8), COLOR_BGR2RGBA)) + image_data = io.BytesIO() + mask_pil.save(image_data, format='PNG') + image_data.seek(0) + image_bytes = image_data.read() + req = oss_upload_image(bucket=AIDA_CLOTHING, object_name=f"mask/mask_{generate_uuid()}.jpg", image_bytes=image_bytes) result['mask_url'] = req.bucket_name + "/" + req.object_name result['back_image'] = None result["back_image_url"] = None