照片转卡通头像(含去水印)
概述
把真实人物照片转成卡通风格头像,通过「高保真图生图 + 逐项特征锁定」保证与原照相似度,并通过后处理脚本去除生成图右下角水印。
卡通图本体由 WorkBuddy 的 AI 图像生成能力(ImageGen,底层腾讯混元模型)产出,本技能不提供本地图像生成程序;本地脚本只负责去水印这一后处理步骤。
触发场景
- 用户提供人物照片,要求生成卡通图 / 卡通头像 / 动漫化 / 二次元形象
- 用户对已有卡通图不满意,要求「更像本人」「年轻些」「换风格」
- 用户要求去除生成图上的水印
工作流
步骤 1:准备输入图
先把输入图落到工作区的本地绝对路径。
- 用户从剪贴板粘贴的图片通常位于
~/.workbuddy/clipboard-images/,路径可能包含时间戳且会被清理,先复制到工作区:
mkdir -p <workspace>/.workbuddy/inputs
cp "<剪贴板图片路径>" <workspace>/.workbuddy/inputs/photo.png
- 所有 ImageGen 的
image参数只接受本地绝对路径或 http(s) URL。
步骤 2:首次生成卡通图(锁定相似度)
调用 ImageGen,用最高保真 + 逐项特征锁定的方式生成第一版。
调用参数要点(详见「ImageGen 调用规范」):
input_fidelity: high—— 首次生成必须用 high,否则模型会大幅风格化revise: false—— 阻止模型改写 prompt,保证特征清单生效image: ["<本地绝对路径>"]—— 必须是真正的数组output_dir指向<workspace>/.workbuddy/generated-images
Prompt 构造方式:逐项枚举面部特征 + 明确禁止项。可直接取用
references/prompt-templates.md 中的「A. 首次高保真生成」模板,按照片实际情况替换特征词。
生成前告知用户预估消耗:每张图约 5-10 credits。
步骤 3:检视结果
读取生成的图片,与原照逐项比对,重点关注模型的高频偏差:
| 高频偏差 | 表现 | 对策 |
|---|---|---|
| 减龄倾向 | 50 岁画成 20 多岁 | prompt 写明年龄 + Do NOT make him look younger |
| 脸型椭圆化 | 国字脸变瓜子脸 | 写明 square face with broad jaw + Do NOT change face shape to oval |
| 擅自加微笑 | 原本严肃表情变微笑 | 写明 neutral serious expression + Do NOT add a smile |
| 鬓角灰白发丢失 | 全黑发 | 明确写 visible greying at the temples(仍可能丢失,需告知用户) |
| 复杂格纹被简化 | 三色格变双色 | 逐一列出格子颜色 |
| 背景不纯白 | 变浅灰渐变 | prompt 写 plain pure white background(可能仍偏差) |
发现偏差时,不要重复用同一段 prompt 重试——把偏差项写成更强的约束再生成。
步骤 4:二次编辑(减龄 / 调风格)
用户要求「年轻些」这类微调时,以上一版无水印输出作为输入做图生图,而不是回到原照重来——这样能锁住已被认可的相似度。
input_fidelity: medium—— high 会把皱纹一起保留,medium 才允许模型修改年龄感- Prompt 写法:先声明「保持同一个人」并复述五官,再写「只调整年龄」,最后写禁止项(如
Do NOT make him look like a teenager) - 模板见
references/prompt-templates.md的「B. 二次编辑:减龄」
步骤 5:去水印(必做)
混元模型会在右下角强制附加「AI生成 WORDBUDDY」水印,无法通过参数关闭(footnote: "" 无效,与会员等级无关)。交付前必须处理。
/Users/mac/.workbuddy/binaries/python/envs/default/bin/python3 \
<skill-dir>/scripts/remove_watermark.py "<生成的图.png>" -o "<输出路径.png>"
- 水印压在白底/浅色纯背景(人像周围是背景而非身体):默认的竖条带填充即可:
/Users/mac/.workbuddy/binaries/python/envs/default/bin/python3 \
<skill-dir>/scripts/remove_watermark.py "<生成的图.png>" -o "<输出路径.png>"
- 水印压在衣物/复杂纹理上(半身像的肩部常被水印覆盖):条带填充会留下竖向条纹,
必须改用 inpaint 模式(亮度阈值检测文字 + OpenCV TELEA 修复):
/Users/mac/.workbuddy/binaries/python/envs/default/bin/python3 \
<skill-dir>/scripts/remove_watermark.py "<生成的图.png>" -o "<输出路径.png>" --inpaint
- inpaint 有残影时调低
--threshold(默认 172;深色衣物 165-175,浅色背景可到 200+) - 判断用哪种模式:读取生成图,看右下角水印覆盖的是背景还是衣服/纹理。
证件照构图下肩部几乎必然延伸到右下角,默认用--inpaint更稳 - inpaint 依赖 opencv-python-headless;竖条带填充仅依赖 Pillow
(托管环境/Users/mac/.workbuddy/binaries/python/envs/default/两者均已安装)
脚本详细用法见 scripts/remove_watermark.py 顶部 docstring。
步骤 6:交付
- 用
present_files展示最终无水印版本 - 在回复中给出特征比对表(原照 vs 生成图,逐项标注匹配 / 偏差),并诚实说明仍存在的偏差
- 列出最终文件绝对路径
- 询问是否需要复制到桌面 / 下载文件夹或重命名
ImageGen 调用规范(关键,易错)
参数校验陷阱
输入图通过 image1 / image2 / image3 三个独立的字符串参数传入(最多 3 张):
"image1": "/abs/path/photo.png"
注意:早期版本曾使用 image: ["/path"] 数组格式,现已废弃——传 image 数组会报
root: must NOT have additional properties。若发现实际 schema 与本文不符,以
ToolSearch 返回的最新 schema 为准。
偶发失败
相同参数首次成功、重试却报参数校验错误的情况确实存在。遇到时直接原样重试一次,通常即可通过;不要因此改写参数结构。
参数速查
| 参数 | 取值 | 说明 |
|---|---|---|
prompt |
string | 必填,见 references/prompt-templates.md |
image1 |
string | 图生图输入图,本地绝对路径或 URL |
image2 / image3 |
string | 可选第 2、3 张输入图(须配合 image1 使用) |
input_fidelity |
high / medium |
首次生成用 high;二次编辑用 medium |
revise |
false |
必须显式设 false,防止 prompt 被改写 |
size |
1024x1024 |
头像用方图 |
quality |
high |
|
background |
opaque |
头像通常要白底 |
output_dir |
string | 指向 <workspace>/.workbuddy/generated-images |
footnote |
string | 水印文案,设空字符串也无法关闭水印 |
风格选择建议
风格化程度与相似度成反比,需先问清用户取舍:
| 风格 | 相似度 | 适用 |
|---|---|---|
| 半写实 3D 卡通 | 高 | 需要「看得出是本人」的头像(默认推荐) |
| Ghibli × Pixar | 低 | 追求氛围感、可接受形象较大改动 |
| 商务正装卡通 | 中 | 职场/名片场景 |
| 国风/水墨 | 低 | 文化主题 |
风格预设 prompt 见 references/prompt-templates.md 的「C. 风格预设」。
资源
scripts/remove_watermark.py
去除混元生成图右下角水印。支持单张 / 批量、自定义水印区域尺寸、拼接处羽化。
# 单张
python3 scripts/remove_watermark.py input.png
# 批量
python3 scripts/remove_watermark.py a.png b.png c.png
# 自定义区域 + 羽化
python3 scripts/remove_watermark.py input.png --w 320 --h 110 --feather 3
references/prompt-templates.md
经过实测验证的 prompt 模板:首次高保真生成、二次编辑减龄、四种风格预设,以及面部特征词库。构造 prompt 时按需取用。