HeyGem数字人项目

因工作需要,研究了一下数字人项目,HeyGem开源免费,生成效果还不错。经过研究实现了BS分离的部署模式,欢迎品尝。

HeyGem数字人项目
Photo by Igor Omilaev / Unsplash

一、部署

  1. 客户端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>'
}
  1. 客户端资源文件处理

<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 训练产物
}
  1. 客户端文件路径映射

服务端将路径通过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}