Spaces:
Sleeping
Sleeping
| import cv2 | |
| import numpy as np | |
| from pathlib import Path | |
| def append_face_to_donut(face_image_path, donut_image_path, save_path="face_in_donut.jpg", scale=1.0): | |
| """ | |
| ์ผ๊ตด ์ด๋ฏธ์ง๋ฅผ ๋๋ ์ค์ ๋น ๊ณต๊ฐ์ ๋ฐฐ์นํ์ฌ ํฉ์ฑ | |
| face_image_path: ์ผ๊ตด ์ด๋ฏธ์ง ๊ฒฝ๋ก | |
| donut_image_path: ๋๋ ์ด๋ฏธ์ง ๊ฒฝ๋ก (ํฌ๋ช ๋ฐฐ๊ฒฝ PNG ๊ถ์ฅ) | |
| scale: ๋๋ ์ด๋ฏธ์ง ์ ์ฒด ํฌ๊ธฐ ์กฐ์ ๋น์จ | |
| """ | |
| # ์ผ๊ตด ์ด๋ฏธ์ง ์ฝ๊ธฐ | |
| face_img = cv2.imread(str(face_image_path)) | |
| if face_img is None: | |
| raise FileNotFoundError(f"์ผ๊ตด ์ด๋ฏธ์ง๋ฅผ ์ฐพ์ ์ ์์: {face_image_path}") | |
| # ๋๋ ์ด๋ฏธ์ง ์ฝ๊ธฐ (์ํ ์ฑ๋ ํฌํจ) | |
| donut_img = cv2.imread(str(donut_image_path), cv2.IMREAD_UNCHANGED) | |
| if donut_img is None: | |
| raise FileNotFoundError(f"๋๋ ์ด๋ฏธ์ง๋ฅผ ์ฐพ์ ์ ์์: {donut_image_path}") | |
| # ๋๋ ์ํ ์ฑ๋ ๋ถ๋ฆฌ | |
| if donut_img.shape[2] == 4: | |
| alpha_donut = donut_img[:, :, 3] / 255.0 | |
| donut_bgr = cv2.cvtColor(donut_img, cv2.COLOR_BGRA2BGR) | |
| else: | |
| alpha_donut = None | |
| donut_bgr = donut_img | |
| # ๋๋ ํฌ๊ธฐ ์กฐ์ | |
| h_d, w_d = donut_bgr.shape[:2] | |
| new_w = int(w_d * scale) | |
| new_h = int(h_d * scale) | |
| donut_resized = cv2.resize(donut_bgr, (new_w, new_h)) | |
| if alpha_donut is not None: | |
| alpha_resized = cv2.resize(alpha_donut, (new_w, new_h)) | |
| else: | |
| alpha_resized = None | |
| # ์ผ๊ตด ์ด๋ฏธ์ง ๋๋ ์ค์ ๊ตฌ๋ฉ ํฌ๊ธฐ์ ๋ง๊ฒ ์กฐ์ | |
| # ๋๋ ๊ตฌ๋ฉ ํฌ๊ธฐ๋ ๋๋ ์ธ๋ก ํฌ๊ธฐ์ ์ฝ 50% ์ ๋๋ก ๊ฐ์ | |
| hole_diameter = int(new_h * 0.5) | |
| face_resized = cv2.resize(face_img, (hole_diameter, hole_diameter)) | |
| # ์ผ๊ตด ํฉ์ฑ ์ขํ | |
| y_offset = new_h // 2 - hole_diameter // 2 | |
| x_offset = new_w // 2 - hole_diameter // 2 | |
| # ํฉ์ฑ | |
| combined = donut_resized.copy() | |
| face_h, face_w = face_resized.shape[:2] | |
| # ๋จ์ ์ค๋ฒ๋ ์ด (alpha blending optional) | |
| combined[y_offset:y_offset+face_h, x_offset:x_offset+face_w] = face_resized | |
| # ์ ์ฅ | |
| cv2.imwrite(save_path, combined) | |
| print(f"์ผ๊ตด ํฉ์ฑ ๋๋ ์ด๋ฏธ์ง ์ ์ฅ ์๋ฃ โ {save_path}") | |
| return save_path | |