首页 > 其他分享 >语音识别:安装编译Kaldi详细过程及遇到的一些问题汇总

语音识别:安装编译Kaldi详细过程及遇到的一些问题汇总

时间:2022-10-02 11:57:44浏览次数:63  
标签:Kaldi kaldi 键入 汇总 编译 tools 安装

语音识别-Kaldi的安装编译实录(Ubuntu环境)

 

 

https://blog.csdn.net/Ryan0828/article/details/121179225?ops_request_misc=&request_id=&biz_id=102&utm_term=Checking%20compiler%20c++%20...%20Chec&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-121179225.142^v51^control,201^v3^control_2&spm=1018.2226.3001.4187

 

 


本篇博客用于记录一次用开源语音识别(ASR)工具Kaldi来实现中文语音识别功能的经历,记录一路遇到的一些问题。希望本篇文章可以给广大有需要的人提供一些帮助,也以防之后若再做此方向的东西会重蹈覆辙。

注意:本文是在Ubuntu64位的虚拟机环境下运行的,通过阅读Kaldi官方的INSTALL文件中指出的,似乎不能在Windows下正常编译使用。

Kaldi简介:Kaldi是当前最流行的开源语音识别工具(Toolkit),它使用WFST来实现解码算法。它自带了很多特征提取模块,能提取MFCC/ivector/xvector等语音特征;也自带了很多语音模型代码,可以直接使用或重新训练GMM-HMM等模型;它还支持GPU进行训练。可以说是功能很强大了。更厉害的是,你只需要简单的SHELL编程,就能使用kaldi。kaldi作为一个工具,不需要像库一样进行大量编程,所以使用门槛其实不高。

对应大部分Kaldi的用户来说,我们只需要使用脚本和配置文件就可以完成语音识别系统的训练和预测了。所以我也选择了用Kaldi来完成导师安排的语音识别任务。

一、配置Kaldi环境
安装VMWare虚拟机并安装了Ubuntu,我的版本是Ubuntu20.04.3,安装过程参考:Ubuntu18.04安装教程

Kaldi官方教程:https://kaldi-asr.org/doc/install.html
安装下载,我是从github上直接下载zip然后解压的,官方github链接:https://github.com/kaldi-asr/kaldi

注意,如果下载zip到win上,一定要将zip传输到虚拟机再解压,不要解压后再复制到虚拟机!会出错的!
最新补充!我Kaldi下载来的项目文件Kaldi-master似乎是旧版本,导致了一些必要文件的丢失,所以我建议大家,最好还是用git工具来下载Kaldi的项目文件夹。

也可以使用git命令将其下载到本地,在终端键入:

git clone https://github.com/kaldi-asr/kaldi.git kaldi --origin upstream
或者(如果出现timed out可以用下面的指令)
git clone https://gitclone.com/github.com/kaldi-asr/kaldi.git kaldi --origin upstream
1
2
3
======== 下面这部分是我准备thchs30数据集的部分,和本文编译kaldi内容无关 ========
在Ubuntu中安装清华大学开源的thchs30数据集:http://www.openslr.org/18/
这里面的三个文件都要下,一共约8G,下载好后解压放到Kaldi的目录中对应的thchs30目录下新建的thchs30-openslr目录(该目录由自己创建)下:

例如,我的目录如下:
/home/keep/Keep/kaldi-master/egs/thchs30

这个thchs30-openslr是自己创建的,进去将下载来的3个数据集文件压缩到这个文件夹内即可。

在传输数据集的过程中我遇到了Ubuntu磁盘空间满的问题,但是我刚分配了40G,理应不会满,后来我猜测是因为从Win上复制文件到VMWare中可能会有缓存,然后去查了相关文档,发现问题确实如此,解决办法参考了:linux硬盘满了如何处理–ck3208
我的目录里是一个VMWare的dictionary中的./.cache占用了20G的内存,随后我按照上面的博客步骤去释放,问题也就得到了解决。

======== 上面这部分是我准备thchs30数据集的部分,和本文编译kaldi内容无关 ========

二、安装Kaldi依赖包、准备编译
进入kaldi-master项目文件夹,查看./INSTALL,提示需要分别编译tools和src下的文件

在终端键入 cd kaldi-master/tools/extras
键入./check_dependencies.sh执行该脚本检查包依赖情况
根据提示安装所需要的包

这里遇到了一个问题,是我按提示安装了所有包之后,一直提示我sudo apt-get install zlib1g-dev,我按提示键入命令安装这个zlib提示已安装且是最新版,一直重复得不到解决。

