别再手动P图了!用Python调用百度文心AI作画API,5分钟批量生成你的专属头像
别再手动P图了!用Python调用百度文心AI作画API,5分钟批量生成你的专属头像
每次打开社交媒体,看到别人酷炫的头像总让人心生羡慕——赛博朋克的霓虹光影、水墨古风的意境悠远,或是二次元角色的灵动可爱。但自己动手设计?PS技术门槛高,找设计师成本贵,网图又容易撞款。现在,只需几行Python代码,就能让AI成为你的专属画师。
百度文心ERNIE-ViLG作为中文领域最强的跨模态生成模型之一,其作画API支持通过自然语言描述直接生成图像。不同于传统教程只讲解API调用,本文将带你实战解决真实需求: 批量生成风格多样的个人头像 。从注册账号到代码优化,从风格参数调试到批量下载技巧,全程聚焦"能用、好用"的落地细节。
1. 准备工作:三分钟快速获取API权限
1.1 注册百度智能云账号
打开 百度智能云官网 ,点击右上角"注册"按钮。建议使用常用邮箱注册,完成后需进行实名认证(支持支付宝/微信快速认证)。认证过程通常2分钟内即可完成。
1.2 创建AI作画应用
登录后按以下步骤操作:
- 控制台 → 产品服务 → 人工智能 → 智能创作平台
- 点击"立即领取"免费资源包(新用户可获100次调用额度)
- 在"应用列表"点击"创建应用",填写基本信息:
- 应用名称:
个人头像生成器 - 应用分类:
工具/图像生成
- 应用名称:
- 创建成功后,记录下
API Key和Secret Key(点击"显示"查看完整密钥)
密钥相当于API调用的身份证,请妥善保管不要泄露。测试阶段建议使用免费额度,商业用途需购买付费套餐。
1.3 安装必要Python库
在终端运行以下命令安装依赖:
pip install requests pillow python-dotenv
requests:用于发送HTTP请求pillow:图像处理库,用于保存生成的图片python-dotenv:管理环境变量(可选但推荐)
建议在项目根目录创建 .env 文件存储密钥:
BAIDU_API_KEY=your_api_key_here
BAIDU_SECRET_KEY=your_secret_key_here
2. 核心代码实现:从描述到图像的魔法转换
2.1 获取Access Token
Access Token是调用API的临时凭证,有效期30天。创建 auth.py 文件:
import requests
import os
from dotenv import load_dotenv
load_dotenv()
def get_access_token():
url = "https://aip.baidubce.com/oauth/2.0/token"
params = {
"grant_type": "client_credentials",
"client_id": os.getenv("BAIDU_API_KEY"),
"client_secret": os.getenv("BAIDU_SECRET_KEY")
}
return requests.post(url, params=params).json().get("access_token")
2.2 提交作画请求
创建 generate.py ,实现核心生成逻辑:
import json
import requests
from auth import get_access_token
def generate_images(prompts, style="二次元", resolution="1024*1024", num=4):
url = f"https://aip.baidubce.com/rpc/2.0/ernievilg/v1/txt2img?access_token={get_access_token()}"
results = []
for prompt in prompts:
payload = json.dumps({
"text": prompt,
"resolution": resolution,
"style": style,
"num": num
})
headers = {'Content-Type': 'application/json'}
response = requests.post(url, headers=headers, data=payload)
results.append(response.json().get("data", {}).get("taskId"))
return results
参数说明 :
prompts:描述词列表(如["赛博朋克程序员","古风侠客"])style:支持12种风格,常用选项:二次元:动漫风格写实:照片级真实感古风:中国传统水墨赛博朋克:高科技低生活
resolution:推荐1024*1024(正方形适合头像)
2.3 下载生成结果
创建 download.py 实现批量下载:
import requests
from PIL import Image
from io import BytesIO
import os
from auth import get_access_token
def download_images(task_ids, save_dir="output"):
if not os.path.exists(save_dir):
os.makedirs(save_dir)
url = f"https://aip.baidubce.com/rpc/2.0/ernievilg/v1/getImg?access_token={get_access_token()}"
for task_id in task_ids:
payload = json.dumps({"taskId": task_id})
response = requests.post(url, headers={'Content-Type': 'application/json'}, data=payload)
img_urls = response.json().get("data", {}).get("imgUrls", [])
for idx, img_info in enumerate(img_urls):
img_data = requests.get(img_info["image"]).content
img = Image.open(BytesIO(img_data))
img.save(f"{save_dir}/{task_id}_{idx}.png")
print(f"Saved: {save_dir}/{task_id}_{idx}.png")
3. 高级技巧:打造独一无二的头像库
3.1 描述词工程(Prompt Engineering)
好的描述词=50%的生成效果。推荐组合公式:
[主体] + [风格] + [细节] + [构图]
- 主体 :明确角色(如"程序员"、"猫娘")
- 风格 :可与API风格参数叠加(如"赛博朋克风格")
- 细节 :服装、表情、装饰(如"戴着VR眼镜")
- 构图 :半身像、正面视角等
实战案例 :
prompts = [
"赛博朋克风格女程序员,紫色霓虹灯光,未来感机械臂,半身像",
"古风男侠客,水墨风格,手持长剑,站在竹林前",
"卡通风格柴犬头像,大眼睛,吐舌头,粉色背景"
]
3.2 批量生成与优选方案
运行以下命令启动批量生成:
python -c "from generate import generate_images; generate_images(prompts=['你的描述词'], style='二次元', num=6)"
建议策略:
- 每个描述生成4-6张图(API最大支持)
- 用
num参数控制数量,避免资源浪费 - 将满意结果移动到
selected目录
3.3 风格参数深度调优
通过修改 style 和 resolution 获得不同效果:
| 风格 | 适用场景 | 推荐分辨率 | 示例效果 |
|---|---|---|---|
| 二次元 | 动漫头像 | 1024x1024 | 🎨 |
| 写实 | 职业照 | 1536x1024 | 📷 |
| 古风 | 传统文化 | 1024x1024 | 🏮 |
| 赛博朋克 | 科技感 | 1024x1536 | 🌆 |
某些风格对分辨率敏感,如赛博朋克适合竖版构图。如果生成结果不理想,尝试调整分辨率比例。
4. 自动化进阶:打造专属头像工坊
4.1 定时更换头像脚本
结合schedule库实现每周自动换头像:
import schedule
import time
from generate import generate_images
from download import download_images
import random
import os
def job():
themes = ["赛博朋克", "复古胶片", "像素艺术"]
prompt = f"{random.choice(themes)}风格头像,{random.choice(['男','女'])}性"
task_ids = generate_images([prompt], style="二次元")
download_images(task_ids)
# 设置最新图片为社交平台头像
latest_img = sorted(os.listdir("output"))[-1]
upload_to_social_media(f"output/{latest_img}")
schedule.every().monday.at("09:00").do(job)
while True:
schedule.run_pending()
time.sleep(60)
4.2 风格迁移技巧
对生成结果不满意?用Pillow进行后处理:
from PIL import Image, ImageFilter
def apply_effect(img_path, effect="sketch"):
img = Image.open(img_path)
if effect == "sketch":
return img.filter(ImageFilter.CONTOUR)
elif effect == "oil":
return img.filter(ImageFilter.SMOOTH)
return img
4.3 异常处理与日志
完善代码健壮性:
import logging
logging.basicConfig(filename='avatar_gen.log', level=logging.INFO)
try:
task_ids = generate_images(prompts)
if not task_ids:
raise ValueError("No task ID returned")
download_images(task_ids)
except Exception as e:
logging.error(f"Generation failed: {str(e)}")
# 自动重试逻辑
更多推荐

所有评论(0)