别再手动P图了!用Python调用百度文心AI作画API,5分钟批量生成你的专属头像

每次打开社交媒体,看到别人酷炫的头像总让人心生羡慕——赛博朋克的霓虹光影、水墨古风的意境悠远,或是二次元角色的灵动可爱。但自己动手设计?PS技术门槛高,找设计师成本贵,网图又容易撞款。现在,只需几行Python代码,就能让AI成为你的专属画师。

百度文心ERNIE-ViLG作为中文领域最强的跨模态生成模型之一,其作画API支持通过自然语言描述直接生成图像。不同于传统教程只讲解API调用,本文将带你实战解决真实需求: 批量生成风格多样的个人头像 。从注册账号到代码优化,从风格参数调试到批量下载技巧,全程聚焦"能用、好用"的落地细节。

1. 准备工作:三分钟快速获取API权限

1.1 注册百度智能云账号

打开 百度智能云官网 ,点击右上角"注册"按钮。建议使用常用邮箱注册,完成后需进行实名认证(支持支付宝/微信快速认证)。认证过程通常2分钟内即可完成。

1.2 创建AI作画应用

登录后按以下步骤操作:

  1. 控制台 → 产品服务 → 人工智能 → 智能创作平台
  2. 点击"立即领取"免费资源包(新用户可获100次调用额度)
  3. 在"应用列表"点击"创建应用",填写基本信息:
    • 应用名称: 个人头像生成器
    • 应用分类: 工具/图像生成
  4. 创建成功后,记录下 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)"

建议策略:

  1. 每个描述生成4-6张图(API最大支持)
  2. num 参数控制数量,避免资源浪费
  3. 将满意结果移动到 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)}")
    # 自动重试逻辑

更多推荐