Commit
·
867f45c
1
Parent(s):
50e2279
Refactor image processing functions in app.py to improve functionality and clarity. Updated preprocess_image and gen_image methods for better handling of background choices and image generation, while enhancing error handling and overall structure.
Browse files
app.py
CHANGED
|
@@ -146,89 +146,33 @@ def add_random_background(image, color):
|
|
| 146 |
background = Image.new("RGBA", image.size, color)
|
| 147 |
return Image.alpha_composite(background, image)
|
| 148 |
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
input_image = input_image.convert("RGBA")
|
| 164 |
-
|
| 165 |
-
# Process background
|
| 166 |
-
if background_choice == "Auto Remove background":
|
| 167 |
-
input_image = remove_background(input_image, rembg_session)
|
| 168 |
-
elif background_choice == "Custom Background":
|
| 169 |
-
input_image = add_random_background(input_image, back_ground_color)
|
| 170 |
-
|
| 171 |
-
# Resize content if needed
|
| 172 |
-
if foreground_ratio != 1.0:
|
| 173 |
-
input_image = do_resize_content(input_image, foreground_ratio)
|
| 174 |
-
|
| 175 |
-
return input_image
|
| 176 |
-
except Exception as e:
|
| 177 |
-
print(f"Error in preprocess_image: {str(e)}")
|
| 178 |
-
raise gr.Error(f"Preprocessing failed: {str(e)}")
|
| 179 |
|
| 180 |
@spaces.GPU
|
| 181 |
-
def gen_image(
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
raise gr.Error("No processed image provided!")
|
| 190 |
-
|
| 191 |
-
# Convert to numpy array
|
| 192 |
-
if isinstance(processed_image, Image.Image):
|
| 193 |
-
np_image = np.array(processed_image)
|
| 194 |
-
else:
|
| 195 |
-
np_image = processed_image
|
| 196 |
-
|
| 197 |
-
# Set random seed
|
| 198 |
-
torch.manual_seed(int(seed))
|
| 199 |
-
np.random.seed(int(seed))
|
| 200 |
-
|
| 201 |
-
# Generate images
|
| 202 |
-
np_imgs, np_xyzs = pipeline.generate(
|
| 203 |
-
np_image,
|
| 204 |
-
guidance_scale=float(scale),
|
| 205 |
-
num_inference_steps=int(step)
|
| 206 |
-
)
|
| 207 |
-
|
| 208 |
-
# Generate 3D model
|
| 209 |
-
glb_path = generate3d(model, np_imgs, np_xyzs, args.device)
|
| 210 |
-
|
| 211 |
-
return Image.fromarray(np_imgs), Image.fromarray(np_xyzs), glb_path
|
| 212 |
-
except Exception as e:
|
| 213 |
-
print(f"Error in gen_image: {str(e)}")
|
| 214 |
-
raise gr.Error(f"Generation failed: {str(e)}")
|
| 215 |
|
| 216 |
-
|
| 217 |
-
|
| 218 |
-
try:
|
| 219 |
-
if image is None:
|
| 220 |
-
raise gr.Error("No image uploaded!")
|
| 221 |
-
|
| 222 |
-
# Preprocess the image
|
| 223 |
-
processed = preprocess_image(image, bg_choice, fg_ratio, bg_color)
|
| 224 |
-
|
| 225 |
-
# Generate 3D model
|
| 226 |
-
rgb_img, ccm_img, glb_file = gen_image(processed, seed_val, guidance, steps)
|
| 227 |
-
|
| 228 |
-
return processed, rgb_img, ccm_img, glb_file
|
| 229 |
-
except Exception as e:
|
| 230 |
-
print(f"Error in process_and_generate: {str(e)}")
|
| 231 |
-
raise gr.Error(f"Process failed: {str(e)}")
|
| 232 |
|
| 233 |
_DESCRIPTION = '''
|
| 234 |
* Our [official implementation](https://github.com/thu-ml/CRM) uses UV texture instead of vertex color. It has better texture than this online demo.
|
|
|
|
| 146 |
background = Image.new("RGBA", image.size, color)
|
| 147 |
return Image.alpha_composite(background, image)
|
| 148 |
|
| 149 |
+
def preprocess_image(image, background_choice, foreground_ratio, backgroud_color):
|
| 150 |
+
"""
|
| 151 |
+
input image is a pil image in RGBA, return RGB image
|
| 152 |
+
"""
|
| 153 |
+
print(background_choice)
|
| 154 |
+
if background_choice == "Alpha as mask":
|
| 155 |
+
background = Image.new("RGBA", image.size, (0, 0, 0, 0))
|
| 156 |
+
image = Image.alpha_composite(background, image)
|
| 157 |
+
else:
|
| 158 |
+
image = remove_background(image, rembg_session, force=True)
|
| 159 |
+
image = do_resize_content(image, foreground_ratio)
|
| 160 |
+
image = expand_to_square(image)
|
| 161 |
+
image = add_background(image, backgroud_color)
|
| 162 |
+
return image.convert("RGB")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 163 |
|
| 164 |
@spaces.GPU
|
| 165 |
+
def gen_image(input_image, seed, scale, step):
|
| 166 |
+
global pipeline, model, args
|
| 167 |
+
pipeline.set_seed(seed)
|
| 168 |
+
rt_dict = pipeline(input_image, scale=scale, step=step)
|
| 169 |
+
stage1_images = rt_dict["stage1_images"]
|
| 170 |
+
stage2_images = rt_dict["stage2_images"]
|
| 171 |
+
np_imgs = np.concatenate(stage1_images, 1)
|
| 172 |
+
np_xyzs = np.concatenate(stage2_images, 1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 173 |
|
| 174 |
+
glb_path = generate3d(model, np_imgs, np_xyzs, args.device)
|
| 175 |
+
return Image.fromarray(np_imgs), Image.fromarray(np_xyzs), glb_path
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 176 |
|
| 177 |
_DESCRIPTION = '''
|
| 178 |
* Our [official implementation](https://github.com/thu-ml/CRM) uses UV texture instead of vertex color. It has better texture than this online demo.
|