前言
本文记录了我在部署和开发 硅基流动开源数字人HeyGem.ai 过程中遇到的一些问题与解决方案,适合有一定基础的 AI 开发者或项目集成者参考。
在这里感谢一些大佬的参考:
1、https://blog.youkuaiyun.com/abments/article/details/146412372?spm=1001.2014.3001.5502
3、https://blog.youkuaiyun.com/coder_dai/article/details/146501672?spm=1001.2014.3001.55014、https://blog.youkuaiyun.com/wumule/article/details/146845742?spm=1001.2014.3001.5502
服务端
步骤1:
拉取heygem模型服务docker镜像
总计约70G,注意预留足够磁盘空间,可以依次执行以下命令拉取镜像,也可以在步骤二中直接执行docker-compose命令,程序docker-compose会自动拉取镜像。
docker pull guiji2025/fun-asr
docker pull guiji2025/fish-speech-ziming
docker pull guiji2025/heygem.ai
如果下载速度过慢或被墙,可以换国内源
docker pull crpi-87t8jkvf79rj7hal.cn-huhehaote.personal.cr.aliyuncs.com/modelers_park/fun-asr:latest
docker pull crpi-87t8jkvf79rj7hal.cn-huhehaote.personal.cr.aliyuncs.com/modelers_park/fish-speech-ziming:latest
docker pull crpi-87t8jkvf79rj7hal.cn-huhehaote.personal.cr.aliyuncs.com/modelers_park/heygem.ai:latest
·下载好后可以运行 docker images 查看,一定要确保3个镜像都下载成功。
步骤2:
。拉取heygem前端服务代码
git clone https://github.com/GuijiAI/HeyGem.ai.git
步骤3:
。修改镜像地址和挂载目录
首先进入HeyGem.ai/deploy目录,编辑docker-compose-linux.yml文件,按需修改挂载目录,记得确保文件路径存在,可以mkdir先创建好,免得后面报错。如果是用国内源下载的,还得修改镜像为本地下载的。
heygem-tts:
image: crpi-87t8jkvf79rj7hal.cn-huhehaote.personal.cr.aliyuncs.com/modelers_park/fish-speech-ziming:latest
heygem-asr:
image: crpi-87t8jkvf79rj7hal.cn-huhehaote.personal.cr.aliyuncs.com/modelers_park/fun-asr:latest
heygem-gen-video:
image: crpi-87t8jkvf79rj7hal.cn-huhehaote.personal.cr.aliyuncs.com/modelers_park/heygem.ai:latest
。启动模型服务
docker-compose -f docker-compose-linux.yml up -d
启动后运行 docker ps 查看情况,如图是启动成功的。
客户端
步骤1:
。启动前端服务
进入HeyGem.ai根目录,执行命令安装依赖。注意:务必确认node版本为18+
npm install
按需修改src/main/config/config.js文件的请求地址和文件目录
// 根据自己的实际路径修改
export const assetPath = {
model: path.join(os.homedir(),'heygem_data', 'face2face', 'temp'), // 模特视频
ttsProduct: path.join(os.homedir(),'heygem_data', 'face2face', 'temp'), // TTS 产物
ttsRoot: path.join(os.homedir(),'heygem_data', 'voice', 'data'), // TTS服务根目录
ttsTrain: path.join(os.homedir(),'heygem_data', 'voice', 'data','origin_audio') // TTS 训练产物
注意:如果docker-compose-linux.yml文件中的 - ~/heygem_data/voice/data:/code/data 用了“~”,则这里要用os.homedir(),不然会报SQLite3的错。
步骤2:
。安装ffmpeg
安装Linux环境的ffmpeg依赖库
# 更新源
sudo apt update
# 安装ffmpeg库
sudo apt install ffmpeg -y
# 查看版本
ffmpeg -version
。进入resources/ffmpeg目录
cd resources/ffmpeg
。创建文件夹
mkdir -p linux/bin
。下载预编译二进制(选择适用于 Ubuntu 22.04 的版本)
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar xvf ffmpeg-release-amd64-static.tar.xz
。复制文件到项目目录
cp ffmpeg-*-amd64-static/ffmpeg linux/bin/
cp ffmpeg-*-amd64-static/ffprobe linux/bin/
。赋予执行权限
chmod +x ./linux/bin/ffmpeg
chmod +x ./linux/bin/ffprobe
。手动复制运行依赖
# 回到 HeyGem.ai目录下
mkdir -p ./node_modules/electron/dist/resources/app.asar.unpacked/resources/ffmpeg/linux/bin/
cp -r ./resources/ffmpeg/linux/bin/ ./node_modules/electron/dist/resources/app.asar.unpacked/resources/ffmpeg/linux/
步骤3:
修改 src/main/util/ffmpeg.js文件中的路径为我们刚才添加的。
function initFFmpeg() {
const ffmpegPath = {
'development-win32': path.join(__dirname, '../../resources/ffmpeg/win-amd64/bin/ffmpeg.exe'),
'development-linux': path.join(__dirname, '../../resources/ffmpeg/linux/ffmpeg'),
'production-win32': path.join(
process.resourcesPath,
'app.asar.unpacked',
'resources',
'ffmpeg',
'win-amd64',
'bin',
'ffmpeg.exe'
),
'production-linux': path.join(
process.resourcesPath,
'app.asar.unpacked',
'resources',
'ffmpeg',
'linux',
'bin',
'ffmpeg'
)
}
if(process.env.NODE_ENV === undefined){
process.env.NODE_ENV = 'production'
}
const ffmpegPathValue = ffmpegPath[`${process.env.NODE_ENV}-${process.platform}`]
log.debug('ENV:', `${process.env.NODE_ENV}-${process.platform}`)
log.info('FFmpeg path:', ffmpegPathValue)
ffmpeg.setFfmpegPath(ffmpegPathValue)
const ffprobePath = {
'development-win32': path.join(__dirname, '../../resources/ffmpeg/win-amd64/bin/ffprobe.exe'),
'development-linux': path.join(__dirname, '../../resources/ffmpeg/linux/ffprobe'),
'production-win32': path.join(
process.resourcesPath,
'app.asar.unpacked',
'resources',
'ffmpeg',
'win-amd64',
'bin',
'ffprobe.exe'
),
'production-linux': path.join(
process.resourcesPath,
'app.asar.unpacked',
'resources',
'ffmpeg',
'linux',
'bin',
'ffprobe'
)
}
步骤4:
。启动前端服务
npm run start
完成!稍等一会就能看到客户端打开。
常见问题
Missing X server or $DISPLAY
[838724:0321/095319.155461:ERROR:ozone_platform_x11.cc(245)] Missing X server or $DISPLAY
[838724:0321/095319.155479:ERROR:env.cc(258)] The platform failed to initialize. Exiting.
解决办法:更换ssh连接客户端,推荐使用MobaXterm