2017-09-24 1 views
1

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!

+0

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

Répondre

1

le problème que je vois de cette ligne

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

est que vous n'avez pas ajouté les outils de Kaldi dans votre chemin. Vérifiez le chemin du fichier. sh et voir si les répertoires qu'il ajoute à votre chemin sont corrects (parce qu'il a ../../ .. à l'intérieur et il peut ne pas correspondre à la configuration de votre dossier actuel)

Comme pour le script perl, il compte les échantillons du fichier son, puis il divise avec le taux d'échantillonnage afin d'obtenir la durée. Ne vous inquiétez pas du mot 'wav', vos fichiers peuvent être dans un autre format, c'est juste le nom des fonctions kaldi.