小白安装教程

环境条件:设备有 GPU、已经安装 cuda

说明:这是针对 Linux 环境安装的教程,其他系统可作为参考。

1、创建并进入 conda 环境

  1. conda create -n EmotiVoice python=3.8
  2. conda init
  3. conda activate EmotiVoice

如果你不想使用conda环境,也可以省略该步骤,但要保证python版本为3.8

2、安装git-lfs

如果是Ubuntu则执行

  1. sudo apt update
  2. sudo apt install git
  3. sudo apt-get install git-lfs

CentOS则执行

  1. sudo yum update
  2. sudo yum install git
  3. sudo yum install git-lfs

3、克隆仓库

  1. git lfs install
  2. git lfs clone https://github.com/netease-youdao/EmotiVoice.git

4、安装依赖

  1. pip install torch torchaudio
  2. pip install numpy numba scipy transformers==4.26.1 soundfile yacs g2p_en jieba pypinyin

5、下载预训练模型文件

(1)首先进入项目文件夹

  1. cd EmotiVoice

(2)执行下面命令

  1. git lfs clone https://huggingface.co/WangZeJun/simbert-base-chinese WangZeJun/simbert-base-chinese

或者

  1. git clone https://www.modelscope.cn/syq163/WangZeJun.git

上面两种下载方式二选一即可。

(3)第三步下载ckpt模型

  1. git clone https://www.modelscope.cn/syq163/outputs.git

上面步骤完成后,项目文件夹内会多 WangZeJunoutputs 文件夹,下面是项目文件结构

  1. ├── Dockerfile
  2. ├── EmotiVoice_UserAgreement_易魔声用户协议.pdf
  3. ├── demo_page.py
  4. ├── frontend.py
  5. ├── frontend_cn.py
  6. ├── frontend_en.py
  7. ├── WangZeJun
  8. └── simbert-base-chinese
  9. ├── README.md
  10. ├── config.json
  11. ├── pytorch_model.bin
  12. └── vocab.txt
  13. ├── outputs
  14. ├── README.md
  15. ├── configuration.json
  16. ├── prompt_tts_open_source_joint
  17. └── ckpt
  18. ├── do_00140000
  19. └── g_00140000
  20. └── style_encoder
  21. └── ckpt
  22. └── checkpoint_163431

6、运行UI交互界面

(1)安装streamlit

  1. pip install streamlit

(2)启动

打开运行后显示的server地址,如何正常显示页面则部署完成。

  1. streamlit run demo_page.py --server.port 6006 --logger.level debug

7、启动API服务

安装依赖

  1. pip install fastapi
  2. pip install pydub
  3. pip install uvicorn[standard]

在6006端口启动服务(端口可根据自己的需求修改)

  1. uvicorn openaiapi:app --reload --port 6006

接口文档地址:你的服务地址+/docs

8、遇到错误

(1) 运行UI界面后,打开页面一直显示 “Please wait…” 或者显示一片空白

原因:

这个错误可能是由于CORS(跨域资源共享)保护配置错误。

解决方法:

在启动时加上一个 server.enableCORS=false 参数,即使用下面命令启动程序

  1. streamlit run demo_page.py --server.port 6006 --logger.level debug --server.enableCORS=false

如果通过临时禁用 CORS 保护解决了问题,建议重新启用 CORS 保护并设置正确的 URL 和端口。

(2) 运行报错 raise BadZipFile(“File is not a zip file”) zipfile.BadZipFile: File is not a zip file

原因:

这可能是由于缺少 averaged_perceptron_tagger 这个nltk中用于词性标注的一个包,它包含了一个基于平均感知器算法的词性标注器。如果你在代码中使用了这个标注器,但是没有预先下载对应的数据包,就会遇到错误,提示你缺少averaged_perceptron_tagger.zip文件。当然也有可能是缺少 cmudict CMU 发音词典数据包文件。

正常来说,初次运行程序NLTK会自动下载使用的相关数据包,debug模式下运行会显示如下信息

  1. [nltk_data] Downloading package averaged_perceptron_tagger to
  2. [nltk_data] /root/nltk_data...
  3. [nltk_data] Unzipping taggers/averaged_perceptron_tagger.zip.
  4. [nltk_data] Downloading package cmudict to /root/nltk_data...
  5. [nltk_data] Unzipping corpora/cmudict.zip.

可能由于网络(需科学上网)等原因,没能自动下载成功,因此缺少相关文件导致加载报错。

解决方法:重新下载缺少的数据包文件

1)方法一

创建一个 download.py文件,在其中编写如下代码

  1. import nltk
  2. print(nltk.data.path)
  3. nltk.download('averaged_perceptron_tagger')
  4. nltk.download('cmudict')

保存并运行

  1. python download.py

这将显示其文件索引位置,并自动下载 缺少的 averaged_perceptron_tagger.zipcmudict.zip 文件到/root/nltk_data目录下的子目录,下载完成后查看根目录下是否有nltk_data文件夹,并将其中的压缩包都解压。

2)方法二

如果通过上面代码还是无法正常下载数据包 ,也可以打开以下地址手动搜索并下载压缩包文件(需科学上网)

  1. https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml

其中下面是averaged_perceptron_tagger.zipcmudict.zip 数据包文件的下载地址

  1. https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/taggers/averaged_perceptron_tagger.zip
  2. https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/corpora/cmudict.zip

然后将该压缩包文件上传至(1)运行python download.py时打印显示的文件索引位置,如 /root/nltk_data 或者 /root/miniconda3/envs/EmotiVoice/nltk_data 等类似目录下,如果没有则创建一个,然后将zip压缩包解压。

解压后nltk_data目录结构应该是下面这样

  1. ├── nltk_data
  2. ├── corpora
  3. ├── cmudict
  4. ├── README
  5. └── cmudict
  6. └── cmudict.zip
  7. └── taggers
  8. ├── averaged_perceptron_tagger
  9. └── averaged_perceptron_tagger.pickle
  10. └── averaged_perceptron_tagger.zip

(3) 报错 AttributeError: ‘NoneType’ object has no attribute ‘seek’.

原因:未找到模型文件

解决方法:大概率是你未下载模型文件或者存放路径不正确,查看自己下载的模型文件是否存在,即outputs文件夹存放路径和里面的模型文件是否正确,正确结构可参考 第五步 中的项目结构。

(4) 运行API服务出错 ImportError: cannot import name ‘Doc’ from ‘typing_extensions’

原因:typing_extensions 版本问题

解决方法:

尝试将typing_extensions升级至最新版本,如果已经是最新版本,则适当降低版本,以下版本在fastapi V0.104.1测试正常。

  1. pip install typing_extensions==4.8.0 --force-reinstall

(5) 请求文本转语音接口时报错 500 Internal Server Error ,FileNotFoundError: [Errno 2] No such file or directory: ‘ffmpeg’

原因:未安装ffmpeg

解决方法:

执行以下命令进行安装,如果是Ubuntu执行

  1. sudo apt update
  2. sudo apt install ffmpeg

CentOS则执行

  1. sudo yum install epel-release
  2. sudo yum install ffmpeg

安装完成后,你可以在终端中运行以下命令来验证”ffmpeg”是否成功安装:

  1. ffmpeg -version

如果安装成功,你将看到”ffmpeg”的版本信息。