Spaces:
Sleeping
Sleeping
Refactor: Improve error handling and add logging in app.py
Browse files- .gitignore +1 -0
- app.py +43 -18
.gitignore
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
flagged
|
app.py
CHANGED
@@ -2,6 +2,10 @@ import gradio as gr
|
|
2 |
import torch
|
3 |
from PIL import Image
|
4 |
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
|
|
|
|
|
|
|
|
|
5 |
|
6 |
# 加载模型和ControlNet
|
7 |
model_id = "CompVis/stable-diffusion-v1-4"
|
@@ -14,34 +18,55 @@ def is_valid_pil_image(image):
|
|
14 |
return isinstance(image, Image.Image)
|
15 |
|
16 |
def generate_image(control_image, additional_prompt, reference_image1, reference_image2):
|
17 |
-
# 检查输入图像是否为有效的 PIL 图像
|
18 |
-
if not all(is_valid_pil_image(img) for img in [control_image, reference_image1, reference_image2]):
|
19 |
-
return "Error: One or more input images are not valid PIL images."
|
20 |
-
|
21 |
try:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
# 第一步:使用 canny 模型生成初始图像
|
23 |
initial_image = pipe(prompt=additional_prompt, control_image=control_image).images[0]
|
24 |
if not is_valid_pil_image(initial_image):
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
# 第二步:使用第一张参考图像进行 reference_adain+attn 生成
|
31 |
step2_image = pipe(prompt=additional_prompt, control_image=reference_image1).images[0]
|
|
|
|
|
|
|
|
|
32 |
if not is_valid_pil_image(step2_image):
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
# 第三步:使用第二张参考图像进行 reference_adain+attn 生成
|
39 |
final_image = pipe(prompt=additional_prompt, control_image=reference_image2).images[0]
|
|
|
|
|
|
|
|
|
40 |
if not is_valid_pil_image(final_image):
|
41 |
-
|
|
|
|
|
|
|
|
|
42 |
return final_image
|
43 |
except Exception as e:
|
44 |
-
|
|
|
|
|
45 |
|
46 |
# 定义Gradio接口
|
47 |
interface = gr.Interface(
|
|
|
2 |
import torch
|
3 |
from PIL import Image
|
4 |
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
|
5 |
+
import logging
|
6 |
+
|
7 |
+
# 配置日志记录
|
8 |
+
logging.basicConfig(level=logging.DEBUG)
|
9 |
|
10 |
# 加载模型和ControlNet
|
11 |
model_id = "CompVis/stable-diffusion-v1-4"
|
|
|
18 |
return isinstance(image, Image.Image)
|
19 |
|
20 |
def generate_image(control_image, additional_prompt, reference_image1, reference_image2):
|
|
|
|
|
|
|
|
|
21 |
try:
|
22 |
+
logging.debug("Starting image generation process...")
|
23 |
+
|
24 |
+
# 打印传入的图像对象类型
|
25 |
+
logging.debug(f"Control Image type: {type(control_image)}")
|
26 |
+
logging.debug(f"Reference Image 1 type: {type(reference_image1)}")
|
27 |
+
logging.debug(f"Reference Image 2 type: {type(reference_image2)}")
|
28 |
+
|
29 |
+
# 检查输入图像是否为有效的 PIL 图像
|
30 |
+
if not all(is_valid_pil_image(img) for img in [control_image, reference_image1, reference_image2]):
|
31 |
+
error_message = "Error: One or more input images are not valid PIL images."
|
32 |
+
logging.error(error_message)
|
33 |
+
return error_message
|
34 |
+
|
35 |
# 第一步:使用 canny 模型生成初始图像
|
36 |
initial_image = pipe(prompt=additional_prompt, control_image=control_image).images[0]
|
37 |
if not is_valid_pil_image(initial_image):
|
38 |
+
error_message = "Error in Step 1: Generated image is not a valid PIL image."
|
39 |
+
logging.error(error_message)
|
40 |
+
return error_message
|
41 |
+
|
42 |
+
# 第二步:使用第一张参考图像生成图像
|
|
|
43 |
step2_image = pipe(prompt=additional_prompt, control_image=reference_image1).images[0]
|
44 |
+
if step2_image is None:
|
45 |
+
error_message = "Error in Step 2: Generated image is None (NoneType)."
|
46 |
+
logging.error(error_message)
|
47 |
+
return error_message
|
48 |
if not is_valid_pil_image(step2_image):
|
49 |
+
error_message = "Error in Step 2: Generated image is not a valid PIL image."
|
50 |
+
logging.error(error_message)
|
51 |
+
return error_message
|
52 |
+
|
53 |
+
# 第三步:使用第二张参考图像生成图像
|
|
|
54 |
final_image = pipe(prompt=additional_prompt, control_image=reference_image2).images[0]
|
55 |
+
if final_image is None:
|
56 |
+
error_message = "Error in Step 3: Generated image is None (NoneType)."
|
57 |
+
logging.error(error_message)
|
58 |
+
return error_message
|
59 |
if not is_valid_pil_image(final_image):
|
60 |
+
error_message = "Error in Step 3: Generated image is not a valid PIL image."
|
61 |
+
logging.error(error_message)
|
62 |
+
return error_message
|
63 |
+
|
64 |
+
logging.debug("Image generation process completed successfully.")
|
65 |
return final_image
|
66 |
except Exception as e:
|
67 |
+
error_message = f"Error: {str(e)}"
|
68 |
+
logging.error(error_message)
|
69 |
+
return error_message
|
70 |
|
71 |
# 定义Gradio接口
|
72 |
interface = gr.Interface(
|