ziheWang commited on
Commit
231483e
·
verified ·
1 Parent(s): 32c9916

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -20
app.py CHANGED
@@ -1,40 +1,43 @@
 
 
1
  import gradio as gr
2
  from PIL import Image
3
  from generate_image import generate_ghibli_avatar
4
  from prompt_engineering import interpret_command
5
 
 
6
  session_prompt = ""
7
  latest_avatar = None
8
 
9
  def analyze_emotion_age(img: Image.Image) -> str:
 
10
  return "微笑的18岁青年"
11
 
12
- def generate_initial_avatar(image, description):
13
  global session_prompt, latest_avatar
14
- session_prompt = f"{description},风格为吉卜力风格人物头像"
15
- avatar = generate_ghibli_avatar(session_prompt, image)
 
16
  latest_avatar = avatar
17
- return avatar
18
 
19
  def apply_user_command(command):
20
  global session_prompt, latest_avatar
21
  if latest_avatar is None:
22
  return None, "请先上传图片并生成初始头像"
23
-
24
- new_prompt = interpret_command(command, session_prompt)
25
- session_prompt = new_prompt
26
- avatar = generate_ghibli_avatar(new_prompt, None) # 不用原图也能迭代生成
27
  latest_avatar = avatar
28
- return avatar, f"提示词已更新为:{new_prompt}"
29
 
30
  def finalize():
31
  return "感谢使用!希望你喜欢这个吉卜力头像 😊"
32
 
33
  with gr.Blocks(title="吉卜力头像生成器") as demo:
34
- gr.Markdown("## 🧚‍♀️ 吉卜力头像生成器\n上传照片 ➜ 识别年龄与情绪 ➜ 生成头像 ➜ 用中文微调样式")
35
 
36
  with gr.Row():
37
- image_input = gr.Image(type="pil", label="上传照片")
38
  description_output = gr.Textbox(label="分析结果", interactive=False)
39
 
40
  with gr.Row():
@@ -42,19 +45,24 @@ with gr.Blocks(title="吉卜力头像生成器") as demo:
42
  avatar_output = gr.Image(label="生成的头像")
43
 
44
  with gr.Row():
45
- user_command = gr.Textbox(label="输入修改指令(例:给我换个粉头发)")
46
  command_btn = gr.Button("应用指令")
47
  feedback = gr.Textbox(label="系统反馈", interactive=False)
48
 
49
- final_btn = gr.Button("我满意啦")
 
 
 
 
 
 
50
 
51
- gen_btn.click(fn=lambda img: (
52
- analyze_emotion_age(img),
53
- generate_initial_avatar(img, analyze_emotion_age(img))
54
- ), inputs=image_input, outputs=[description_output, avatar_output])
 
55
 
56
- command_btn.click(fn=apply_user_command, inputs=user_command, outputs=[avatar_output, feedback])
57
  final_btn.click(fn=finalize, outputs=feedback)
58
 
59
- if __name__ == "__main__":
60
- demo.launch()
 
1
+ # app.py
2
+
3
  import gradio as gr
4
  from PIL import Image
5
  from generate_image import generate_ghibli_avatar
6
  from prompt_engineering import interpret_command
7
 
8
+ # 初始状态记录
9
  session_prompt = ""
10
  latest_avatar = None
11
 
12
  def analyze_emotion_age(img: Image.Image) -> str:
13
+ # 占位描述(可替换成真实年龄/情绪识别)
14
  return "微笑的18岁青年"
15
 
16
+ def generate_initial_avatar(image):
17
  global session_prompt, latest_avatar
18
+ description = analyze_emotion_age(image)
19
+ session_prompt = f"{description}"
20
+ avatar = generate_ghibli_avatar(session_prompt)
21
  latest_avatar = avatar
22
+ return description, avatar
23
 
24
  def apply_user_command(command):
25
  global session_prompt, latest_avatar
26
  if latest_avatar is None:
27
  return None, "请先上传图片并生成初始头像"
28
+ session_prompt = interpret_command(command, session_prompt)
29
+ avatar = generate_ghibli_avatar(session_prompt)
 
 
30
  latest_avatar = avatar
31
+ return avatar, f"提示词已更新为:{session_prompt}"
32
 
33
  def finalize():
34
  return "感谢使用!希望你喜欢这个吉卜力头像 😊"
35
 
36
  with gr.Blocks(title="吉卜力头像生成器") as demo:
37
+ gr.Markdown("# 🎨 吉卜力头像生成器\n上传照片,生成你的动漫形象,并用中文指令调整细节!")
38
 
39
  with gr.Row():
40
+ image_input = gr.Image(type="pil", label="上传照片(仅用于分析年龄与情绪)")
41
  description_output = gr.Textbox(label="分析结果", interactive=False)
42
 
43
  with gr.Row():
 
45
  avatar_output = gr.Image(label="生成的头像")
46
 
47
  with gr.Row():
48
+ user_command = gr.Textbox(label="输入你的修改指令(如:给我加一个红色头发)")
49
  command_btn = gr.Button("应用指令")
50
  feedback = gr.Textbox(label="系统反馈", interactive=False)
51
 
52
+ final_btn = gr.Button("我满意啦!")
53
+
54
+ gen_btn.click(
55
+ fn=generate_initial_avatar,
56
+ inputs=image_input,
57
+ outputs=[description_output, avatar_output]
58
+ )
59
 
60
+ command_btn.click(
61
+ fn=apply_user_command,
62
+ inputs=user_command,
63
+ outputs=[avatar_output, feedback]
64
+ )
65
 
 
66
  final_btn.click(fn=finalize, outputs=feedback)
67
 
68
+ demo.launch()