95 lines
3.3 KiB
Markdown
95 lines
3.3 KiB
Markdown
# 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` 字段,主项目就基本能拿到生成结果。
|