鲲鹏服务器上kaldi 运行voxforge例子
1 介绍
Kaldi是当前最流行的开源语音识别工具(Toolkit),它使用WFST来实现解码算法。Kaldi的主要代码是C++编写,在此之上使用bash和python脚本做了一些工具。
voxforge是个收集语音的网址,你可以免费的得到语音库。下载的话你可以用一些批量下载的软件或者利用kaldi/egs/voxforge/s5里的getdata.sh来下载。大概有12.6GB的大小,大家保证你的linux系统有足够的空间来存储。
2 安装准备
华为云购买一台鲲鹏服务器
本文以云服务器KC1实例搭建,云服务器配置如表1-1所示。
表1-1 云服务器配置
项目 |
说明 |
规格 |
kc1.large.2 | 2vCPUs | 4GB |
磁盘 |
系统盘:高IO(40GB) |
操作系统要求如表1-2所示。
表1-2 操作系统要求
项目 |
说明 |
下载地址 |
Ubuntu |
18.04 |
在公共镜像中已提供。 |
Kernel |
4.15.0 |
在公共镜像中已提供。 |
3 安装kaldi
参考博客:https://bbs.huaweicloud.cn/blogs/173186
我安装的目录是/usr/local/kaldi
4 搭建voxforge语音库
运行voxforge例子时候,需要online-gmm-decode-faster 和 online-wav-gmm-decode-faster,
online-wav-gmm-decode-faster 用来回放wav文件来识别的;
online-gmm-decode-faster用来从麦克风输入声音来识别的。
参考如下步骤安装:
1)bash extras/install_portaudio.sh
a. 在kaldi/tools目录下运行 bash extras/install_portaudio.sh
该脚本下载pa_stable_v19_20111121.tgz并且解压,执行时候报错:
b. 修改文件:vi config.sub (解决configure: error: cannot guess build type; you must specify one)
查找“x86”内容的位置,在其位置后面增加aarch64类型,具体2处增加:
case $basic_machine in处
(1)
| x86 | xc16x | xstormy16 | xtensa \
改为:
| x86| aarch64 | xc16x | xstormy16 | xtensa \
(2)
| x86-* | x86_64-* | xc16x-* | xps100-* \
改为:
| x86-* | aarch64-* | x86_64-* | xc16x-* | xps100-* \
c. 重新打包:pa_stable_v19_20111121.tgz
rm –rf pa_stable_v19_20111121.tgz
tar –zcvf pa_stable_v19_20111121.tgz portaudio
d. 修改extras/install_portaudio.sh后重新执行
在./configure 后面在加上参数
./configure --prefix=`pwd`/install --with-pic
改为:
./configure --prefix=`pwd`/install --with-pic --host=aarch64 --build=aarch64
extras/install_portaudio.sh
2) 安装online
cd /usr/local/kaldi/src/online
make -j2
3) 安装onlinebin
cd /usr/local/kaldi/src/onlinebin
make -j2
生成 online-gmm-decode-faster 和 online-wav-gmm-decode-faster
5 分析和执行voxforge中online_demo例子
Voxforge目录下有三个子目录,分别是gst_demo,online_demo,s5,其中s5是特征提取,模型训练,得出模型的例子,online_demo是根据模型进行进行在线语音识别,识别麦克风输入,是推理过程。这里分析online_demo例子。
默认模式离线文件解码: online_demo/run.sh
离线在线解码:online_demo/run.sh --test-mode live
run.sh脚本分析(分析离线语音识别模型):
1)下载online-data.tar.bz2,如果目录下有该语言包,则跳过次步骤,下载地址:
http://sourceforge.net/projects/kaldi/files/online-data.tar.bz2
2)解压,生成online-data,如下为目录结构
--online-data
--audio //该目录存放wav语言文件
--models
--tri2a
--tri2b_mmi //脚本中采用此模型
在tri2a或者tri2b_mmi目录下,有模型文件model(tri2a多了一个final.mdl,即model文件的软链接),有转移矩阵文件matrix
说明:
(1)audio:可以将需要测试的wav文件拷贝到此目录
(2)tri2b_mmi目录下的文件是在s5训练中生成的,可以将s5下的exp目录下的final.mdl, s5目录下的exp下的tri下的graph_word里面的words.txt,和HCLG.fst,考到models的tri2a或者tri2b_mmi下,或者拷贝到自己新建的模型目录。
3)将audio目录下的wav文件加入文件列表input.scp
> $decode_dir/input.scp for f in $audio/*.wav; do bf=`basename $f` bf=${bf%.wav} echo $bf $f >> $decode_dir/input.scp done
4)online-wav-gmm-decode-faster对文件列表进行语音识别
online-wav-gmm-decode-faster --verbose=1 --rt-min=0.8 --rt-max=0.85\ --max-active=4000 --beam=12.0 --acoustic-scale=0.0769 \ scp:$decode_dir/input.scp $ac_model/model $ac_model/HCLG.fst \ $ac_model/words.txt '1:2:3:4:5' ark,t:$decode_dir/trans.txt \ ark,t:$decode_dir/ali.txt $trans_matrix;;说明:ali.txt记录对齐的状态与帧之间关系 trans.txt记录解码结果的数字
5)估计模拟解码的错误率
- 点赞
- 收藏
- 关注作者
评论(0)