Kaldi学习手记(三): Kaldi 的I/O机制

本文介绍了Kaldi的I/O机制,包括命令行级的非表格型和表格型I/O,详细阐述了rspecifiers、wspecifiers、archive-file和script-file的使用。在代码级,讨论了Input/Output类、对象(Object)读写以及表格(Table)读写的实现。通过示例展示了如何进行文件和表格数据的读取与写入。
摘要由CSDN通过智能技术生成

一、命令行级 I/O 机制

命令行 I/O 是指在 shell 上调用编译好的 Kaldi 工具的方法。比如,如果想查看音频文件的时长,就可以使用这样的命令
wav-to-duration scp:wav.scp ark,t:-
其中,wav-to-duration 是 Kaldi 中的查看时长的工具,后面两个是参数。下面具体介绍命令行级 Kaldi 的 I/O。

非表格型I/O

非表格型的 I/O 一般比较简单,一般是输入输出只包含一个或两个对象的文件或流(比如,声学模型文件,变换矩阵)。使用方式就是 shell 命令的使用方式。其中值得注意的有:
- Kaldi 采用一种扩展的文件名进行输入输出。读取文件的文件名称为 rxfilename , 写入的文件名称为 wxfilename。
- 在 rxfilename/wxfilename 处采用 “-” 来表示标准输入输出。
- rxfilename/wxfilename 处可以使用管道命令,比如先用gunzip将压缩文件解压,再输入到 Kaldi 程序中,即可在文件输入路径处填入 “gunzip -c foo.gz|”。
- rxfilename/wxfilename 后可以通过 “:” 来描述偏移量,如 “foo:1045” 表示从 foo 文件偏移 1045 个字节开始读取。
- 使用 –binary=true/false 来控制是否使用二进制输出。默认是true。
- 有一组 copy* 命令,可以用来查看文件。如,copy-matrix –binary=false foo.mat -。
- Log 信息和输出会混在一起显示,但是 Log 信息是 stderr 上,所以不会传到管道中。可以通过添加 2>/dev/null 命令,将log信息重定向到 /dev/null。

下面列举一些例子:
echo ‘[ 0 1 ]’ | copy-matrix –binary=false - -
将矩阵 [ 0 1 ] 输入到 copy-matrix 中,再显示出来。亦可以将其表示为
copy-matrix –binary=false ‘echo [ 0 1 ]|’ -

表格型I/O

对于一系列数据的集合,比如对应于每一句话的特征矩阵,或者每一条音频文件对应的路径,Kaldi 采用表格形式的数据表示。表格中,以没有空格的字符串为索引。Kaldi 中,称从表格文件中读取的一个字符串为 rspecifier, 写入表格文件的一个字符串为wspecifier。有两种表格文件格式:archive 和 script 。其读取方式和非表格型数据类似,也是使用 rxfilename/wxfilename的格式,其格式为[options]:path:[offset]。需要在 options 中注明是archive文件还是script文件。例如
wav-to-duration scp:wav.scp ark,t:-

rspecifiers 和 wspecifier

rspecifiers 和 wspecifier 是 Kaldi 中定义的两种术语,是存在于表格文件中的文件名,格式类似于 rxfilename/wxf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值