ERNIE-Image Diffusers 调用指南:Python 代码从零到生产
HuggingFace Diffusers 库完整支持 ERNIE-Image——本文教你用 Python 代码调用 ERNIE-Image 进行图像生成。
一、环境安装
# 安装 diffusers 和相关依赖
pip install diffusers transformers accelerate torch
# 安装 ERNIE-Image 支持
pip install git+https://github.com/huggingface/diffusers.git
二、基础调用
单图生成
from diffusers import ERNIEImagePipeline
import torch
# 加载模型
pipe = ERNIEImagePipeline.from_pretrained(
"baidu/ERNIE-Image",
torch_dtype=torch.float16
)
pipe = pipe.to("cuda")
# 生成图像
image = pipe(
prompt="a cat sitting on a windowsill, city view at night",
negative_prompt="",
width=1024,
height=1024,
num_inference_steps=28,
guidance_scale=7.0,
generator=torch.Generator("cuda").manual_seed(42)
).images[0]
# 保存
image.save("output.png")
三、批量生成
from diffusers import ERNIEImagePipeline
import torch
pipe = ERNIEImagePipeline.from_pretrained(
"baidu/ERNIE-Image",
torch_dtype=torch.float16
).to("cuda")
# Prompt 列表
prompts = [
"a cat on a table",
"a dog in a garden",
"a bird in a tree",
"a fish in a pond"
]
# 批量生成
images = pipe(
prompt=prompts,
negative_prompt=[""] * len(prompts),
width=1024,
height=1024,
num_inference_steps=28,
guidance_scale=7.0
).images
# 保存
for i, img in enumerate(images):
img.save(f"output_{i}.png")
四、Turbo 模式调用
from diffusers import ERNIEImageTurboPipeline
# 加载 Turbo 模型
pipe = ERNIEImageTurboPipeline.from_pretrained(
"baidu/ERNIE-Image-Turbo",
torch_dtype=torch.float16
).to("cuda")
# Turbo 模式:8 步生成
image = pipe(
prompt="a sunset over the ocean, cinematic lighting",
width=1024,
height=1024,
num_inference_steps=8,
guidance_scale=1.0 # Turbo 不需要高 CFG
).images[0]
image.save("turbo_output.png")
五、Inpainting 调用
from diffusers import ERNIEImageInpaintPipeline
from PIL import Image
import numpy as np
# 加载 inpainting 模型
pipe = ERNIEImageInpaintPipeline.from_pretrained(
"baidu/ERNIE-Image",
torch_dtype=torch.float16
).to("cuda")
# 加载原图和 mask
init_image = Image.open("input.png").convert("RGB")
mask_image = Image.open("mask.png").convert("L")
# Inpainting
image = pipe(
prompt="a beautiful garden with flowers",
image=init_image,
mask_image=mask_image,
width=1024,
height=1024,
num_inference_steps=28,
guidance_scale=7.0
).images[0]
image.save("inpaint_output.png")
六、PE 模块调用
from diffusers import ERNIEImagePipeline
pipe = ERNIEImagePipeline.from_pretrained(
"baidu/ERNIE-Image",
torch_dtype=torch.float16,
enable_pe=True # 开启 PE 模块
).to("cuda")
# PE 模块会自动增强 prompt
image = pipe(
prompt="cat on window",
width=1024,
height=1024,
num_inference_steps=28,
guidance_scale=7.0
).images[0]
image.save("pe_output.png")
七、API 服务部署
from fastapi import FastAPI
from pydantic import BaseModel
from diffusers import ERNIEImagePipeline
import torch
app = FastAPI()
pipe = ERNIEImagePipeline.from_pretrained(
"baidu/ERNIE-Image",
torch_dtype=torch.float16
).to("cuda")
class GenerateRequest(BaseModel):
prompt: str
width: int = 1024
height: int = 1024
steps: int = 28
@app.post("/generate")
async def generate(req: GenerateRequest):
image = pipe(
prompt=req.prompt,
width=req.width,
height=req.height,
num_inference_steps=req.steps,
guidance_scale=7.0
).images[0]
import io
from PIL import Image
buf = io.BytesIO()
image.save(buf, format="PNG")
buf.seek(0)
from fastapi.responses import Response
return Response(buf.read(), media_type="image/png")
八、总结
Diffusers 调用 ERNIE-Image 核心要点:
- 安装依赖:diffusers + transformers + accelerate
- 基础调用:Pipeline.from_pretrained → pipe() → save
- 批量生成:传入 prompt 列表即可
- Turbo 模式:8 步生成,无需高 CFG
- Inpainting:支持 mask 引导的局部重绘
- API 部署:FastAPI + Diffusers = 完整服务
Diffusers 提供了简洁的 API,让 ERNIE-Image 集成到 Python 应用变得简单。
本文基于 HuggingFace Diffusers + ERNIE-Image 8B 模型。