ziheWang commited on
Commit
347b19b
·
verified ·
1 Parent(s): bc6e519

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -34
app.py CHANGED
@@ -1,44 +1,41 @@
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 translate_description_to_prompt(description):
17
- # 简单手动映射(你可以用 OpenCC、百度翻译API 或 LLM 自动翻译)
18
- return "smiling 18-year-old boy" # 替换为真实翻译后的内容
19
-
20
- def generate_initial_avatar(image, description):
21
  global session_prompt, latest_avatar
22
- translated_prompt = translate_description_to_prompt(description)
23
- session_prompt = f"A portrait of a {translated_prompt}, ghibli style, anime, headshot, studio ghibli"
24
- avatar = generate_ghibli_avatar(session_prompt, reference_image=image)
25
  latest_avatar = avatar
26
- return avatar
27
 
 
28
  def apply_user_command(command):
29
  global session_prompt, latest_avatar
30
- if latest_avatar is None:
31
- return None, "请先上传图片并生成初始头像"
32
- session_prompt = interpret_command(command, session_prompt)
33
  avatar = generate_ghibli_avatar(session_prompt)
34
  latest_avatar = avatar
35
- return avatar, f"提示词已更新为:{session_prompt}"
36
 
 
37
  def finalize():
38
- return "感谢使用!希望你喜欢这个吉卜力头像 😊"
39
 
 
40
  with gr.Blocks(title="吉卜力头像生成器") as demo:
41
- gr.Markdown("# 🎨 吉卜力头像生成器\n上传照片,生成你的动漫形象,并用中文指令调整细节!")
42
 
43
  with gr.Row():
44
  image_input = gr.Image(type="pil", label="上传照片(仅用于分析年龄与情绪)")
@@ -49,24 +46,17 @@ with gr.Blocks(title="吉卜力头像生成器") as demo:
49
  avatar_output = gr.Image(label="生成的头像")
50
 
51
  with gr.Row():
52
- user_command = gr.Textbox(label="输入你的修改指令(如:给我加一个红色头发)")
53
  command_btn = gr.Button("应用指令")
54
  feedback = gr.Textbox(label="系统反馈", interactive=False)
55
 
56
  final_btn = gr.Button("我满意啦!")
57
 
58
- gen_btn.click(
59
- fn=generate_initial_avatar,
60
- inputs=image_input,
61
- outputs=[description_output, avatar_output]
62
- )
63
-
64
- command_btn.click(
65
- fn=apply_user_command,
66
- inputs=user_command,
67
- outputs=[avatar_output, feedback]
68
- )
69
-
70
  final_btn.click(fn=finalize, outputs=feedback)
71
 
72
- demo.launch()
 
 
 
 
 
1
  import gradio as gr
2
  from PIL import Image
3
  from generate_image import generate_ghibli_avatar
 
4
 
5
+ # 会话状态记录
6
  session_prompt = ""
7
  latest_avatar = None
8
 
9
+ # 分析情绪与年龄(占位函数)
10
  def analyze_emotion_age(img: Image.Image) -> str:
 
11
  return "微笑的18岁青年"
12
 
13
+ # 初次生成头像(仅基于描述)
14
+ def generate_initial_avatar(image):
 
 
 
15
  global session_prompt, latest_avatar
16
+ description = analyze_emotion_age(image)
17
+ session_prompt = description
18
+ avatar = generate_ghibli_avatar(session_prompt)
19
  latest_avatar = avatar
20
+ return description, avatar
21
 
22
+ # 用户输入修改指令(中文)后更新头像
23
  def apply_user_command(command):
24
  global session_prompt, latest_avatar
25
+ if not latest_avatar:
26
+ return None, "请先上传照片并生成初始头像!"
27
+ session_prompt += f",{command}"
28
  avatar = generate_ghibli_avatar(session_prompt)
29
  latest_avatar = avatar
30
+ return avatar, f"已更新描述为:{session_prompt}"
31
 
32
+ # 完成
33
  def finalize():
34
+ return "感谢使用吉卜力头像生成器!希望你喜欢~"
35
 
36
+ # 构建 Gradio 界面
37
  with gr.Blocks(title="吉卜力头像生成器") as demo:
38
+ gr.Markdown("## 🎨 吉卜力头像生成器\n上传照片,生成你的动漫形象,并用中文指令调整细节!")
39
 
40
  with gr.Row():
41
  image_input = gr.Image(type="pil", label="上传照片(仅用于分析年龄与情绪)")
 
46
  avatar_output = gr.Image(label="生成的头像")
47
 
48
  with gr.Row():
49
+ user_command = gr.Textbox(label="输入你的修改指令(例如:换一个红色头发)")
50
  command_btn = gr.Button("应用指令")
51
  feedback = gr.Textbox(label="系统反馈", interactive=False)
52
 
53
  final_btn = gr.Button("我满意啦!")
54
 
55
+ # 绑定逻辑
56
+ gen_btn.click(fn=generate_initial_avatar, inputs=image_input, outputs=[description_output, avatar_output])
57
+ command_btn.click(fn=apply_user_command, inputs=user_command, outputs=[avatar_output, feedback])
 
 
 
 
 
 
 
 
 
58
  final_btn.click(fn=finalize, outputs=feedback)
59
 
60
+ # 启动应用(仅用于本地调试;Spaces 会自动运行)
61
+ if __name__ == "__main__":
62
+ demo.launch()