1 前言
本文使用 TIMIT 语料库, 参考 aishell 使用 x-vector 进行说话人识别, 现有的资料都是 i-vector.
本文参考了很多资料, 如果想要了解如何使用TIMIT和ivector进行说话人识别,那么建议从 https://github.com/lr2582858/kaldi-timit-sre-ivector 中学习, 本文也是基于该仓库进行的改善.
本文使用的代码提供在github: https://github.com/ranley123/Kaldi-TIMIT-XVector-Speaker-Recognition
2 数据准备
2.1 下载数据集 TIMIT
网址: http://academictorrents.com/details/34e2b78745138186976cbc27939b1b34d18bd5b3/tech&hit=1&filelist=1
下载torrent种子文件,然后解压一共大概440M.
2.2 准备wav文件
运行:
python preprocess.py
解读:
在数据中,有很多不同的文件夹, 为了更容易地观察,我们将他们改成 SPK0001 等数字, TRAIN中一共有462个,即SPK0462.
每一个文件夹中除了wav文件外,也有比如 .TXT等其他文件,因为我们是说话人识别,所以不需要,删除其他文件,只保留wav文件.
接下来, 针对每一个SPK 文件夹,我们修改wav的名称,变成 SPK0001W01.WAV 等结构化的格式. 最终得到的文件结构如下:
2.3 转换wav文件
因为TIMIT中的wav文件不是真正的wav文件, 当你使用visual studio code打开的时候,会有NIST的开头字样,这样的wav文件不能够提取出mfcc特征,所以进行一个转换.
我们可以使用sph2pipe进行转换,格式为 ./sph2pipe test.wav test.wav
. kaldi/tools 中提供了 sph2pipe的工具包,具体使用可以bing或者google一下,比较简单.
或者是使用sox, sox test.wav new_test.wav
. 注意sox里面不能够使用相同的文件名进行override.
3 运行 ./run.sh
./run.sh
建议一步一步分开运行,有助于学习。