1. 程式人生 > >KALDI之aishell模型說話人識別之V1

KALDI之aishell模型說話人識別之V1

1.首先,成功安裝kaldi在伺服器上,用git clone那種方式安裝(和在本地Unbuntu烏班圖環境安裝沒區別)。

2資料準備部分

然後進入目錄cd egs/aishell/V1

2.1首先改cmd的配置:

vim cmd.sh
  • 1

改為:

export train_cmd=run.pl         #"queue.pl --mem 2G"

:wq儲存後。

2.2輸入:

vim run.sh

看見data=/export/a05/xna/data改成想存放語料的路徑,返回後,新建對應的資料夾。

下載並解壓aishell 178小時語料庫到相應的路徑{

一、資料準備 1、首先在根目錄下建立路徑:/export/a05/xna/data然後下載資料集。這裡下載資料集要在run.sh前面加sudo命令,這是路徑的緣故。下載資料集用到的指令碼是local/download_and_untar.sh 需要下載兩個資料檔案:data_aishell 和 resource_aishell.  2、資料準備階段執行指令碼:local/aishell_data_prep.sh 執行指令碼後會產生 以下檔案:

}

3.在v1目錄下的run.sh有個資料準備的指令碼 

# Data Preparation local/aishell_data_prep.sh $data/data_aishell/wav $data/data_aishell/transcript

根據這個提示直接進入local  

cd local

然後開啟  vim aishell_data_prep.sh (你注意下這個指令碼要求的路徑  和生成檔案的路徑就ok了)

生成檔案的路徑:

{train_dir=data/local/train dev_dir=data/local/dev test_dir=data/local/test}

然後執行aishell_data_prep.sh(注意此時目錄在local下,直接執行./aishell_data_prep.sh會報錯《

./aishell_data_prep.sh: line 6: ./path.sh: No such file or directory

》沒有這樣的檔案或者目錄,aishell_data_prep.sh第6行提示,那麼退出當前目錄cd .. /  ,然後在執行./aishell_data_prep.sh)

然後又會報錯

Usage: ./local/aishell_data_prep.sh <audio-path> <text-path>
 ./local/aishell_data_prep.sh /mnt/md1/voiceprint/data/data_aishell/wav /mnt/md1/voiceprint/data/data_aishell/transcript

重新開啟aishell_data_prep.sh找到錯誤(執行aishell_data_prep.sh檔案時候沒有傳遞引數(即路徑變數wav和transcript))

然後重新執行aishell_data_prep.sh

./local/aishell_data_prep.sh  /mnt/md1/voiceprint/data/data_aishell/transcript   /mnt/md1/voiceprint/data/data_aishell/wav

然後沒反應 ,然後內心狂妄煩躁,最後發現wav和transcript路徑變數的位置傳遞反了,一定要按著aishell_data_prep.sh檔案裡面變數位置引數來傳遞執行。正確執行在v1目錄下如下:

./local/aishell_data_prep.sh /mnt/md1/voiceprint/data/data_aishell/wav  /mnt/md1/voiceprint/data/data_aishell/transcript   

然後會提示

data_aishell/transcript
Preparing mnt/md1/voiceprint/data/local/train transcriptions
Preparing mnt/md1/voiceprint/data/local/test transcriptions
./local/aishell_data_prep.sh: AISHELL data preparation succeeded

這就是所謂的資料準備部分完成了,生成所謂的spk2utt:檔案,可以在cd kaldi-trunk/egs/aishell/v1/data/train目錄下vim  spk2utt檢視它。

然後在/kaldi-trunk/egs/aishell/v1$ 目錄下執行vim run.sh

註釋掉#資料準備部分

# Data Preparation
local/aishell_data_prep.sh $data/data_aishell/wav $data/data_aishell/transcript

3.特徵提取

然後目錄切換到V1下,即

cd kaldi-trunk/egs/aishell/v1
#開啟V1頂層run.sh
 vim run.sh
然後看特徵提取的提示部分,如下
mfccdir=mfcc
for x in train test; do
   #重點還是進入steps目錄下,根據make_mfcc.sh指令碼提示生成相應的檔案
  steps/make_mfcc.sh --cmd "$train_cmd" --nj 10 data/$x exp/make_mfcc/$x $mfccdir
  sid/compute_vad_decision.sh --nj 10 --cmd "$train_cmd" data/$x exp/make_mfcc/$x $mfccdir
  utils/fix_data_dir.sh data/$x
done

然後  cs steps,然後執行vim make_mfcc.sh,開啟後如下

看上面圖中的程式碼 echo "e.g.: $0 data/train exp/make_mfcc/train mfcc"照著這個格式準備三個檔案,最後那兩個應該是輸出資料夾。後面兩個是輸出目錄,你可以不用準備,它會自動幫你生成。

接下來你需要寫這三個 1、data/train  2、exp/make_mfcc/train  3、mfcc

在kaldi-trunk/egs/aishell/v1/data下能檢視到train,就說明已有data/train了。再接著開啟train顯示如下:

然後執行

./make_mfcc.sh data/train exp/make_mfcc/train mfcc

會報錯

./make_ data/train exp/make_mfcc/train mfcc ./make_: line 19: parse_: No such file or directory

開啟make_第19行如下

然後退出執行下面程式碼

. ./cmd.sh
. ./path.sh
. utils/parse_options.sh || exit 1;

注意.和.之間的空格

然後我就這樣被拒絕了-bash: ./cmd.sh: Permission denied

然後加許可權

chmod 755 cmd.sh path.sh chmod 755   || exit 1;

加完許可權接著執行

. ./cmd.sh
. ./path.sh
. utils/parse_options.sh || exit 1;

再次執行./step/make_mfcc.sh

那又是一頓暴躁啊,注意圖上程式碼的位置,變數傳參又給狗吃了!!!!!

根據make_mfcc.sh檔案裡面的第23行 echo "e.g.: $0 data/train exp/make_mfcc/train mfcc"

在/mnt/md1/voiceprint/kaldi-trunk/egs/aishell/v1$目錄下執行

./steps/make_mfcc.sh data/train exp/make_mfcc/train mfcc

./steps/make_mfcc.sh data/train exp/make_mfcc/train mfcc

然後特徵提取這部分成功提示如下: