其他分享
首页 > 其他分享> > kaldi例子thchs30笔记(二)

kaldi例子thchs30笔记(二)

作者:互联网

数据准备

由于我们已经下载过数据了,直接进行数据准备。

根据注释,我们知道,数据准备就是要产生四个文件分别是text,wav.scp,utt2spk,spk2utt

(1)text:音频标注

(2)wav.scp:指定音频路径

(3)utt2spk:音频对应的说话人信息

(4)spk2utt:说话人对应的音频信息

打开s5/local/thchs-30_data_prep.sh

mkdir -p data/{train,dev,test}

在data文件夹下创建三个文件夹分别是train、dev、test用来存储数据。

for x in train dev test; do
  echo "cleaning data/$x"
  cd $dir/data/$x
  rm -rf wav.scp utt2spk spk2utt word.txt phone.txt text
  echo "preparing scps and text in data/$x"

首先判断在这三个文件夹中是否有数据,如果有,进入文件,将其删除。然后重新进行数据准备,这里说的数据是已经处理好的上边的四个数据文件text、wav.scp、utt2spk、spk2utt。

for nn in `find  $corpus_dir/$x -name "*.wav" | sort -u | xargs -I {} basename {} .wav`; do

 

      spkid=`echo $nn | awk -F"_" '{print "" $1}'`
      spk_char=`echo $spkid | sed 's/\([A-Z]\).*/\1/'`
      spk_num=`echo $spkid | sed 's/[A-Z]\([0-9]\)/\1/'`
      spkid=$(printf '%s%.2d' "$spk_char" "$spk_num")
      utt_num=`echo $nn | awk -F"_" '{print $2}'`
      uttid=$(printf '%s%.2d_%.3d' "$spk_char" "$spk_num" "$utt_num")

对于类似于 A11_0 这样的文件,以 “_” 区分开,会分成两个部分, A11和0,spkid读取A11,也就是说话人的id。在spkid中读取A-Z的字母片段和0-9的数字片段,对于A11, spk_char=“A”, spk_num=“11”,最后一行读取的是某个说话人说的第几句话的索引。

     echo $uttid $corpus_dir/$x/$nn.wav >> wav.scp
      echo $uttid $spkid >> utt2spk
      echo $uttid `sed -n 1p $corpus_dir/data/$nn.wav.trn` >> word.txt
      echo $uttid `sed -n 3p $corpus_dir/data/$nn.wav.trn` >> phone.txt

以上几句是将读取的文件名 文件的绝对路径写到wav.scp,每句话对应的说话人写到 utt2spk,对应的word和phone写到对应的文本中。

参考:https://blog.csdn.net/weixin_37767223/article/details/83152832?ops_request_misc=&request_id=&biz_id=102&utm_term=data_prep.sh&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-8-83152832.first_rank_v2_pc_rank_v29_10

标签:utt2spk,spkid,kaldi,笔记,echo,thchs30,spk,wav,data
来源: https://blog.csdn.net/weixin_43587572/article/details/114634955