Spaces:
mashroo
/
Running on Zero

YoussefAnso commited on
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
Files changed (1) hide show
  1. app.py +24 -80
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
- @spaces.GPU
150
- def preprocess_image(input_image, background_choice, foreground_ratio, back_ground_color):
151
- """Preprocess the input image"""
152
- try:
153
- # Check if image is provided
154
- if input_image is None:
155
- raise gr.Error("No image uploaded!")
156
-
157
- # Convert to PIL Image if needed
158
- if isinstance(input_image, np.ndarray):
159
- input_image = Image.fromarray(input_image)
160
-
161
- # Ensure RGBA mode
162
- if input_image.mode != "RGBA":
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(processed_image, seed, scale, step):
182
- """Generate the 3D model"""
183
- try:
184
- # Get model and pipeline when needed
185
- model, pipeline = get_model()
186
-
187
- # Check if image is provided
188
- if processed_image is None:
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
- def process_and_generate(image, bg_choice, fg_ratio, bg_color, seed_val, guidance, steps):
217
- """Combined function to process image and generate 3D model"""
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.