ghibli-avatar / app.py
ziheWang's picture
Update app.py
347b19b verified
import gradio as gr
from PIL import Image
from generate_image import generate_ghibli_avatar
# 会话状态记录
session_prompt = ""
latest_avatar = None
# 分析情绪与年龄(占位函数)
def analyze_emotion_age(img: Image.Image) -> str:
return "微笑的18岁青年"
# 初次生成头像(仅基于描述)
def generate_initial_avatar(image):
global session_prompt, latest_avatar
description = analyze_emotion_age(image)
session_prompt = description
avatar = generate_ghibli_avatar(session_prompt)
latest_avatar = avatar
return description, avatar
# 用户输入修改指令(中文)后更新头像
def apply_user_command(command):
global session_prompt, latest_avatar
if not latest_avatar:
return None, "请先上传照片并生成初始头像!"
session_prompt += f",{command}"
avatar = generate_ghibli_avatar(session_prompt)
latest_avatar = avatar
return avatar, f"已更新描述为:{session_prompt}"
# 完成
def finalize():
return "感谢使用吉卜力头像生成器!希望你喜欢~"
# 构建 Gradio 界面
with gr.Blocks(title="吉卜力头像生成器") as demo:
gr.Markdown("## 🎨 吉卜力头像生成器\n上传照片,生成你的动漫形象,并用中文指令调整细节!")
with gr.Row():
image_input = gr.Image(type="pil", label="上传照片(仅用于分析年龄与情绪)")
description_output = gr.Textbox(label="分析结果", interactive=False)
with gr.Row():
gen_btn = gr.Button("生成初始头像")
avatar_output = gr.Image(label="生成的头像")
with gr.Row():
user_command = gr.Textbox(label="输入你的修改指令(例如:换一个红色头发)")
command_btn = gr.Button("应用指令")
feedback = gr.Textbox(label="系统反馈", interactive=False)
final_btn = gr.Button("我满意啦!")
# 绑定逻辑
gen_btn.click(fn=generate_initial_avatar, inputs=image_input, outputs=[description_output, avatar_output])
command_btn.click(fn=apply_user_command, inputs=user_command, outputs=[avatar_output, feedback])
final_btn.click(fn=finalize, outputs=feedback)
# 启动应用(仅用于本地调试;Spaces 会自动运行)
if __name__ == "__main__":
demo.launch()