Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import cv2 | |
| import numpy as np | |
| import random | |
| from PIL import Image | |
| def resize_with_fixed_aspect_ratio(image, new_metrics, size_metrics="height"): | |
| height, width = image.shape[:2] | |
| # print("new_metrics in functions", new_metrics) | |
| # print("before:", image.shape) | |
| if size_metrics=="height": | |
| aspect_ratio = width / height | |
| # print("aspect_ratio: ", aspect_ratio) | |
| new_height = new_metrics | |
| new_width = int(new_height * aspect_ratio) | |
| elif size_metrics=="width": | |
| aspect_ratio = height / width | |
| new_width = new_metrics | |
| new_height = int(new_width * aspect_ratio) | |
| new_size = (new_height, new_width) | |
| new_size = (new_width, new_height) | |
| # print("new_size: ", new_size) | |
| resized_image = cv2.resize(image, dsize=new_size, interpolation=cv2.INTER_CUBIC) | |
| # print("after:", resized_image.shape) | |
| return resized_image | |
| def show_image(obj_image, bg_image): | |
| bg_height, bg_width = bg_image.shape[:2] | |
| obj_height, obj_width = obj_image.shape[:2] | |
| if obj_height>obj_width: | |
| size_metrics="height" | |
| if bg_height>obj_height: | |
| resize_min_rate = bg_height/obj_height | |
| new_metrics = bg_height | |
| else: | |
| resize_min_rate = obj_height/bg_height | |
| new_metrics = obj_height | |
| elif obj_height<obj_width: | |
| size_metrics="width" | |
| if bg_height>obj_height: | |
| resize_min_rate = bg_width/obj_width | |
| new_metrics = bg_width | |
| else: | |
| resize_min_rate = obj_width/bg_width | |
| new_metrics = obj_width | |
| obj_vs_bg = random.uniform(resize_min_rate, resize_min_rate+5) | |
| obj_image = resize_with_fixed_aspect_ratio(obj_image, int(new_metrics/obj_vs_bg), size_metrics) | |
| height, width = obj_image.shape[:2] | |
| result_image = bg_image.copy() | |
| max_x = bg_width-width | |
| max_y = bg_height-height | |
| try: | |
| move_x = random.randint(0, max_x) | |
| move_y = random.randint(0, max_y) | |
| result_image[move_y:move_y+height, move_x:move_x+width, :] = obj_image | |
| except: | |
| print("bg_width.shape: ", bg_image.shape) | |
| print("obj_image.shape: ", obj_image.shape) | |
| print("max_y: ", max_y) | |
| print("max_x: ", max_x) | |
| print("obj_vs_bg", obj_vs_bg) | |
| print("resize_min_rate", resize_min_rate) | |
| result_image = np.where(result_image>0, result_image, bg_image) | |
| return result_image | |
| image_input_obj = gr.Image(type="numpy") | |
| image_input_bg = gr.Image(type="numpy") | |
| image_output = gr.Image(type="numpy") | |
| iface = gr.Interface( | |
| fn=show_image, | |
| inputs=[ | |
| image_input_obj, | |
| image_input_bg | |
| ], | |
| outputs=image_output | |
| ) | |
| iface.launch() | |