返回 Skill 列表
extension
分类: 效率与办公无需 API Key

stylized-avatar-generator

根据文字描述生成风格化头像。当用户需要:生成不同风格(写实证件风/国风古装/二次元插画/赛博朋克/油画艺术)的头像图片、通过主体描述+风格+情绪+背景组合生成头像时使用此技能。基于 Z-Image-Turbo + OpenVINO 本地推理,输出 PIL Image。

person作者: Want595hubgithub

风格化头像生成器 — Z-Image-Turbo + OpenVINO

基于 modelscope-workshop 项目,使用 OpenVINO 运行 Z-Image-Turbo,根据文字描述生成多种风格的头像图片。

前置条件

  • 虚拟环境已激活:source ~/modelscope-workshop/ov_workshop/bin/activate
  • 模型目录存在:~/modelscope-workshop/lab4-image-generation/Z-Image-Turbo-int4-ov/

加载模型

import os
from optimum.intel import OVZImagePipeline

model_dir = os.path.expanduser("~/modelscope-workshop/lab4-image-generation/Z-Image-Turbo-int4-ov")

ov_pipe = OVZImagePipeline.from_pretrained(model_dir, device="CPU")
print("✅ 模型加载完成")

若模型不存在,先下载:

from pathlib import Path
from modelscope import snapshot_download
model_dir = Path("~/modelscope-workshop/lab4-image-generation/Z-Image-Turbo-int4-ov").expanduser()
if not model_dir.exists():
 snapshot_download("snake7gun/Z-Image-Turbo-int4-ov", local_dir=str(model_dir))

设备可选 CPUGPUAUTO,默认 CPU 兼容性最好。


风格化头像生成

核心函数

import torch
from typing import Tuple
from PIL import Image

STYLE_TEMPLATES = {
    "写实证件风": "clean studio portrait, natural skin texture, sharp focus, soft key light, neutral background",
    "国风古装": "traditional Chinese hanfu portrait, elegant headpiece, cinematic lighting, rich textile details",
    "二次元插画": "anime portrait, clean line art, vivid color palette, expressive eyes, high detail",
    "赛博朋克": "cyberpunk portrait, neon rim light, futuristic accessories, moody atmosphere",
    "油画艺术": "oil painting portrait, visible brush strokes, museum grade color harmony, artistic texture",
}


def build_avatar_prompt(
    subject: str,
    style_name: str,
    mood: str,
    background: str,
    extra_prompt: str = "",
) -> str:
    """拼装头像生成提示词。"""
    style_prompt = STYLE_TEMPLATES.get(style_name, STYLE_TEMPLATES["写实证件风"])
    parts = [
        f"Portrait of {subject}",
        style_prompt,
        f"mood: {mood}",
        f"background: {background}",
        "head and shoulders framing, centered composition, high quality",
        extra_prompt.strip(),
    ]
    return ", ".join([p for p in parts if p])


def generate_avatar(
    subject: str,
    style_name: str,
    mood: str = "confident",
    background: str = "simple gradient",
    extra_prompt: str = "",
    width: int = 512,
    height: int = 512,
    steps: int = 9,
    seed: int = 42,
) -> Tuple[Image.Image, str]:
    """风格化头像生成:输入主体描述和风格,输出头像图片及最终提示词。"""
    prompt = build_avatar_prompt(subject, style_name, mood, background, extra_prompt)
    image = ov_pipe(
        prompt=prompt,
        height=height,
        width=width,
        num_inference_steps=steps,
        guidance_scale=0.0,
        generator=torch.Generator("cpu").manual_seed(int(seed)),
    ).images[0]
    return image, prompt

使用示例

# 生成国风古装头像
image, prompt = generate_avatar(
    subject="a young woman",
    style_name="国风古装",
    mood="calm and elegant",
    background="misty garden at dusk",
    extra_prompt="high detail face, natural beauty",
    width=512,
    height=512,
    steps=9,
    seed=42,
)
print(prompt)
image.save("avatar_guofeng.png")

# 生成赛博朋克头像
image, prompt = generate_avatar(
    subject="a male hacker",
    style_name="赛博朋克",
    mood="mysterious",
    background="neon city street",
)

