Files
change_hair/docs/HAIRSTYLES_AVAILABLE.md
xsl 215663177a feat: 新增mask区域重绘功能 + 羽化贴回优化 + 发丝增强
新增功能:
- inpaint_mask.py: mask区域重绘服务(enhance/pure_inpaint两种模式)
  严格只在mask区做SD inpainting,发丝自然化
- /inpaint 页面 + /api/inpaint 接口:画板手绘mask + 提示词编辑 + denoising可调
- enhance_hair.webui_img2img: 新增denoising_strength参数(原硬编码0.35)

羽化贴回优化(hair_swap_manual.py 步骤⑥):
- feather_px(羽化范围)+ feather_alpha(羽化强度)拆分为两个独立参数
- 改为只羽化边缘(mask内部保持硬切,仅边缘带渐变)
- 新增黑底羽化对比图(纯黑背景凸显边缘过渡)

其他改动:
- OSS/COS密钥脱敏:改为可选import,未设环境变量时不崩溃
- manual页面:发型列表改为本次训练的8个(含hair_flow)
- enhance二次增强:重绘区改为「原图头发∪手绘mask」并外扩10%+减发际线带3cm
- 发型清单文档更新:179→180个可用发型(+hair_flow)

涉及文件:
- 新增: inpaint_mask.py, inpaint.html
- 修改: app.py, manual.html, hair_swap_manual.py, enhance_hair.py
- 修改: oss_module.py, upload_oss.py, cos_module.py(密钥脱敏)
- 文档: HAIRSTYLES_AVAILABLE.md, hairstyles_available.csv
2026-07-08 20:38:31 +08:00

141 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 可用发型清单
> 当前共 **180 个发型**可用于换发型功能。
> 数据来源:`/api/hairstyles` 接口实时返回,要求发型同时具备「LoRA权重 + ref材质 + config.json」三件齐全。
> 全量清单见同目录 `hairstyles_available.csv`。
---
## 概览
| 类别 | 数量 | 说明 |
|------|------|------|
| **总可用发型** | **180** | 三件齐全,可直接换发型 |
| ├ 男款 (boy) | 93 | 适合男性脸型 |
| ├ 女款 (girl) | 87 | 适合女性脸型(+hair_flow |
| ├ 中文名命名 | 7 | 按脸型训练的新发型 |
| ├ 英文名命名 | 16 | 历史测试发型 + hair_flow |
| └ 数字ID命名 | 157 | 生产环境发型(雪花算法ID) |
**性别说明**:gender 字段决定发型被分到"男款/女款",但换发型时**男女发型都能用**(只是预览图用对应性别的标准脸)。
---
## LoRA 权重文件位置
每个发型的 LoRA 权重(约 144MB/个,共约 26GB):
```
/home/xsl/change_hair/data/train_material/<hair_id>/model/hairstyle_hd_lora.safetensors
```
换发型时 photo_service 会从该路径动态加载 LoRA。
---
## 一、本次训练的新发型(中文名,按脸型适配)
这 7 个是本次会话按 `<脸型>-<发型>` 规则训练的,可在 `hair_type_images/` 找到原图:
| hair_id | 脸型 | 发型 | gender | 预览图 |
|---------|------|------|--------|--------|
| 圆-心形 | 圆脸 | 心形刘海 | girl | ✓ |
| 圆-椭圆 | 圆脸 | 椭圆 | girl | ✓ |
| 圆-波浪 | 圆脸 | 波浪卷 | girl | ✓ |
| 圆-直线 | 圆脸 | 直发 | girl | ✓ |
| 圆-花瓣 | 圆脸 | 花瓣剪 | girl | ✓ |
| 心形-心形 | 心形脸 | 心形刘海 | girl | ✓ |
| 心形-椭圆 | 心形脸 | 椭圆 | girl | ✓ |
> ⏳ 还有 23 个同类发型(方脸/椭圆/菱形/长脸系列)尚未训练完成,可用 `batch_train_hairstyles.py` 继续训练。
---
## 二、历史测试发型(英文名)
| hair_id | gender | 备注 |
|---------|--------|------|
| **hair_flow** | **girl** | **波浪卷发,最新训练(2026-07-07** |
| huaban1 | girl | 画板1 |
| huaban2 | girl | 画板2 |
| new_test_001 | boy | 测试 |
| newf_1214 / 12141 / 12314 / 1235314 | girl | 测试系列 |
| newf_121445553 | boy | 测试 |
| newf_204 / 216 | girl | 测试 |
| test001 | boy | 测试 |
| test002 | girl | 测试 |
| test003 / 0036 | boy | 测试 |
| test888 | boy | 测试 |
---
## 三、生产发型(数字ID,157个)
这部分是生产环境训练的发型,使用雪花算法生成的纯数字 ID(如 `1935356131338985473`)。
**男款 76 个,女款 81 个**(具体清单见 `hairstyles_available.csv`)。
部分 ID 段对应的训练批次(推测):
- `1905xxx` / `1906xxx`:早期批次
- `1907xxx`:第2批
- `1929xxx`:第3批
- `1935xxx`:第4批(数量最多)
- `1938xxx` / `1939xxx` / `1940xxx` / `1941xxx`:补充批次
- `1953xxx` / `1954xxx`:扩展批次
- `1980xxx`:最新批次
---
## 四、未完成训练的发型
| 状态 | 数量 | 说明 |
|------|------|------|
| 有 LoRA 但缺 ref 材质 | 135 | 训练了 LoRA 但没生成换发型材质,**不能用于换发型** |
| 有 ref 材质但缺 LoRA | 14 | 材质在但 LoRA 丢失 |
| 训练目录但两样都没有 | 34 | 训练中断或失败 |
> 如需让这 135 个"有 LoRA 缺材质"的发型可用,可对它们单独跑 `train_hairstyle_full.py` 的 step3/step4(生成 ref 材质),无需重新训练 LoRA。
---
## 五、如何测试这些发型
### 1. 简易测试页
访问 `http://localhost:8888/test_new`(本次新发型)或 `http://localhost:8888/swap`(全部 179 个发型)。
### 2. 调试页(带可视化)
- `http://localhost:8888/debug` — 全参数调试台
- `http://localhost:8888/manual` — 手绘 mask 换发型(含 enhance 二次增强 + 羽化贴回)
- `http://localhost:8888/inpaint`**mask区域重绘**(发丝自然化,enhance/pure_inpaint两种模式)
- `http://localhost:8888/hairline` — 发际线 mask 实验(4种方案对比)
### 3. API 调用
```bash
# 列出所有可用发型
curl http://127.0.0.1:8888/api/hairstyles
# 换发型(hair_id 替换为上面的任意发型)
curl -X POST http://127.0.0.1:8888/api/swap \
-H "Content-Type: application/json" \
-d '{"img":"<base64图片>","hair_id":"1935356131338985473"}'
```
---
## 六、训练新发型
参考 `docs/` 和项目根的 `README.md`,使用:
```bash
# 单个发型训练
python batch_train_hairstyles.py --src <发型图目录> --gender girl --only <hair_id>
# 批量训练
python batch_train_hairstyles.py --src hair_type_images --gender girl
```
训练完成会自动生成 LoRA + ref材质 + 模板材质 + 预览图,发型立即可用。
---
*文档生成时间:2026-07-07*
*发型数据可随时通过 `/api/hairstyles` 接口获取最新状态。*