J'essaie de faire le système ASR. Im en utilisant kaldi manuel et librispeech corpus. Dans l'étape de préparation des données que je reçois cette erreurKaldi librispeech erreur de préparation de données
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
Et voici le morceau de code où cette erreur occures
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
Dans le fichier wav.scp je suis arrivé ces lignes:
6295-64301-0002 flac -c -d -s /home/tinin/kaldi/egs/librispeech/s5/LibriSpeech/dev-clean/6295/64301/6295-64301-0002.flac |
Dans cet ensemble de données j'ai seulement des fichiers flac (ils ont téléchargé via le script fourni) et je ne comprends pas pourquoi nous cherchons wav-fichiers? Et comment exécuter la préparation des données correctement (je n'ai pas changé le code source dans ce manuel
Aussi, si vous m'expliquez ce qui se passe dans ce code, alors je vous serai très reconnaissant, parce que je ne suis pas familier avec bash et perl.
Merci beaucoup!
Pour que perl fasse des choses, il doit avoir le fichier '$ data/wav.scp' présent. Actuellement, il sort la partie else, et échoue comme 'wav-to-duration' n'est pas trouvé. – bytepusher