ghibli-avatar / app.py
ziheWang's picture
Update app.py
231483e verified
raw
history blame
2.24 kB
# app.py
import gradio as gr
from PIL import Image
from generate_image import generate_ghibli_avatar
from prompt_engineering import interpret_command
# 初始状态记录
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 = f"{description}"
avatar = generate_ghibli_avatar(session_prompt)
latest_avatar = avatar
return description, avatar
def apply_user_command(command):
global session_prompt, latest_avatar
if latest_avatar is None:
return None, "请先上传图片并生成初始头像"
session_prompt = interpret_command(command, session_prompt)
avatar = generate_ghibli_avatar(session_prompt)
latest_avatar = avatar
return avatar, f"提示词已更新为:{session_prompt}"
def finalize():
return "感谢使用!希望你喜欢这个吉卜力头像 😊"
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)
demo.launch()