kaldi - Online Audio Server(服務器客戶端建立方法-舊版在線解碼)

在kaldi 的工具集裏有好幾個程序可以用於在線識別。這些程序都位在src/onlinebin文件夾裏,他們是由src/online文件夾裏的文件編譯而成(你現在可以用make ext 命令進行編譯)。這些程序大多還需要tools文件夾中的portaudio 庫文件支持,portaudio 庫文件可以使用tools文件夾中的相應腳本文件下載安裝。

# 安裝portaudio
yum -y install *alsa*
cd kaldi/tools/
./install_portaudio.sh

# 編譯在線識別工具
cd src/
make ext
或者進入kaldi/src/online和kaldi/src/onlinebin,分別make clean ,make就完美解決

一、服務器客戶端識別系統建立方法

建立整個在線識別系統需要:

  • 準備兩臺機器,都安裝kaldi;
  • 作爲服務器的機器,準備好聲音模型、詞典、解碼網絡、特徵轉換矩陣(我還沒有使用轉換矩陣)
  • 首先啓動服務器,待服務器運行後,再啓動客戶端連接。

1. Command line to start the server(服務器端啓動方式):

使用如下指令online-audio-server-decode-faster啓動服務器:

online-audio-server-decode-faster --verbose=1 --rt-min=0.5 --rt-max=3.0 --max-active=6000 \
--beam=72.0 --acoustic-scale=0.0769 final.mdl graph/HCLG.fst graph/words.txt '1:2:3:4:5' \
graph/word_boundary.int 5010 final.mat

1.1 Arguments are as follow(參數意義):

  • final.mdl - the acoustic model
  • HCLG.fst - the complete FST
  • words.txt - word dictionary (mapping word ids to their textual representation)
  • '1:2:3:4:5' - list of silence phoneme ids
  • 5010 - port the server is listening on
  • word_boundary.int- a list of phoneme boundary information required for word alignemnt
  • final.mat - feature LDA matrix

配置選項:

