kaldi 源码阅读(一) - 环境搭建

简介: 按照我一贯的做法,来阅读开源代码:1. 编译以及基础功能的测试2. 模块功能划分3. 单一模块解析(添加注释或日志)4. 扩展新demo工程5. 自定义模块及调用文章也会按照上述流程进行开展。

按照我一贯的做法,来阅读开源代码:

1. 编译以及基础功能的测试
2. 模块功能划分
3. 单一模块解析(添加注释或日志)
4. 扩展新demo工程
5. 自定义模块及调用

文章也会按照上述流程进行开展。

进入正题...

一、环境构建

  • 安装必要工具
sudo apt-get install -y git wget libatlas-dev libatlas-base-dev gfortran g++ zlib1g-dev autoconf automake gcc libtool perl subversion
  • 同步代码
git clone https://github.com/kaldi-asr/kaldi.git kaldi
  • kaldi 依赖包

如下工具均在 kaldi/tools 内进行编译安装,详细内容参见 kaldi/tools/Makefile 中的编译文件

- OpenFst                状态机
- IRSTLM                 语言模型工具
- SRILM                    比 IRSTLM 好的语言模型工具
- sph2pipe                将 sph 文件转换为 其他格式比如 wav等。 LDC 数据相关的脚本需要该工具。
- sclite                       打分工具,也可以使用简单程序比如 compute-wer.cc 
- ATLAS                    线代库
- CLAPACK              线代库
- OpenBLAS             线代库

二、编译执行

cd kaldi/tools
# 检查当前系统是否已经安装完所依赖的工具,详细内容参见 kaldi/tools/INSTALL
./extras/check_dependencies.sh
# 安装完所有内容之后执行如下步骤
make; cd ../src; ./configure; make

按上述方式,先安装基础的工具,然后编译 kaldi 基础组件

三、测试

进入 egs/yesno/s5 目录中, 执行如下命令:

run.sh

运行后生产如下日志:

....
fstminimizeencoded 
fstrmsymbols exp/mono0a/graph_tgpr/disambig_tid.int 
fsttablecompose exp/mono0a/graph_tgpr/Ha.fst data/lang_test_tg/tmp/CLG_1_0.fst 
fstdeterminizestar --use-log=true 
fstisstochastic exp/mono0a/graph_tgpr/HCLGa.fst 
0.5342 -0.000482149
HCLGa is not stochastic
add-self-loops --self-loop-scale=0.1 --reorder=true exp/mono0a/final.mdl 
steps/decode.sh --nj 1 --cmd utils/run.pl exp/mono0a/graph_tgpr data/test_yesno exp/mono0a/decode_test_yesno
decode.sh: feature type is delta
steps/diagnostic/analyze_lats.sh --cmd utils/run.pl exp/mono0a/graph_tgpr exp/mono0a/decode_test_yesno
steps/diagnostic/analyze_lats.sh: see stats in exp/mono0a/decode_test_yesno/log/analyze_alignments.log
Overall, lattice depth (10,50,90-percentile)=(1,1,2) and mean=1.2
steps/diagnostic/analyze_lats.sh: see stats in exp/mono0a/decode_test_yesno/log/analyze_lattice_depth_stats.log
local/score.sh --cmd utils/run.pl data/test_yesno exp/mono0a/graph_tgpr exp/mono0a/decode_test_yesno
local/score.sh: scoring with word insertion penalty=0.0,0.5,1.0
%WER 0.00 [ 0 / 232, 0 ins, 0 del, 0 sub ] exp/mono0a/decode_test_yesno/wer_10_0.0
目录
相关文章
|
9月前
|
算法
回溯算法的基本思想
本节介绍回溯算法,通过图1中从A到K的路径查找示例,说明其与穷举法的异同。回溯算法通过“回退”机制高效试探各种路径,适用于决策、优化和枚举问题。
284 0
|
人工智能 Java 程序员
一文彻底搞清楚C语言的函数
本文介绍C语言函数:函数是程序模块化的工具,由函数头和函数体组成,涵盖定义、调用、参数传递及声明等内容。值传递确保实参不受影响,函数声明增强代码可读性。君志所向,一往无前!
617 1
一文彻底搞清楚C语言的函数
|
Android开发 UED 开发者
【Uniapp 专栏】比较 Uniapp 与原生开发的差异与适用场景
【5月更文挑战第15天】UniApp与原生开发各有千秋。UniApp以高效跨平台著称,一套代码覆盖多平台,降低开发成本,适合快速开发简单应用。原生开发则提供优秀性能和用户体验,适合对性能要求高的复杂应用。两者在功能实现和维护上各有优势,开发者需根据项目需求权衡选择。随着技术进步,两者都在不断优化,为移动应用开发带来新机遇。
1158 1
【Uniapp 专栏】比较 Uniapp 与原生开发的差异与适用场景
|
关系型数据库 API 数据库
Python流行orm框架对比
Python中有多个流行的ORM框架,如SQLAlchemy、Django ORM、Peewee、Tortoise ORM、Pony ORM、SQLModel和GINO。每个框架各有特点,适用于不同的项目需求。SQLAlchemy功能强大且灵活,适合复杂项目;Django ORM与Django框架无缝集成,易用性强;Peewee轻量级且简单,适合小型项目;Tortoise ORM专为异步框架设计;Pony ORM查询语法直观;SQLModel结合Pydantic,适合FastAPI;GINO则适合异步环境开发。初学者推荐使用Django ORM或Peewee,因其易学易用。
2596 4
|
NoSQL Java Redis
Redis6入门到实战------ 八、Redis与Spring Boot整合
这篇文章详细介绍了如何在Spring Boot项目中整合Redis,包括在`pom.xml`中添加依赖、配置`application.properties`文件、创建配置类以及编写测试类来验证Redis的连接和基本操作。
Redis6入门到实战------ 八、Redis与Spring Boot整合
|
数据可视化 前端开发 数据安全/隐私保护
Streamlit快速构建数据应用程序
【10月更文挑战第21天】Streamlit 是一个开源的 Python 库,用于快速构建数据应用程序。它简化了数据可视化的开发过程,允许用户通过简单的 Python 脚本创建交互式应用,而无需编写复杂的前端代码。本文介绍了 Streamlit 的基本概念、安装方法、示例应用的创建、扩展功能及部署方法,展示了其在 Python 可视化领域的潜力和优势。
|
存储 IDE Java
IntelliJ IDEA 安装及配置详细教程
IntelliJ IDEA 安装及配置详细教程
1918 0
h5+JavaScript实现一个倒计时功能
h5+JavaScript实现一个倒计时功能
|
Java 数据库连接 数据库
【Spring AOP + 自定义注解 + 动态数据源 实现主从库切换&读写分离】—— 案例实战(中)
【Spring AOP + 自定义注解 + 动态数据源 实现主从库切换&读写分离】—— 案例实战(中)
848 0
|
网络协议 内存技术
音视频系列五:ffmpeg之rtmp推流阿里云转发vlc拉流播放
在前两篇 阿里云服务器搭建Nginx+rtmp推流服务器中,我们已经配置把阿里云的rtmp推流服务搭建好了,用的是PC软件OBS来进行推流到阿里云服务器,接下来就用雷神的最简单的基于ffmpeg的推流器,rtmp方式推流,阿里云服务器转发流,VLC拉流的流程走一遍。
1523 0
音视频系列五:ffmpeg之rtmp推流阿里云转发vlc拉流播放

热门文章

最新文章