Spaces:
Runtime error
Runtime error
update resize
Browse files
app.py
CHANGED
|
@@ -31,6 +31,41 @@ class SamplingOptions:
|
|
| 31 |
re_init: bool = False
|
| 32 |
attn_mask: bool = False
|
| 33 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
@torch.inference_mode()
|
| 35 |
def encode(init_image, torch_device):
|
| 36 |
init_image = torch.from_numpy(init_image).permute(2, 0, 1).float() / 127.5 - 1
|
|
@@ -68,13 +103,15 @@ def edit(brush_canvas,
|
|
| 68 |
|
| 69 |
rgba_init_image = brush_canvas["background"]
|
| 70 |
init_image = rgba_init_image[:,:,:3]
|
|
|
|
| 71 |
shape = init_image.shape
|
| 72 |
height = shape[0] if shape[0] % 16 == 0 else shape[0] - shape[0] % 16
|
| 73 |
width = shape[1] if shape[1] % 16 == 0 else shape[1] - shape[1] % 16
|
| 74 |
init_image = init_image[:height, :width, :]
|
| 75 |
rgba_init_image = rgba_init_image[:height, :width, :]
|
| 76 |
|
| 77 |
-
rgba_mask = brush_canvas["layers"][0]
|
|
|
|
| 78 |
mask = rgba_mask[:,:,3]/255
|
| 79 |
mask = mask.astype(int)
|
| 80 |
|
|
@@ -173,7 +210,7 @@ def create_demo(model_name: str):
|
|
| 173 |
<b>Official 🤗 Gradio demo</b> for <a href='https://github.com/Xilluill/KV-Edit' target='_blank'><b>KV-Edit: Training-Free Image Editing for Precise Background Preservation</b></a>.<br>
|
| 174 |
|
| 175 |
💫💫 <b>Here is editing steps:</b> (We highly recommend you run our code locally!😘 Only one inversion before multiple editing, very productive!) <br>
|
| 176 |
-
1️⃣ Upload your image that needs to be edited (The resolution must be less than 1360*768 because of memory
|
| 177 |
2️⃣ Fill in your source prompt and use the brush tool to cover the area you want to edit (❗️required). <br>
|
| 178 |
3️⃣ Fill in your target prompt, then adjust the hyperparameters. <br>
|
| 179 |
4️⃣ Click the "Edit" button to generate your edited image! <br>
|
|
@@ -204,7 +241,7 @@ def create_demo(model_name: str):
|
|
| 204 |
interactive=True,
|
| 205 |
transforms=[],
|
| 206 |
container=True,
|
| 207 |
-
format='png'
|
| 208 |
|
| 209 |
edit_btn = gr.Button("edit")
|
| 210 |
|
|
|
|
| 31 |
re_init: bool = False
|
| 32 |
attn_mask: bool = False
|
| 33 |
|
| 34 |
+
def resize_image(image_array, max_width=1360, max_height=768):
|
| 35 |
+
# 将numpy数组转换为PIL图像
|
| 36 |
+
if image_array.shape[-1] == 4:
|
| 37 |
+
mode = 'RGBA'
|
| 38 |
+
else:
|
| 39 |
+
mode = 'RGB'
|
| 40 |
+
|
| 41 |
+
pil_image = Image.fromarray(image_array, mode=mode)
|
| 42 |
+
|
| 43 |
+
# 获取原始图像的宽度和高度
|
| 44 |
+
original_width, original_height = pil_image.size
|
| 45 |
+
|
| 46 |
+
# 计算缩放比例
|
| 47 |
+
width_ratio = max_width / original_width
|
| 48 |
+
height_ratio = max_height / original_height
|
| 49 |
+
|
| 50 |
+
# 选择较小的缩放比例以确保图像不超过最大宽度和高度
|
| 51 |
+
scale_ratio = min(width_ratio, height_ratio)
|
| 52 |
+
|
| 53 |
+
# 如果图像已经小于或等于最大分辨率,则不进行缩放
|
| 54 |
+
if scale_ratio >= 1:
|
| 55 |
+
return image_array
|
| 56 |
+
|
| 57 |
+
# 计算新的宽度和高度
|
| 58 |
+
new_width = int(original_width * scale_ratio)
|
| 59 |
+
new_height = int(original_height * scale_ratio)
|
| 60 |
+
|
| 61 |
+
# 缩放图像
|
| 62 |
+
resized_image = pil_image.resize((new_width, new_height))
|
| 63 |
+
|
| 64 |
+
# 将PIL图像转换回numpy数组
|
| 65 |
+
resized_array = np.array(resized_image)
|
| 66 |
+
|
| 67 |
+
return resized_array
|
| 68 |
+
|
| 69 |
@torch.inference_mode()
|
| 70 |
def encode(init_image, torch_device):
|
| 71 |
init_image = torch.from_numpy(init_image).permute(2, 0, 1).float() / 127.5 - 1
|
|
|
|
| 103 |
|
| 104 |
rgba_init_image = brush_canvas["background"]
|
| 105 |
init_image = rgba_init_image[:,:,:3]
|
| 106 |
+
init_image = resize_image(init_image)
|
| 107 |
shape = init_image.shape
|
| 108 |
height = shape[0] if shape[0] % 16 == 0 else shape[0] - shape[0] % 16
|
| 109 |
width = shape[1] if shape[1] % 16 == 0 else shape[1] - shape[1] % 16
|
| 110 |
init_image = init_image[:height, :width, :]
|
| 111 |
rgba_init_image = rgba_init_image[:height, :width, :]
|
| 112 |
|
| 113 |
+
rgba_mask = brush_canvas["layers"][0]
|
| 114 |
+
rgba_mask = resize_image(rgba_mask)[:height, :width, :]
|
| 115 |
mask = rgba_mask[:,:,3]/255
|
| 116 |
mask = mask.astype(int)
|
| 117 |
|
|
|
|
| 210 |
<b>Official 🤗 Gradio demo</b> for <a href='https://github.com/Xilluill/KV-Edit' target='_blank'><b>KV-Edit: Training-Free Image Editing for Precise Background Preservation</b></a>.<br>
|
| 211 |
|
| 212 |
💫💫 <b>Here is editing steps:</b> (We highly recommend you run our code locally!😘 Only one inversion before multiple editing, very productive!) <br>
|
| 213 |
+
1️⃣ Upload your image that needs to be edited (The resolution must be less than 1360*768 because of memory❗️) <br>
|
| 214 |
2️⃣ Fill in your source prompt and use the brush tool to cover the area you want to edit (❗️required). <br>
|
| 215 |
3️⃣ Fill in your target prompt, then adjust the hyperparameters. <br>
|
| 216 |
4️⃣ Click the "Edit" button to generate your edited image! <br>
|
|
|
|
| 241 |
interactive=True,
|
| 242 |
transforms=[],
|
| 243 |
container=True,
|
| 244 |
+
format='png')
|
| 245 |
|
| 246 |
edit_btn = gr.Button("edit")
|
| 247 |
|