File size: 2,311 Bytes
5e73498
 
 
 
347b19b
5e73498
 
 
347b19b
5e73498
 
 
347b19b
 
5e73498
347b19b
 
 
5e73498
347b19b
5e73498
347b19b
5e73498
 
347b19b
 
 
231483e
5e73498
347b19b
5e73498
347b19b
5e73498
347b19b
5e73498
347b19b
5e73498
347b19b
5e73498
 
231483e
5e73498
 
 
 
 
 
 
347b19b
5e73498
 
 
231483e
 
347b19b
 
 
5e73498
 
347b19b
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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()