選項:
   - 聲學尺度:聲學似然的縮放因子(浮點數,默認值= 0.1  --batch-size:無中斷處理的特徵向量數(int,default = 27  --beam:解碼光束。更大 - >更慢,更準確。 (float,默認= 16  --beam-delta:解碼器中使用的增量[模糊設置](浮點數,默認值= 0.5  --beam-update:光束更新率(浮點數,默認值= 0.01  --cmn-window:壯舉數量。運行平均CMN計算中使用的向量(int,默認= 600  --delta-order:delta計算順序(int,default = 2  --delta-window:增量計算的參數控制窗口(每個增量順序的實際窗口大小爲1 + 2 * delta-window-size)(int,default = 2  --hash-ratio:解碼器中用於控制散列行爲的設置(float,default = 2  --inter-utt-sil:觸發新話語的最大靜音幀數(i​​nt,default = 50  --left-context:左上下文的幀數(int,default = 4  --max-active:解碼器最大活動狀態。 Larger->慢;更準確(int,默認= 2147483647  --max-beam-update:最大光束更新率(浮點數,默認值= 0.05  --max-utt-length:如果話語變得比這個幀數長,則可以接受較短的靜音作爲話語分隔符(int,default = 1500  --min-active:解碼器最小活動狀態(如果#active小於此值,則不要修剪)。 (int,默認= 20)
  --min-cmn-window:解碼開始時使用的Minumum CMN窗口(僅在啓動時添加延遲)(int,default = 100  --num-attempts:終止stream之前連續重複超時的次數(int,default = 5  --right-context:正確上下文的幀數(int,default = 4  --rt-max:近似最大解碼運行時間因子(float,default = 0.75  --rt-min:近似最小解碼運行時間因子(浮點數,默認值= 0.7  --update-interval:幀中的波束更新間隔(int,默認= 3
標準選項:
  --config:要讀取的配置文件(此選項可能會重複)(string,default =“”)
  --help:打印出用法消息(bool,default = false  --print-args:打印命令行參數(到stderr)(bool,default = true  --verbose:詳細級別(更高 - >更多日誌記錄)(int,default = 0

注意:如果沒有word_boundary.int 需要重新運行prepare_lang.sh生成。修改如下:

#原指令:
utils/prepare_lang.sh --position-dependent-phones false data/local/dict "<SPOKEN_NOISE>" \
data/local/lang data/lang
#改爲:
utils/prepare_lang.sh data/local/dict "<SPOKEN_NOISE>" data/local/lang data/lang

啓動後結果如下:
這裏寫圖片描述

2. Command line to start the client(客戶端啓動方式):

直接運行如下指令即可啓動客戶端:

 online-audio-client --htk --vtt localhost 5010 scp:test.scp

2.1 Arguments are as follow(參數意義):

  • –htk - save results as an HTK label file
  • –vtt - save results as a WebVTT file
  • localhost - server to connect to
  • 5010 - port to connect to
  • scp:test.scp - list of WAV files to send
    啓動後客戶端不斷傳輸數據,服務器實時進行解碼!結果如下:
    這裏寫圖片描述
    結果是邊傳輸邊識別的:
    這裏寫圖片描述

* Command line to start the Java client(移動客戶端):

移動客戶端我還未嘗試:

java -jar online-audio-client.jar

Or simply double-click the JAR file in the graphical interface.

二、使用麥克風建立客戶端與服務器的實時解碼

kaldi提供了讀取客戶端麥克風數據的解碼工具,可以在客戶端使用麥克風發送音頻,服務器實時返回解碼數據。

1. 使用online-server-gmm-decode-faster啓動服務器:

  • 通過網絡接收特徵進行解碼。話語分詞是即時完成的。如果給出可選(最後)參數,則使用特徵拼接/ LDA變換。 否則默認使用delta / delta-delta(2階)特徵。
Usage: online-server-gmm-decode-faster [options] model-infst-in word-symbol-table silence-phones udp-port [lda-matrix-in]
Example: online-server-gmm-decode-faster --rt-min=0.3 --rt-max=0.5 --max-active=4000 --beam=12.0 --acoustic-scale=0.0769 model HCLG.fst words.txt '1:2:3:4:5' 1234 lda-matrix 

配置選項:

選項:
   - 聲學尺度:聲學似然的縮放因子(浮點數,默認值= 0.1  --batch-size:無中斷處理的特徵向量數(int,default = 27  --beam:解碼光束。更大 - >更慢,更準確。 (float,默認= 16  --beam-delta:解碼器中使用的增量[模糊設置](浮點數,默認值= 0.5  --beam-update:光束更新率(浮點數,默認值= 0.01  --cmn-window:壯舉數量。運行平均CMN計算中使用的向量(int,默認= 600  --delta-order:delta計算順序(int,default = 2  --delta-window:增量計算的參數控制窗口(每個增量順序的實際窗口大小爲1 + 2 * delta-window-size)(int,default = 2  --hash-ratio:解碼器中用於控制散列行爲的設置(float,default = 2  --inter-utt-sil:觸發新話語的最大靜音幀數(i​​nt,default = 50  --left-context:左上下文的幀數(int,default = 4  --max-active:解碼器最大活動狀態。 Larger->慢;更準確(int,默認= 2147483647  --max-beam-update:最大光束更新率(浮點數,默認值= 0.05  --max-utt-length:如果話語變得比這個幀數長,則可以接受較短的靜音作爲話語分隔符(int,default = 1500  --min-active:解碼器最小活動狀態(如果#active小於此值,則不要修剪)。 (int,默認= 20)
  --min-cmn-window:解碼開始時使用的Minumum CMN窗口(僅在啓動時添加延遲)(int,default = 100  --num-attempts:終止stream之前連續重複超時的次數(int,default = 5  --right-context:正確上下文的幀數(int,default = 4  --rt-max:近似最大解碼運行時間因子(float,default = 0.75  --rt-min:近似最小解碼運行時間因子(浮點數,默認值= 0.7  --update-interval:幀中的波束更新間隔(int,默認= 3
標準選項:
  --config:要讀取的配置文件(此選項可能會重複)(string,default =“”)
  --help:打印出用法消息(bool,default = false  --print-args:打印命令行參數(到stderr)(bool,default = true  --verbose:詳細級別(更高 - >更多日誌記錄)(int,default = 0

2. 使用online-net-client啓動客戶端:

  • 通過online-net-client工具,使用麥克風(portaudio)作爲輸入,提取特徵並通過網絡連接發送它們到服務器上。具體設置如下:
Usage: online-net-client server-address server-port 

Options:
  --batch-size                : The number of feature vectors to be extracted and sent in one go (int, default = 27)

Standard options:
  --config                    : Configuration file to read (this option may be repeated) (string, default = "")
  --help                      : Print out usage message (bool, default = false)
  --print-args                : Print the command line arguments (to stderr) (bool, default = true)
  --verbose                   : Verbose level (higher->more logging) (int, default = 0)

引用:kaldi-asr
轉載請註明出處:https://blog.csdn.net/chinatelecom08/article/details/81476698

參考:kaldi首頁

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章