# 查看所有可用风格
print(list(STYLE_TEMPLATES.keys()))
# → ["写实证件风", "国风古装", "二次元插画", "赛博朋克", "油画艺术"]

Gradio 交互式演示

import random
import gradio as gr


def generate_avatar_for_ui(subject, style_name, mood, background, extra_prompt, resolution, steps, seed, random_seed):
    if random_seed:
        seed = random.randint(1, 1_000_000)

    width, height = [int(x) for x in resolution.split("x")]
    image, final_prompt = generate_avatar(
        subject=subject,
        style_name=style_name,
        mood=mood,
        background=background,
        extra_prompt=extra_prompt,
        width=width,
        height=height,
        steps=int(steps),
        seed=int(seed),
    )
    return image, final_prompt, int(seed)


with gr.Blocks(title="Stylized Avatar App") as demo:
    gr.Markdown("# 风格化头像应用 (Z-Image-Turbo + OpenVINO)")
    with gr.Row():
        with gr.Column(scale=1):
            subject = gr.Textbox(label="主体描述", value="a young professional", lines=1)
            style_name = gr.Dropdown(label="风格", choices=list(STYLE_TEMPLATES.keys()), value="写实证件风")
            mood = gr.Textbox(label="情绪/氛围", value="confident and friendly", lines=1)
            background = gr.Textbox(label="背景", value="clean studio background", lines=1)
            extra_prompt = gr.Textbox(label="附加提示词", placeholder="例如:wearing glasses, soft smile", lines=2)

            with gr.Row():
                resolution = gr.Dropdown(label="分辨率", choices=["512x512", "768x768", "512x768", "768x512"], value="512x512")
                steps = gr.Slider(label="推理步数", minimum=1, maximum=20, step=1, value=9)

            with gr.Row():
                seed = gr.Number(label="Seed", value=42, precision=0)
                random_seed = gr.Checkbox(label="随机 Seed", value=True)

            run_btn = gr.Button("生成头像", variant="primary")

        with gr.Column(scale=1):
            out_img = gr.Image(label="生成结果", type="pil")
            out_prompt = gr.Textbox(label="最终提示词", lines=5)
            used_seed = gr.Number(label="本次 Seed", precision=0)

    run_btn.click(
        generate_avatar_for_ui,
        inputs=[subject, style_name, mood, background, extra_prompt, resolution, steps, seed, random_seed],
        outputs=[out_img, out_prompt, used_seed],
    )

demo.launch(share=False)   # 浏览器打开 http://127.0.0.1:7860

参数说明

generate_avatar 参数

| 参数 | 类型 | 默认值 | 说明 | | -------------- | ------ | ------------------- | ---------------------------------- | | subject | string | — | 主体描述,如 "a young woman" | | style_name | string | — | 风格名称,可选见下方风格列表 | | mood | string | "confident" | 情绪/氛围描述 | | background | string | "simple gradient" | 背景描述 | | extra_prompt | string | "" | 附加提示词 | | width | int | 512 | 图片宽度 | | height | int | 512 | 图片高度 | | steps | int | 9 | 推理步数(1~20,越大越精细但越慢) | | seed | int | 42 | 随机种子,相同种子生成相同图片 |

可用风格

| 风格名称 | 英文关键词 | 效果 | | ------------ | ------------------------- | ------------------------ | | 写实证件风 | clean studio portrait | 自然肤色、柔光、简洁背景 | | 国风古装 | traditional Chinese hanfu | 汉服、头饰、电影级光影 | | 二次元插画 | anime portrait | 动漫线条、鲜艳配色、大眼 | | 赛博朋克 | cyberpunk portrait | 霓虹边光、未来配饰、暗调 | | 油画艺术 | oil painting portrait | 笔触肌理、美术馆级配色 |


常见错误排查

| 错误 | 原因 | 解决方法 | | ------------------------------ | --------------- | ---------------------------------------- | | FileNotFoundError: model_dir | 模型未下载 | 确认模型目录路径正确,或运行上方下载代码 | | 生成图片模糊 | 推理步数太少 | 调大 steps(推荐 9~12) | | 生成速度慢 | 使用 CPU 推理 | 切换 device="GPU""AUTO" | | Gradio 端口占用 | 7860 端口被占用 | demo.launch(server_port=7861) |