Initial lip-sync service with command backend

This commit is contained in:
cat-shark
2026-06-20 17:16:11 +08:00
commit 8c6a222c38
25 changed files with 1226 additions and 0 deletions
+94
View File
@@ -0,0 +1,94 @@
# Digital Human Lip-Sync Service
这是给 `aIzhinengti` 数字人 `自主算力机` 模式使用的独立服务项目。它提供 Gradio `/process_single` 接口,输入一段音频和一段人物视频,输出生成后的视频。
> 当前项目不内置或下载大模型权重。默认 `ffmpeg_mux` 后端只用于验证接入链路:把音频封装进原视频,不做真实口型同步。真实效果需要接入 Wav2Lip、MuseTalk、LstmSync 等模型推理命令。
## 开发接力入口
如果你在新窗口继续开发,建议按这个顺序看:
1. `AGENTS.md`:给开发 agent 的项目规则。
2. `PROJECT_SPEC.md`:项目目标、接口契约、成功标准。
3. `TASKS.md`:分阶段任务清单。
4. `docs/backend-adapter-guide.md`:如何接真实口型同步模型。
5. `docs/aizhinengti-integration.md`:如何接回主项目。
6. `docs/testing-and-acceptance.md`:测试和验收标准。
7. `docs/model-selection.md`:模型选型建议。
## 接口兼容性
主项目调用方式等价于:
```python
from gradio_client import Client, handle_file
client = Client("http://127.0.0.1:7860/")
result = client.predict(
audio_file=handle_file("C:/test/audio.wav"),
video_file={"video": handle_file("C:/test/avatar.mp4")},
api_name="/process_single",
)
```
期望返回:
```json
{"video": "生成后的视频文件路径", "subtitles": null}
```
## 快速启动
先安装 `uv`https://docs.astral.sh/uv/getting-started/installation/
```powershell
cd D:\WYF-project\digital-human-lipsync-service
uv sync
.\scripts\start.ps1
```
启动后访问:`http://127.0.0.1:7860/`
也可以直接运行模块:
```powershell
uv run python -m digital_human_lipsync_service
```
## 接入 aIzhinengti
1. 打开数字人页面设置。
2. `数字人模型` 选择 `自主算力机`
3. `数字人API地址``http://127.0.0.1:7860/` 或局域网 GPU 机器地址。
4. 如果不用 CompShare,只需手动启动本服务;服务器 ID 可先填一个占位值用于通过界面校验。
## 接入真实口型同步模型
设置 `command` 后端,让服务调用你自己的推理脚本:
```powershell
$env:LIPSYNC_BACKEND = "command"
$env:LIPSYNC_COMMAND_CWD = "D:\models\Wav2Lip"
$env:LIPSYNC_COMMAND_TIMEOUT_SECONDS = "1800"
$env:LIPSYNC_COMMAND_TEMPLATE = 'python inference.py --checkpoint_path D:\models\Wav2Lip\checkpoints\wav2lip_gan.pth --face {video_q} --audio {audio_q} --outfile {output_q}'
.\scripts\start.ps1 -Backend command
```
可用模板变量:
- `{audio}`:上传后的音频文件路径
- `{video}`:上传后的人物视频路径
- `{output}`:服务要求模型写入的输出视频路径
- `{workdir}`:临时工作目录
- `{cwd}`:命令执行目录,来自 `LIPSYNC_COMMAND_CWD`
- `{audio_q}` / `{video_q}` / `{output_q}` / `{workdir_q}` / `{cwd_q}`:适合直接放进命令行的已转义路径,Windows 路径含空格时建议优先使用
`command` 后端会校验模型命令退出码、输出文件是否存在且非空。失败时错误信息会包含退出码、耗时、命令和 `stderr` 尾部,方便定位 CUDA、ffmpeg、模型路径或人脸检测问题。
## 验证
```powershell
.\scripts\test-client.ps1 -Audio C:\test\audio.wav -Video C:\test\avatar.mp4
```
如果返回里有 `video` 字段,主项目就基本能拿到生成结果。