新增功能: - 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
区域生发测试服务
提供带「画笔涂抹遮罩」的 Web 测试页面,在用户涂抹的区域内生发。
快速开始
1. 确认 webui 已启动(生发依赖 SD inpainting)
ss -tlnp | grep 57860 # 确认 webui 在跑
bash /home/xsl/change_hair/start_all.sh status # 看 webui 是否就绪
2. 启动生发服务(端口 8899)
nohup /home/xsl/change_hair/start_hairgrow.sh > /home/xsl/change_hair/project/logs/hair_grow_service.log 2>&1 &
3. 打开测试页面
浏览器访问:
http://172.21.246.70:8899
(如从 Windows 宿主机访问 WSL,用上面地址;或用 localhost:8899)
4. 使用流程
- 上传图片:点击或拖拽一张人头像照片(正面、发际线/稀疏区清晰)
- 涂抹遮罩:用画笔在需要生发的区域涂抹(白色 = 生发区)
- 左侧可调画笔粗细、切换橡皮、清空
- 调强度:生发强度滑块(0.1~1.0,默认 0.5)
- 低强度:轻微生发,严格保持遮罩边界
- 高强度:浓密生发,边缘自然过渡
- 点「生成」:等待约 5 秒
- 看结果:原图与生发结果并排对比,可下载
文件说明
hair_grow_service/
├── app.py # Flask 服务(端口 8899)
├── static/index.html # 测试页面(画笔遮罩 + 结果对比)
└── README.md
start_hairgrow.sh # 启动脚本
API 接口(可单独调用)
POST http://<host>:8899/api/grow
Content-Type: application/json
{
"img": "data:image/jpeg;base64,...", # 原图 base64
"mask": "data:image/png;base64,...", # 遮罩 base64,白色(255)=生发区,与img同分辨率
"strength": 0.5 # 生发强度 0.1~1.0
}
→ {"state": 0, "result": "<base64结果图>"}
{"state": -1, "msg": "错误信息"}
停止服务
pkill -f "hair_grow_service/app.py"
注意事项
- 生发服务依赖 webui(57860),webui 未启动会报连接失败
- 图片过大(>1024px)会自动缩放并对齐到 8 的倍数
- 生发结果是确定性的(固定 seed=123456789),同输入同输出