安装Nemo并进行自动语音识别

2022-05-27 10:19:07 浏览数 (2)

基础环境

CPU: 6核

内存: 56GB

显卡: GN8 (P40)

公网带宽: 5M

系统: Ubuntu Server 18.04.1 LTS 64位

连接方式: SSH

安装Nvidia驱动

安装指令

代码语言:shell复制
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:graphics-drivers/ppa
# 根据Ubuntu系统和显卡不同,版本略有区别,主要有 460 470 495 以及更高的510等
sudo apt-get install nvidia-driver-470
# 重启之后才能成功
sudo reboot

检查是否安装成功

代码语言:javascript复制
nvidia-smi

结果显示如图:

nvidia-smi运行结果图nvidia-smi运行结果图

对显示的结果进行分析(截图时已经安装完成,并且已经开始运行程序):

  • 橙色方框:Driver版本,470(指令安装的470)
  • 红色方框:Cuda版本,11.4(默认安装的)
  • 绿色方框:所有显卡信息,0号显卡为Tesla P40,状态为on
  • 蓝色方块:对应左侧绿色方框的显卡的显存占用,此刻0号显卡占用大概9009Mb
  • 紫色方框:运行的所有程序,0号显卡此刻正在运行程序,PID为32656

可以使用下方指令检查cuda版本:

代码语言:shell复制
nvcc -V

安装miniconda

代码语言:shell复制
# 使用清华源进行安装(推荐)
export DL_SITE=https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda
# 使用原厂源进行安装(国内不推荐)
export DL_SITE=https://repo.anaconda.com/miniconda
# 上方命令二选一即可
# 下载安装包
wget -c $DL_SITE/Miniconda3-py38_4.10.3-Linux-x86_64.sh
# 执行安装,推荐全部按照预设路径走
bash Miniconda3-py38_4.10.3-Linux-x86_64.sh
# 启动 Conda
source ~/.bashrc

此时命令行最前方显示应该如下图所示:出现了一个(base)

这个表明当前位于conda的base环境内部。

可以使用下方指令创建新的虚拟环境,也可使用默认环境继续进行:

代码语言:shell复制
# 创建 conda 环境 名字叫做 'studyNemo' 指定python版本为3.8
conda create -n studyNemo python==3.8
# 激活 conda 中名为 studyNemo 的环境
conda activate studyNemo
# 退出环境 如果从base中退出则回到基本命令行
conda deacitvate

接下来命令行前方显示不再是 (base) 而是 (studyNemo).

注意: base 与 studyNemo 的环境相互独立,并不互通,在不同环境中install的包不能相互使用

安装Jupyter Lab

代码语言:shell复制
pip install jupyter jupyterlab
# 设置登录密码
export PW='自行提供' 
# 保存一下密码到指定位置
python3 -c "from notebook.auth.security import set_password;set_password('$PW','$HOME/.jupyter/jupyter_notebook_config.json')"

安装Nemo

可能需要先将ubuntu的源更换至国内源:

代码语言:javascript复制
# 编辑配置源的列表:
sudo vim /etc/apt/sources.list
# 按 i 进入插入模式,在文件头部插入以下内容(清华源):
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
#
# 注意!! 链接中 bionic表示是18.04,如果版本不同请考虑更换:
# 20.04:focal;18.04:bionic;16.04:xenial;14.04:trusty。
#

#更新仓库
sudo apt-get update
# update命令执行过程中会看到 mirrors.tuna.tsinghua.edu.cn 的链接,表示仓库正确更新
#可能需要升级仓库
sudo apt-get upgrade

开始安装Nemo(注意当前conda环境):

代码语言:javascript复制
# 需要安装依赖
sudo apt-get install -y libsndfile1 ffmpeg
# 在对应的conda环境中执行以下命令,比如 base环境或者studyNemo 环境
pip install Cython
pip install --user pytest-runner
pip install rosa numpy==1.19.4
pip install torchmetrics==0.6.0
pip install nemo_toolkit[all]==1.4.0
pip install ASR-metrics

测试Nemo:

代码语言:python代码运行次数:0复制
python
>>>import nemo
>>>import nemo.collections.asr as nemo_asr
>>>import nemo.collections.tts as nemo_tt

没有报错即为成功,warning不必理会

使用Nemo和预训练模型进行ASR识别

代码语言:python代码运行次数:0复制
# 导入Nemo
import nemo
import nemo.collections.asr as nemo_asr
# 输出Nemo版本
print(nemo.__version__)
# 加载模型
# 方式1:直接下载,需要login
# asr_model = nemo_asr.models.EncDecCTCModel.from_pretrained(model_name="stt_zh_quartznet15x5")
# 方式2:加载本地模型(登录NGC后自行下载:https://catalog.ngc.nvidia.com/)
# 加载中文预训练模型并实例化
quartznet = nemo_asr.models.EncDecCTCModel.restore_from("stt_zh_quartznet15x5.nemo")
# 传入语音进行识别
# 调用transcribe函数测试预训练模型识别效果
asr_result = quartznet.transcribe(paths2audio_files=["/root/testdata/hi6.wav"])
print(asr_result)
# 使用工具计算准确率
from ASR_metrics import utils as metrics
# 指定正确答案
s1 = "这是一段测试音频"
# 识别结果
s2 = " ".join(asr_result)
# 计算字错率cer
print("字错率:{}".format(metrics.calculate_cer(s1,s2)))
# 计算准确率accuracy
print("准确率:{}".format(1-metrics.calculate_cer(s1,s2)))

本来是启动jupyter lab后 使用jupyter notebook 写的,为了方便这里合并成了一个python文件

0 人点赞