从今天开始记录一个很有意思的玩法:用 AI 生成工具“摸”一张高质量的大头照。这里说的“大头”,不是随手一截的放大图,而是类似大头贴、Q 版头像、二次元大头、半身人像特写这类视觉冲击力很强的头像图。我会把 Day 1 的完整流程拆开写清楚,包括环境准备、提示词写法、出图参数、Python 后处理,以及自动化批量的思路。无论是想给自己做一套社交头像,还是想做批量素材生成工具,这篇教程都适用。
1. 什么是“摸一张大头”:概念与适用场景
很多刚接触 AI 绘画的朋友,看到别人随手就生成一张很有氛围感的头像,都会好奇这是怎么做到的。“摸一张大头”其实就是一次典型的文生图创作,目标产物是一张以人物头部、肩部为主体,构图紧凑、风格鲜明、辨识度高的图像。
从技术角度看,这类“大头”图像有三个关键特征:
- 构图高度聚焦,人脸占据画面大部分区域。
- 分辨率要求高,面部细节经得起放大查看。
- 风格化明显,常见的有日系二次元、韩系厚涂、赛博朋克写实、手绘水彩等。
这种图的应用场景非常广泛。个人可以拿来当微信、QQ、知乎、GitHub 头像;做自媒体的朋友可以用来做文章封面图和视频封面;做电商和运营的,也能批量生成角色立绘和品牌形象素材;再往工程方向发展,可以接入自动化流程,做成一个“提示词模板 + 批量出图 + 后处理”的头像生产管线。
当然,只靠单一工具通常难以一步到位。这类头像生成过程中,常常会遇到脸部崩坏、背景杂乱、构图偏移、分辨率不足等问题,所以本文采用“ AI 生成 + Python 后处理”的组合思路,先借助大模型完成创意构图,再用图像处理库做精细化修正和样式包装。
下面我们就从零开始,搭建一个可复制的“摸大头”工作流。
2. 环境准备:本机跑通文生图
2.1 硬件与系统要求
跑本地文生图模型,显卡是关键。NVIDIA 显卡优先,显存 8GB 以上体验较好。如果没有独立显卡,也可以使用 CPU 模式生成,但速度会慢很多,或者考虑使用云端 GPU 环境。
操作系统方面,Windows 10/11、Ubuntu 20.04/22.04、macOS 都可以运行,本文以 Windows 环境为例演示,命令在 Linux 上基本通用。
2.2 Python 环境
后处理脚本使用 Python 3.10 或 3.11 即可。建议使用虚拟环境,避免包冲突。
python -m venv avatar_env avatar_env\Scripts\activate pip install --upgrade pip需要安装的 Python 库如下:
pip install pillow numpy opencv-python rembg这几个库的作用分别是:
- Pillow:图像读取、缩放、裁剪、合成。
- numpy:矩阵运算,用于图像批量处理。
- opencv-python:人脸检测、图像增强、边缘处理。
- rembg:自动抠图,移除背景,生成透明 PNG。
版本需要根据你的项目实际情况调整。如果你使用的是 Python 3.12,个别版本的 rembg 依赖可能有些问题,建议创建虚拟环境,并按提示安装依赖。
2.3 文生图引擎
目前常见的本地文生图工具有两类。
一类是 Stable Diffusion WebUI,也就是大家常说的 AUTOMATIC1111 项目,浏览器操作,插件生态丰富,适合新手和需要精细调节参数的用户。
另一类是 ComfyUI,节点式操作,适合工作流自动化和批量生产。
本文以 Stable Diffusion WebUI 为例演示,因为它界面直观,参数好讲解。安装时要注意,WebUI 的启动脚本会自动下载 Python 依赖和模型,建议使用国内镜像加速依赖安装。
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git cd stable-diffusion-webui在 Windows 环境下,如果希望加速依赖下载,可以修改webui.bat中的参数,或者直接在系统环境变量中配置 PyPI 镜像。安装完成后运行启动脚本:
webui.bat启动成功后,浏览器访问http://127.0.0.1:7860即可进入 WebUI 界面。
如果你暂时不想折腾本地部署,也可以使用在线绘画平台,流程同样适用,只是 API 调用的代码需要按平台文档调整。
3. AI 生成“大头”的核心思路
3.1 先想清楚要什么风格
生成之前,先确定风格方向。同一个提示词,在不同底模下效果会差很多。常见的“大头”风格对应的模型类型如下:
| 风格方向 | 推荐模型类型 | 示例关键词 |
|---|---|---|
| 日系二次元 | Anime 类底模 | anime style、chibi、flat color |
| 韩系厚涂 | 半写实底模 | semi-realistic、oil painting |
| 写实人像 | 摄影类底模 | photorealistic、85mm lens |
| Q 版大头 | 卡通类底模 | chibi、cute、big head |
如果没有特定模型,也可以选择通用型大模型,再在提示词里加入风格描述词。
3.2 提示词的基本公式
这里我先给出一个比较通用的大头像提示词模板:
best quality, masterpiece, portrait of a girl, head and shoulders, big head, cute face, detailed eyes, soft lighting, clean background, high resolution, 8k, anime style关键点拆解如下:
portrait of a girl指定了主体和构图方式。head and shoulders控制取景范围,这是“大头感”的关键。big head和cute face是风格化修饰。detailed eyes、soft lighting控制画面的精致度。clean background方便后续抠图。anime style指定风格,按需替换。
负面提示词也很重要,可以过滤掉常见失败情况:
lowres, bad anatomy, bad hands, extra fingers, blurry, jpeg artifacts, watermark, signature, deformed, ugly, duplicate, mutilated这里的思路是:把你不希望出现的元素全部列出来,模型在采样时会尽量避开这些内容。
3.3 采样参数设置
回到 WebUI 的生成页面,有几个参数直接影响大头像效果:
- Sampling method:推荐 DPM++ 2M Karras 或 Euler a。
- Sampling steps:一般 25 到 35 步。步数太多并不会持续变好,反而增加耗时。
- Width 和 Height:建议生成 512x512 或 768x768 的底图,然后再放大。
- Batch count:想批量生成多张候选图时,可以调高这个数值。
- CFG Scale:建议 7 到 9。太高会颜色过重,太低画面偏灰。
- Denoising strength:影响重绘幅度,后续做高清修复时会用到。
一个比较稳妥的初始参数组合是:
采样方法:DPM++ 2M Karras 采样步数:30 宽高:768 x 768 CFG:7.5如果你的显卡显存有限,可以先从 512 x 512 开始,确认构图没问题后再用 extra 功能局部重绘放大。
3.4 高清修复与细节增强
生成小图之后,面部可能仍然有些模糊。这时可以到 WebUI 的Extras页面做超分辨率放大,或者使用Hires. fix功能在生成过程中直接放大。
Hires. fix 的配置思路是:
- Upscaler:选 ESRGAN_4x 或 R-ESRGAN 4x+ Anime6B。
- Hires steps:10 到 15。
- Denoising strength:0.3 到 0.5,太高会改变面部特征,太低没有修复效果。
这里需要提醒的是,多次放大后,图片文件会变大,但如果不是真的要打印,社交头像一般 1080 x 1080 就足够。
4. 完整实战:从出图到成品头像
下面我们从一张原始生成图开始,完整走一遍后处理流程。假设你已经通过 WebUI 生成了一张 768x768 的大头像,文件名是raw_head.png。接下来用 Python 完成以下操作:
- 读取图片并缩放。
- 自动抠出人物主体。
- 裁剪成适合头像的方形。
- 转换圆形透明头像。
- 添加白色描边和阴影,做成贴纸感。
- 合成到自定义背景上。
4.1 项目目录结构
先创建一个项目目录:
head_avatar/ ├── input/ # 原始生成图片 ├── output/ # 处理后结果 └── process.py # 后处理脚本4.2 基本读取与缩放
我们先用 Pillow 打开原始图片,并限制最长边不超过 1024 像素。
# 文件路径:head_avatar/process.py from PIL import Image def load_and_resize(image_path, max_size=1024): img = Image.open(image_path).convert("RGBA") img.thumbnail((max_size, max_size), Image.LANCZOS) return img if __name__ == "__main__": img = load_and_resize("input/raw_head.png") img.save("output/s1_resized.png") print("图片尺寸:", img.size)这段代码的作用很明显,预先把大图缩放到统一尺寸,后续处理更快,也方便批量管理。
4.3 自动抠图获取透明主体
使用 rembg 自动抠图。rembg 会加载一个预训练模型,第一次运行时会下载模型文件,网络不稳定时可能较慢,建议参考官方文档配置镜像。
# 文件路径:head_avatar/process.py from rembg import remove def cutout(img): # img 是 PIL 图像 return remove(img) if __name__ == "__main__": img = load_and_resize("input/raw_head.png") subject = cutout(img) subject.save("output/s2_subject.png") print("抠图完成,透明背景已生成")执行之后,output/s2_subject.png应该是带透明通道的 PNG 图片。如果背景色与人物衣服颜色接近,可以回到生成阶段把背景改得更干净。
4.4 智能裁剪出头像区域
大部分情况下,人物会位于画面中心偏上。我们可以设计一个简单的占比裁剪算法:将图片切成九宫格,优先保留中心区域,然后向外扩展。
# 文件路径:head_avatar/process.py def smart_crop(img, crop_ratio=0.8): width, height = img.size crop_width = int(width * crop_ratio) crop_height = int(height * crop_ratio) left = (width - crop_width) // 2 top = int((height - crop_height) * 0.3) right = left + crop_width bottom = top + crop_height return img.crop((left, top, right, bottom))这里的top = int((height - crop_height) * 0.3)意思是裁剪区域稍微向上偏移,因为人物头部通常在中上位置。如果你生成的图是全身图,这个方案可能不够,建议用 OpenCV 做人脸检测后再做中心点裁剪,后面样本代码里会有体现。
4.5 圆形头像与贴纸描边
很多社交平台都支持圆形头像,而圆形裁剪加白色描边会让成品更精致。
# 文件路径:head_avatar/process.py from PIL import ImageDraw def to_circle(img): size = min(img.size) mask = Image.new("L", (size, size), 0) draw = ImageDraw.Draw(mask) draw.ellipse((0, 0, size, size), fill=255) result = Image.new("RGBA", (size, size), (0, 0, 0, 0)) result.paste(img, (0, 0), mask) return result def add_border(img, border_size=8, border_color="white"): old_w, old_h = img.size new_w = old_w + border_size * 2 new_h = old_h + border_size * 2 expanded = Image.new("RGBA", (new_w, new_h), (0, 0, 0, 0)) expanded.paste(img, (border_size, border_size)) mask = Image.new("L", (new_w, new_h), 0) draw = ImageDraw.Draw(mask) draw.ellipse((0, 0, new_w, new_h), fill=255) circle = Image.new("RGBA", (new_w, new_h), border_color + "FF") circle.putalpha(mask) result = Image.alpha_composite(circle, expanded) return result完成之后,成品就是一个带白色环状描边的圆形透明头像。
4.6 合成自定义背景
如果不想直接使用透明图,还可以合成到渐变背景上,生成更完整的封面图。
# 文件路径:head_avatar/process.py def paste_on_background(avatar, bg_color="#F5E6D3"): canvas = Image.new("RGBA", (avatar.size[0], avatar.size[1]), bg_color + "FF") canvas = Image.alpha_composite(canvas, avatar) return canvas if __name__ == "__main__": img = load_and_resize("input/raw_head.png") subject = cutout(img) croped = smart_crop(subject, 0.85) circle = to_circle(croped) with_border = add_border(circle, border_size=10) final = paste_on_background(with_border, "#FFE8D6") final.save("output/avatar_final.png") print("成品头像生成完毕")到这里,我们就已经从一张 AI 生成图得到了一张可用于社交平台的成品头像。
4.7 引入 OpenCV 人脸检测提高裁剪准确度
刚才的居中裁剪适合大部分情况,但如果你生成的是半身图或侧面图,可能需要自动检测人脸位置。我们可以用 OpenCV 的级联分类器做人脸区域检测。
# 文件路径:head_avatar/face_crop.py import cv2 import numpy as np from PIL import Image face_cascade = cv2.CascadeClassifier( cv2.data.haarcascades + "haarcascade_frontalface_default.xml" ) def face_center_crop(img, expand_ratio=1.6): arr = np.array(img.convert("RGB")) gray = cv2.cvtColor(arr, cv2.COLOR_RGB2GRAY) faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5) if len(faces) == 0: return img x, y, w, h = faces[0] face_center_x = x + w // 2 face_center_y = y + h // 2 side = max(w, h) * expand_ratio left = int(max(face_center_x - side / 2, 0)) top = int(max(face_center_y - side / 2, 0)) right = int(min(face_center_x + side / 2, img.width)) bottom = int(min(face_center_y + side / 2, img.height)) return img.crop((left, top, right, bottom))需要注意,OpenCV 默认的人脸检测器对卡通图检测效果一般,如果是二次元图片,建议先使用 SD WebUI 的面部修复模型,或者人工筛选之后再裁剪。
5. 批量摸大头:从一张到一百张
单张生成之后,自然会想批量生产。批量生产分两步:批量生成候选图和批量后处理。
5.1 批量生成候选图
在 Stable Diffusion WebUI 中,把 Batch count 设置为 10,就能一次性生成 10 张不同构图和表情的大头图。如果对风格一致性要求高,可以使用同一个种子值,再微调提示词中的表情描述。
5.2 批量后处理脚本
我们可以写一个批量处理脚本,遍历input目录中的所有图片,自动执行抠图、裁剪、圆形化、加描边。
# 文件路径:head_avatar/batch_process.py import os from PIL import Image from tqdm import tqdm from process import load_and_resize, smart_crop, cutout, to_circle, add_border def process_folder(input_dir, output_dir, border_size=8): os.makedirs(output_dir, exist_ok=True) files = [f for f in os.listdir(input_dir) if f.lower().endswith((".png", ".jpg", ".jpeg", ".webp"))] for file in tqdm(files): try: img_path = os.path.join(input_dir, file) img = load_and_resize(img_path) subject = cutout(img) img_crop = smart_crop(subject, 0.85) circle = to_circle(img_crop) result = add_border(circle, border_size=border_size) out_path = os.path.join(output_dir, os.path.splitext(file)[0] + ".png") result.save(out_path) except Exception as e: print(f"{file} 处理失败: {e}") if __name__ == "__main__": process_folder("batch_input", "batch_output")这个脚本虽然简单,但已经构成了自动化的雏形。你可以用操作系统自带的定时任务,把它封装成一个每天定时执行的自动头像生产脚本。
5.3 简单质量筛选
在批量产出中,并不是每张都能用。可以编写简单的启发式筛选逻辑:
# 文件路径:head_avatar/quality_check.py import numpy as np from PIL import Image def is_sharp(image_path, threshold=80): img = Image.open(image_path).convert("L") arr = np.asarray(img, dtype=np.float32) laplacian = np.gradient(arr)[0] variance = np.var(laplacian) return variance > threshold这种方法只是粗略判断清晰度,并不能判断“脸部崩坏”。如果希望自动筛选脸部质量,需要接入人脸检测加五官完整度判断,复杂度高一些,建议还是先靠人工过一遍。
6. 常见问题与排查思路
6.1 生成出来的脸崩坏
这是最常见的问题。现象是五官扭曲、眼睛一大一小、嘴角变形。
可能原因:
- 采样步数不足。
- 底模对当前提示词不适配。
- 生成分辨率太低,脸部修复无效。
解决方案:
- 把采样步数提高到 30 以上。
- 尝试更换底模或添加人脸修复增强 LoRA。
- 开启 ADetailer 插件,对脸部区域单独重绘。
6.2 背景抠不干净
现象是抠图后,人物边缘还有白色或杂色残留。
可能原因:
- 原始图背景与人物颜色相近。
- rembg 模型对复杂背景误判。
解决方案:
- 生成时在提示词中加入
solid white background或clean background。 - 使用纯色背景生成后,再使用 Python 的颜色阈值清除边缘。
- 尝试使用 rembg 的 u2netp 或 sam 模型。
6.3 生成大尺寸图片时显存不足
现象是程序报错,或者生成过程中直接卡死。
解决方案:
- 先生成 512x512 小图,再用 Hires. fix 放大。
- 降低 Batch size。
- 使用
--medvram或--lowvram参数启动 WebUI。
示例:
webui.bat --medvram6.4 抠图后边缘有白色细线
这在圆形头像场景中很常见。原因是透明合成时,原图边缘的半透明像素和白边混在一起。可以在合成前对边缘做收缩处理:
from PIL import ImageFilter def erode_alpha(img, radius=1): alpha = img.getchannel("A") alpha = alpha.filter(ImageFilter.MinFilter(3) if radius == 1 else ImageFilter.MaxFilter(3)) img.putalpha(alpha) return img更稳妥的做法是调用ImageFilter.GaussianBlur结合阈值曲线,这里不多展开。
6.5 常见问题速查表
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 脸崩坏 | 采样步数低或模型不适配 | 提高步数,开启 ADetailer |
| 背景抠不干净 | 背景复杂 | 用纯色背景生成,换抠图模型 |
| 显存不足 | 并行批量太大 | 降低 Batch size,使用 medvram |
| 风格不一致 | 模型风格单一 | 固定种子,或训练 LoRA |
| 色彩过浓 | CFG Scale 太高 | 调低到 6 到 8 |
| 动作僵硬 | 提示词缺少动作描述 | 加入 candid pose、natural gesture |
7. 最佳实践与工程建议
7.1 提示词版本化
推荐将提示词放入一个 Markdown 或文本文件,每次调整后记录效果。比如:
v1.1 种子 12345:日系大头,加了 red ribbon,背景改纯白 v1.2 种子 12345:风格不变,CFG 从 7.5 调到 7.0这样批量回归时,可以快速找到稳定配置。
7.2 素材版权与合规
生成的图片技术上是“模型输出内容”,但如果你用了特定底模,还需要遵循模型许可证。用于商业项目前,建议确认底模的许可是不是允许商用。真人照片风格的头像生成也要谨慎,不能拿别人照片做训练素材,也不能生成真人明星风格的“大头照”用于营销。
7.3 文件命名与归档
后处理会生成多版文件,建议统一命名规则:
日期_风格_种子_版本.png 20250122_anime_12345_v1.png这样肉眼就能看出图片来源,复盘时非常方便。
7.4 定时任务与自动化
如果要做成每日更新的“摸大头”项目,可以配置定时任务。Windows 下可以用任务计划程序,Linux 下可以用 crontab。定时任务的核心指令是:
python process.py --input batch_input --output batch_output还可以在脚本里加入自动发布接口的调用,把生成的头像直接上传到你的头像服务站点,这部分属于后端集成的范畴,后续单独展开。
7.5 隐私安全
如果你的图像生成服务部署在公网,务必加鉴权。特别是 WebUI 默认没有严格的访问控制,暴露公网后可能被他人调用。建议至少配置--listen场景下的防火墙规则,或使用反向代理加密码认证。不要随意把包含真人面部信息的图片上传到不信任的第三方平台。
7.6 显存与性能优化
批量生成大量图像时,不要一次性把 Batch count 调到 100。更合理的做法是:
- 单批次 4 到 8 张。
- 生成完成后马上进行轻量级质量筛选。
- 直接删除废弃文件,避免占用磁盘。
8. 总结与下一步学习路线
Day 1 的“摸一张大头”到这里就完成了闭环。我们经历了从 Prompt 构造、参数调优,到 Python 抠图裁剪、圆形头像生成、批量化处理的全流程。核心收获不只是得到了一张头像,而是掌握了一套可复用的方法论:确认风格、构造提示词、批量生成、程序化后处理、质量筛选。
如果你的显卡配置不够,或者不想维护本地环境,也可以把生成环节转移到云端 API,后处理脚本保持不变。也就是说,整套流程的“后处理”部分基本可以沉淀为一个通用工具库,换任何图像生成后端都能继续使用。
接下来可以往三个方向继续深入:
- 训练一个属于你自己画风的 LoRA,让生成的大头有稳定的人物特征。
- 学习 ComfyUI 的节点式工作流,把生成和修复组合成一键流程。
- 接入 ControlNet,用姿势图或线稿控制构图,从“只能摸大头”升级到“想摆什么姿势就摸什么姿势”。
在生产环境中,建议优先关注版权合规、模型版本锁定和敏感信息过滤这三个风险点,然后再去追求数量。
如果这套流程对你有帮助,可以先收藏备用。后面我也会继续更新 Day 2 的内容,可能是针对“如何让固定角色连续出片”,或者是“Q 版大头的 LoRA 训练记录”,现在先动手把 Day 1 跑通吧。