HeyGem.ai 调试

目标:
Ubuntu环境 下,从源码开始搭建并调试 HeyGem.ai(Heygen的开源平替版),解决构建问题、Docker服务联动问题、数据库异常、TTS接口连通性问题,并总结整个过程中的关键技术点。

Ubuntu系统环境

项目	详细信息
操作系统	Ubuntu 22.04.5 LTS
内核版本	5.15.0-138-generic
CPU	Intel 第13代 Core i5-13400F (20核)
内存	16GB(可用15.3GB)
硬盘	剩余100GB以上(Docker镜像和HeyGem.ai源码需要大量空间)
GPU	NVIDIA RTX 3070(显卡驱动已正确安装). 8G 
Docker版本	26.1.3
Node.js版本	v12.22.9(建议升级到 v18+)
NPM版本	8.5.1

:rocket: 具体操作步骤与问题处理总结

1. HeyGem.ai源码环境搭建

  • 成功从GitHub拉取HeyGem.ai源码。
  • Ubuntu 22.04 系统下操作。
  • 初步执行 npm install 报出大量警告和错误:
    • :warning: 原因:本地 Node.js 版本过低(v12.22.9),而HeyGem要求至少 v16+。
    • :fire: 当前未升级Node,强制继续安装。

2. npm run build 成功编译

  • 执行 npm run build,成功在 /out 目录下生成主进程(main)、预加载(preload)、前端界面(renderer)的编译文件。
  • 同时,执行 npm run dev 本地开发模式也成功启动。(后续仍需处理TTS服务连接问题)

3. Docker容器环境搭建

  • 必须的Docker容器启动并正常运行:
    • heygem-tts(端口18180)
    • heygem-asr(端口10095)
    • heygem-gen-video(端口8383)
  • 通过 curl http://127.0.0.1:8080/ 验证 TTS服务接口正常(Swagger页面可以访问)。

4. TTS接口连接超时问题调查

Electron端调用音频预处理API时报错:

arduino

CopyEdit

AxiosError: connect ETIMEDOUT 192.168.4.204:18180

:pencil2: 问题原因分析:

  • Electron配置(config.js文件)中,TTS服务器地址在开发模式下指向了192.168.4.204:18180,但实际应该是本地Docker运行的127.0.0.1:18180

:hammer_and_wrench: 解决方案建议:

javascript

CopyEdit

export const serviceUrl = {
  tts: isDev ? 'http://127.0.0.1:18180' : 'http://127.0.0.1:18180',
}
  • 将配置修改为本地地址。

5. 音频预处理API(/v1/preprocess_and_tran)手动测试

  • 使用 curl 直接请求TTS容器接口:
    • :warning: 注意 format 字段必须写 "wav",而不是 ".wav"
    • :warning: 返回 "file not exists" 表示指定的音频文件在容器中找不到,需正确上传或挂载文件(如 test.wav)。

6. better-sqlite3数据库异常修复

  • 初始出现SQLite绑定异常:

pgsql

CopyEdit

TypeError: SQLite3 can only bind numbers, strings, bigints, buffers, and null
  • :zap: 问题原因:
    • 插入数据库时,voiceId参数传入了布尔值(true/false)。
  • :hammer_and_wrench: 修复方法:

javascript

CopyEdit

const voiceIdInt = typeof voiceId === 'boolean' ? (voiceId ? 1 : 0) : voiceId;
stmt.run(modelName, videoPath, audioPath, voiceIdInt, Date.now());

:clipboard: 最终状态总结

  • :white_check_mark: 成功本地编译 HeyGem.ai 源码,且可以启动。
  • :white_check_mark: Docker三大容器服务均正常启动并提供服务。
  • :white_check_mark: 能访问到 TTS Web接口的Swagger文档。
  • :zap: Electron客户端与TTS服务器通信错误,需要修正TTS URL。
  • :zap: 音频文件需放到正确的路径中,避免 “file not exists” 错误。