后来尝试先安装它提示的别的包试试,于是尝试安装g++。

先是键入了:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
1

键入命令:

sudo apt-get update
1

接着才可以键入安装g++的命令:

sudo apt install g++
1

中间会提示问是否继续,键入y后回车即可

终于,再次使用./check_dependencise.sh命令查看依赖包提示时已经all OK了。


三、编译
依赖包安装完了,先来编译tools
先cd到tools目录下,键入:

make -j 4 //这个数字4因人而异
1
#注意:这里的数字4是根据你的虚拟机cpu核心数来的,我这里虚拟机分配了4个核心就输入了4,当然也可以输入<=4的正整数,但是数字越大编译的效率也就越高了,所以看自己来确定这个数字。

编译完提示All done OK.:


编译完tools就可以来编译src了,先cd到src目录下。
键入命令:

./configure
1
这里出现了如下错误,当我按提示键入了如下图的命令后无果,查阅相关问题,发现了解决办法。

这里需要键入:

sudo apt-get install libatlas-base-dev
1

此时,再执行:

./configure --shared
1

看到了SUCCESS表示成功了。

继续依次键入命令:

make depend -j 4

make -j 4
1
2
3
注意:此处的4仍然按照自己分配的CPU核数来修改
键入make 进行编译,make耗时较长请耐心等待
出现:Done表示成功


现在需要验证一下是否安装成功

进入egs目录,用命令 cat README.txt 查看用例,egs下面包含如voxforge,vystadial_{cz,en},yesno和LDC用例

这里用yesno为例

进入egs/yesno目录,用命令cat README.txt 查看yesno数据集介绍,是一个关于Yes/no识别的简单的数据集

进入egs/yesno/s5目录,执行

./run.sh
1
这里我出现了这个

考虑到刚刚make编译的过程中重启了一下虚拟机,遂回到scr目录下 重新键入3个命令./configure --shared , make depend -j 4 , make -j 4 后重新编译再进行此步骤,发现还是解决不了,看到一个同样遇到这个问题的说:
究其原因是在于调用steps/ 和 utils/ 文件夹下的sh文件是报错,找不到文件。发现steps/ 和 utils/ 此时为两个文件。
实际上这两个文件为两个外链文件,类似于windows下的快捷方式。此处本应为外链的形式,但是却变成了两个文件。
错误在于,本人在windows下下载了kaldi的zip包, 解压完之后移动到了ubuntu下安装编译。此时会生成文件而非外链。

解决方法如下:

直接在ubuntu下 git clone 项目并解压安装

下载zip包在windows, 不解压缩直接传至ubuntu下解压缩并安装。

崩溃了,要重新来一遍了。。艹。。也没办法不是,我去重新来一遍。

最后我用方法2,把zip放到Ubuntu后再解压,然后重新走了一遍步骤二、编译,然后就成功了!


出现%WER 0.00 [ 0 / 232, 0 ins, 0 del, 0 sub ] exp/mono0a/decode_test_yesno/wer_10_0.0时,恭喜你,Kaldi安装成功!

21年11月9日更新
在经过CVTE模型没有跑通、aidatatang代码没有跑通的双重挫折下,我开始在aidatatang模型报错中查看问题。然后我发现是因为我Kaldi下载来的项目文件Kaldi-master似乎是旧版本,导致了一些必要文件的丢失,所以我建议大家,最好还是用git工具来下载Kaldi的项目文件夹。

重新编译的时候,我从./check_dependencies.sh检测依赖包这一步开始,发现多出了新的需要安装的依赖包,这次新安装了sox,mkl等的包,然后我按提示以此安装,看了新项目中extras/中提供的.sh文件,多出来了好多,我想这次的kaldi应该不会再出什么问题了。


更新:即使这里出现了all OK.但是当我在tools中用make -j 4对tools进行编译的时候,由于我觉得卡了就中途强制退出虚拟机了(提醒:不要关!),然后就导致我后面来到src目录./configure出现了报错:

Checking compiler g++ ...
Checking OpenFst library in ...
***configure failed: Could not find file /include/fst/fst.h:
you may not have installed OpenFst. See ../tools/INSTALL ***
1
2
3
4
经过查看其他人的做法,我到kaldi.tools 目录下用make安装了openfst
即:

cd tools
make openfst
1
2
这一步等了真的很久,大概有半小时吧,耐心点。

接着,我重新回到src键入./configure 遇到了和答案博主的相同问题

