HeyGem数字人项目
因工作需要,研究了一下数字人项目,HeyGem开源免费,生成效果还不错。经过研究实现了BS分离的部署模式,欢迎品尝。
一、部署
- 客户端IP地址编辑
<src.js>
export const serviceUrl = {
face2face: isDev ? '<http://192.168.3.231:8383/easy>' : '<http://192.168.3.231:8383/easy>',
tts: isDev ? '<http://192.168.3.231:18180>' : '<http://192.168.3.231:18180>'
}
- 客户端资源文件处理
<src.js>
export const assetPath = {
model: isWin
? path.join('Z:', 'face2face', 'temp')
: path.join(os.homedir(), 'heygem_data', 'face2face', 'temp'), // 模特视频
ttsProduct: isWin
? path.join('Z:', 'face2face', 'temp')
: path.join(os.homedir(), 'heygem_data', 'face2face', 'temp'), // TTS 产物
ttsRoot: isWin
? path.join('Z:', 'voice', 'data')
: path.join(os.homedir(), 'heygem_data', 'voice', 'data'), // TTS服务根目录
ttsTrain: isWin
? path.join('Z:', 'voice', 'data', 'origin_audio')
: path.join(os.homedir(), 'heygem_data', 'voice', 'data', 'origin_audio') // TTS 训练产物
}
- 客户端文件路径映射
服务端将路径通过NFS或SMB曝露出来, 映射到Windows本地路径.
上面第二步客户端路径, 如: “Z:”, 即是映射到本地的网络驱动器.
二、接口文档
| 描述 | 语音模型训练(模特音频) |
|---|---|
| 请求路径 | http://IP:18180/v1/preprocess_and_tran |
| 调用方式 | post,application/json |
| 入参 | { “format”: “模特初始音频格式”, “reference_audio”: “从TTS服务根目录到模特初始音频文件路径的相对路径”, “lang”: “语言”} |
| 出参 | { “code”: 0, “msg”: “success”, “reference_audio_text”: “语音模型训练返回音频文本”, “asr_format_audio_url”: “语音模型训练返回音频路径”} |
| 调用示例 | url: http://192.168.3.231:18180/v1/preprocess_and_tran入参:{“format”:“wav”,“reference_audio”:“origin_audio/20250729104817075.wav”,“lang”:“zh”}出参:{“code”:0,“msg”:“success”,“reference_audio_text”:“基肯肯雅热,主要通过埃及伊文和白文译文叮咬传播。”,“asr_format_audio_url”:“/code/sessions/20250729/0f0e3977679c4359b923a2204e9a316e/format_denoise_20250729093333073_part0.wav”} |
| 描述 | 文本合成音频 |
|---|---|
| 请求路径 | http://IP:18180/v1/invoke |
| 调用方式 | post,application/json |
| 入参 | { “speaker”: “UUID”, //标志一个音频合成请求,保持唯一即可 “text”: “音频合成文本”, “format”: “wav”, //固定传参 “topP”: 0.7, // 固定传参 “max_new_tokens”: 1024, // 固定传参 “chunk_length”: 100, // 固定传参 “repetition_penalty”: 1.2, // 固定传参 “temperature”: 0.7, // 固定传参 “need_asr”: false, // 固定传参 “streaming”: false, // 固定传参 “is_fixed_seed”: 0, // 固定传参 “is_norm”: 1, // 固定传参 “reference_audio”: “语音模型训练返回音频路径”, “reference_text”: “语音模型训练返回音频文本”} |
| 出参 | 合成音频文件的二进制数据 |
| 调用示例 | url: http://192.168.3.231:18180/v1/invoke入参:{“speaker”:“ef8a5a72-e510-4de7-8e53-5580c9ec33e4”,“text”:” 延续护理专科为出院患者提供过渡期专业照护。若您近期手术出院、患慢性病或需长期康复,可挂此号。医护团队将联合制定居家护理计划,指导用药、伤口管理、康复训练及健康监测,减少再入院风险。尤其适合高龄、行动不便或照护资源不足的患者。助您平稳过渡至家庭康复。“,”format”:“wav”,“topP”:0.7,“max_new_tokens”:1024,“chunk_length”:100,“repetition_penalty”:1.2,“temperature”:0.7,“need_asr”:false,“streaming”:false,“is_fixed_seed”:0,“is_norm”:1,“reference_audio”:“/code/sessions/20250729/0f0e3977679c4359b923a2204e9a316e/format_denoise_20250729093333073_part0.wav”,“reference_text”:“基肯肯雅热,主要通过埃及伊文和白文译文叮咬传播。”} 出参: |
| 描述 | 提交tts视频合成任务 |
|---|---|
| 请求路径 | /easy/submit |
| 调用方式 | post,application/json |
| 入参 | { “audio_url”: “音频路径”, “video_url”: “视频路径”, “code”: “合成视频编码”, “chaofen”: 0, “watermark_switch”: 0, “pn”: 1} |
| 出参 | { “code”: 10000, “data”: {}, “msg”: 10000, “success”: true} |
| 调用示例 | url: http://192.168.3.231:8383/easy/submit入参:{“audio_url”:“82e8ed51-7e47-4069-8640-a51ba2a352a1.wav”,“video_url”:“20250729104817075.mp4”,“code”:“243c7f9c-98f3-43cb-86d5-d19ecaad341c”,“chaofen”:0,“watermark_switch”:0,“pn”:1}出参:{“code”:10000,“data”:{},“msg”:10000,“success”:true} |
| 描述 | 查询tts视频合成任务状态 |
|---|---|
| 请求路径 | /easy/query |
| 调用方式 | get |
| 入参 | code=合成任务编码 |
| 出参 | { “code”: 状态码 10000-成功, “data”: { “code”: “合成任务编码”, “cost”: {}, “height”: 视频高度, “msg”: “任务进度描述”, “progress”: 任务进度数, “result”: “生成视频保存路径”, “status”: 任务状态 1-进行中 2-已完成, “video_duration”: 视频长度, “width”: 视频宽度 }, “msg”: ““,”success”: 是否成功 true-是} |
| 调用示例 | url: http://192.168.3.231:8383/easy/query入参:code=243c7f9c-98f3-43cb-86d5-d19ecaad341c出参1:{“code”:10000,“data”:{“code”:“243c7f9c-98f3-43cb-86d5-d19ecaad341c”,“msg”:“视频特征提取完成”,“progress”:20,“result”:““,”status”:1},“msg”:““,”success”:true}出参2:{“code”:10000,“data”:{“code”:“243c7f9c-98f3-43cb-86d5-d19ecaad341c”,“cost”:{},“height”:1248,“msg”:“任务完成”,“progress”:100,“result”:“/243c7f9c-98f3-43cb-86d5-d19ecaad341c-r.mp4”,“status”:2,“video_duration”:27492,“width”:704},“msg”:““,”success”:true} |