Files
change_hair/hair_grow_service
xsl ce445b64a6 完善部署并训练5个新发型 + 换发型集成文档
部署修复:
- torch.load 增加 weights_only=False patch,兼容 PyTorch 2.6+ 加载旧权重
- OSS 改为懒加载,本地用 output_format=base64 无需配凭证即可启动
- 补全被 gitignore 误排除的必需代码:core/models/layers/data、models/layers/data、keypoints/lib
- webui 训练命令 --xformers 改 --sdpa(修复 xformers 无 CUDA 支持报错)

功能调整:
- hair_grow_service 端口改 8899、preview 路由修复(send_file)
- list_hairstyles 增加发型白名单,测试页只展示当前5个发型

新增脚本:
- train_lora_parallel.py:直接调 kohya 并行训练 LoRA(绕过 photo_service 串行限制)
- train_hairstyles_parallel.py / train_batch_stepC.py:批量训练辅助脚本
- scripts/sync_data_to_server.sh:大文件断点续传到云服务器

文档:
- docs/换发型集成文档.md:换发型完整流程、服务架构、资源依赖、训练方法、集成步骤
2026-07-09 20:45:08 +08:00
..

区域生发测试服务

提供带「画笔涂抹遮罩」的 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. 使用流程

  1. 上传图片:点击或拖拽一张人头像照片(正面、发际线/稀疏区清晰)
  2. 涂抹遮罩:用画笔在需要生发的区域涂抹(白色 = 生发区)
    • 左侧可调画笔粗细、切换橡皮、清空
  3. 调强度:生发强度滑块(0.1~1.0,默认 0.5
    • 低强度:轻微生发,严格保持遮罩边界
    • 高强度:浓密生发,边缘自然过渡
  4. 点「生成」:等待约 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),同输入同输出