Checking cub library in ...
***configure failed: Could not find file /cub/cub.cuh:
you may not have installed cub. Go to ../tools/ and type
e.g. 'make cub'; cub is a new requirement. ***
1
2
3
4
然后,我回到kaldi/tools目录下,用ls指令查看当前目录:

根据答案博主的做法,我先删除cub,(删除文件的指令 rm -rf cub-1.8.0.tar.gz)

重新执行extras/check_dependencies.sh,显示OK,


然后执行输入make。

过了一会儿…… All done OK.(这里我Connection timed out了,我猜可能执行命令wget -nv -T 10 -t 3 -O cub-1.8.0.tar.gz
https://github.com/NVlabs/cub/archive/1.8.0.tar.gz;
被墙?)

如果哦总是遇到Connection Timed out可以尝试架t子,我是在win上架了之后用wget工具键入命令获得tar.gz包,然后移动到ubuntu里对应的位置(每次出现timed out记得用rm -rf xxx指令将当前目录下超时创建的空文件删除掉),然后extract到tools目录,再用命令ln -s xxx(名字,去掉版本号)一下。

例如,在我一直出现如下connection timed out时


我在win上用wget工具,并架好t子,然后键入命令

wget -O sph2pipe-2.5.tar.gz https://github.com/burrmill/sph2pipe/archive/2.5.tar.gz
1


下载下来后再拷贝到ubuntu中的tools目录下,解压,ln -s,然后再进行make,就All done OK.了


上面的解决方案感谢:https://blog.csdn.net/weixin_42103947/article/details/119842650

感谢:

基于kaldi和CVTE开源模型的中文识别
[2019.6.21]Ubuntu下Kaldi完整安装步骤以及初步跑通过程
Kaldi安装(ubuntu)
————————————————
版权声明:本文为CSDN博主「Keep828」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Ryan0828/article/details/121179225

标签:Kaldi,kaldi,键入,汇总,编译,tools,安装
From: https://www.cnblogs.com/wcxia1985/p/16748488.html

相关文章

  • #kaldi安装教程
    #kaldi安装教程 https://blog.csdn.net/shengwei_1995/article/details/117248844?ops_request_misc=&request_id=&biz_id=102&utm_term=Configuring%20KALDI%20to%20us......
  • python2与python区别汇总
    目录输入与输出range使用区别字符编码区别输入与输出python2与python3中两个关键字的区别python2中input方法需要用户自己提前指定数据类型写什么类型就是什么类型ra......
  • 机器学习编译、TVM感性理解
    课程主页首先网上有很多关于这个课程的介绍,所以不直接陈述详细内容了,写一些自己的理解,可能不会仅限于当前机器学习编译课程,可能会用到TVM的理解。网上诸多大佬都有阐述,例......
  • C语言第20天,typedef关键词和条件编译
    1.给整型类型取别名原因:我们在整型数据类型中讨论过的,C语言标准并未规定这些数据类型的大小范围,具体的实现交由了编译器和平台决定。也就是说,int在VisualStudio2019中......
  • JS基础笔记汇总
    JS基础笔记最全的汇总javascript介绍以及起源目录1.变量和常量的知识2.基本数据类型3.运算符4.基本数据类型间的转换5.流程控制语句 一、javascript介绍以及起源 js......
  • Pillow常用方法汇总
    打开图片打开一张图片是一个很快的操作,和图片的尺寸以及压缩方式无关,打开的时候只读取文件header来获取文件格式、模式、尺寸等信息fromPILimportImageim=Image.......
  • Windows下编译linux程序. 1. outguess
    outguess编译使用cygwin。运行终端后。进入outguess目录。./configuremake直接报个错checkingwhethermakesets${MAKE}..../configure:eval:line868:unexp......
  • ALV :汇总,分类汇总(小计),排序,过滤
    货铺QQ群号:834508274下面开始干货部分……ALV标准功能汇总,分类汇总,排序,过滤这些功能除了可以直接使用它的标准功能按钮之外,你也可以在程序里设定,让ALV列表第一次显示出来就......
  • 软件开发工具填空汇总
    第三代程序设计语言一般都是(过程化 )语言。进入二十一世纪以来,软件开发工具的发展有两个鲜明的特点,第一个特点是面向网络,另一个特点是(来源软件兴起和运用)。填空题171......
  • kaldi入门-编译安装 https://www.cnblogs.com/parser/p/10036579.html
    kaldi入门-编译安装 1、下载代码gitclone https://github.com/kaldi-asr/...cdkaldi2、编译toolscdtools./extras/check_dependences.shmake-j43、编译cdsrc......