Kaldi librispeech数据准备错误

时间:2017-09-24 20:56:48

标签: bash perl kaldi

我正在尝试做ASR系统。我使用kaldi手册和librispeech语料库。 在数据准备步骤中,我收到此错误

utils/data/get_utt2dur.sh: segments file does not exist so getting durations 
from wave files 
utils/data/get_utt2dur.sh: could not get utterance lengths from sphere-file 
headers, using wav-to-duration
utils/data/get_utt2dur.sh: line 99: wav-to-duration: command not found

这里是发生此错误的代码段

if cat $data/wav.scp | perl -e '
    while (<>) { s/\|\s*$/ |/;  # make sure final | is preceded by space.

        @A = split;
        if (!($#A == 5 && $A[1] =~ m/sph2pipe$/ &&
                          $A[2] eq "-f" && $A[3] eq "wav" && $A[5] eq "|")) { exit (1); }

        $utt = $A[0]; $sphere_file = $A[4];
        if (!open(F, "<$sphere_file")) { die "Error opening sphere file $sphere_file"; }
            $sample_rate = -1;  $sample_count = -1;
            for ($n = 0; $n <= 30; $n++) {
                $line = <F>;
                if ($line =~ m/sample_rate -i (\d+)/) { $sample_rate = $1; }
                if ($line =~ m/sample_count -i (\d+)/) { $sample_count = $1; 
            }
            if ($line =~ m/end_head/) { break; }
         }
         close(F);
         if ($sample_rate == -1 || $sample_count == -1) {
             die "could not parse sphere header from $sphere_file";
         }
         $duration = $sample_count * 1.0 / $sample_rate;
         print "$utt $duration\n";
} ' > $data/utt2dur; then
echo "$0: successfully obtained utterance lengths from sphere-file headers"
    else
        echo "$0: could not get utterance lengths from sphere-file headers, 
using wav-to-duration"
    if command -v wav-to-duration >/dev/null; then
        echo  "$0: wav-to-duration is not on your path"
        exit 1;
    fi

在文件wav.scp中我有这样的行:

6295-64301-0002 flac -c -d -s /home/tinin/kaldi/egs/librispeech/s5/LibriSpeech/dev-clean/6295/64301/6295-64301-0002.flac |

在这个数据集中,我只有flac文件(通过提供的脚本下载),我不明白为什么我们搜索 wav-files ?以及如何正确运行数据准备(我没有更改本手册中的源代码。

另外,如果您向我解释此代码中发生了什么,那么我将非常感谢您,因为我不熟悉bash和perl。

非常感谢你!

1 个答案:

答案 0 :(得分:1)

我从这一行看到的问题

utils/data/get_utt2dur.sh: line 99: wav-to-duration: command not found

您没有在路径中添加kaldi工具。 检查文件path.sh并查看它添加到您的路径的目录是否正确(因为它内部有../../ ..它可能与您当前的文件夹设置不匹配)

对于perl脚本,它计算声音文件的样本,然后除以采样率以获得持续时间。不要担心'wav'这个词,你的文件可能是另一种格式,它只是kaldi函数的名称。