想向師兄學習使用HMM的使用,
HMM 有HTK 的這個實現平臺,包含很多有用的工具,看起來相當強大。
HTK 的下載地址(需要註冊)
http://htk.eng.cam.ac.uk/download.shtml
還有HTK 手冊什麼的
配置環境:
gcc 4.8.2
ubuntu 14.04 x64
可能還有一些庫,曾經安裝過了
下載好了 HTK-3.4.1.tar.gz
先解壓:
cd HTK_directory
tar -xf HTK-3.4.1.tar.gz -C your_destination_directory
解壓完成了,看手冊說明需要:
./configure
make all
sudo make install
這裏安裝到了默認路徑 /usr/local/bin,如果需要修改,在configure時增加-prefix
./configure -prefix=your_direcotry
本應該一帆風順的,這時出現了錯誤:
/usr/include/features.h:374:25: fatal error: sys/cdefs.h: 沒有那個文件或目錄
sudo apt-get install libc6-dev
sudo apt-get install libc6-dev:i386
其中第二行是爲了以防萬一(果然就是這個問題呀!)。
然而出了一個問題,萬惡的163源
W: Failed to fetch gzip:/var/lib/apt/lists/partial/us.archive.ubuntu.com_ubuntu_dists_natty_main_source_Sources Hash Sum mismatch,
E: Some index files failed to download. They have been ignored, or old ones used instead.
需要刪除已經有的list信息
sudo rm -r /var/lib/apt/lists/*
sudo apt-get update
然後把源換成aliyun的了,阿里雲啦~
阿阿阿阿,結果C編譯器不見啦!!見鬼啦!
只好又重裝gcc
這樣一來,終於可以裝
sudo apt-get install libc6-dev:i386
裝完之後
./configure
make all
又出錯了啊,出錯了啊,摔!!!!!
/usr/bin/ld: cannot find -lX11
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
我還有什麼話可說呢,我懂得linux之所以沒人使用的緣由了,
目測又是缺庫了,缺什麼呢?讓我們來問谷哥吧
PS:其實目測就能看到了 incompatible libgcc.a
這是嘛呢!這是嘛呢!
回顧一下,我安裝的是64位系統,什麼時候gcc會不對頭了呢?當然是安裝了32位(i386)的庫。。。。。。
是不是我剛纔裝的。。。
sudo apt-get install libc6-dev:i386
就是這個吧,我猜就是這個吧,肯定是這個啊啊啊啊啊!名字這麼像
然而卸載這個包並不能編譯,又回到了上上上個錯誤
查看configure文件,原來我的電腦被識別爲x86_64_linux了,能改成linux嗎。。。。
當然不行啦當然不行啦當然不行啦
那怎麼辦呢,我又把i386包裝回來了,重新configure, make all
/usr/bin/ld: cannot find -lX11
然而仍然是這個錯誤,鏈接錯誤
參考:http://eminzhang.blog.51cto.com/5292425/1285705
我來試試吧!!
經過我一番思考(其實電腦已經安裝了libx11-dev)
我認爲這個configure最後給我編成了32位的HTK(我我我一點都不想這樣呀!!!)
大概仍然是缺少了x11 32位的!!!!
sudo apt-get install libx11-dev:i386
--------------------------------------------------------
終於可以編譯、鏈接啦!
總結需要的庫
sudo apt-get install libx11-dev:i386
sudo apt-get install libc6-dev:i386
我想是因爲configure時,認爲我的電腦是x86_64的,所以默認選擇了32位編譯
在configure文件中,gcc包含了-m32的選項足以證明這點(如果去掉了似乎難以編譯)
接下來就是一帆風順了
make all
sudo make install
另外需要額外安裝一個HDencode,這個包的下載地址爲
http://htk.eng.cam.ac.uk/ftp/software/hdecode/HDecode-3.4.1.tar.gz
使用tar解壓可以看到內部內容實際上是htk目錄下的一部分
把它拷到對應的目錄下
即可在HTK目錄下繼續執行
make hdencode
sudo make install hdencode
------------------------------------
測試,
下載HTK-samples-3.4.1.tar.gz
解壓得到samples文件夾
進入samples\HTKDemo\
執行
mkdir hmms
mkdir hmms/{tmp,hmm.{0,1,2,3}} proto acc test
./runDemo ./configs/monPlainM1S1.dcf
如果出現
====================== HTK Results Analysis =======================
Date: Thu Jun 18 22:43:11 2015
Ref : labels/bcplabs/mon
Rec : test/te1.rec
: test/te2.rec
: test/te3.rec
------------------------ Overall Results --------------------------
SENT: %Correct=0.00 [H=0, S=3, N=3]
WORD: %Corr=63.91, Acc=59.40 [H=85, D=35, S=13, I=6, N=133]
===================================================================
這是結果的最後幾行,應該就說明安裝成功啦