Spaces:
Running
Running
| 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() | |