linux離線語音(yin)識別安(an)裝(zhuang)運行(xing)總(zong)結
時間:2018-08-29 來(lai)源:未知
今天我們(men)要來看的(de)是(shi)(shi)linux離(li)線語音識(shi)別的(de)安(an)裝(zhuang)和(he)(he)運行,在開始說(shuo)之前,我想問一(yi)下(xia)(xia),很多人都(dou)玩過小游戲吧,我之前的(de)一(yi)個(ge)朋友自己做了一(yi)個(ge)貪吃(chi)蛇小游戲,然后給他(ta)加上(shang)了語音識(shi)別系(xi)統,更加增添了游戲的(de)趣味,對于(yu)語音識(shi)別系(xi)統可以說(shuo)是(shi)(shi)還是(shi)(shi)很簡單的(de),今天我們(men)就先看看如(ru)何進行linux離(li)線語音識(shi)別的(de)安(an)裝(zhuang)和(he)(he)運行,我親自給你們(men)示(shi)范一(yi)下(xia)(xia)。
我們首先可以在訊飛上下(xia)載(zai)sdk,下(xia)載(zai)完之(zhi)后,要(yao)解析文(wen)件(jian),你(ni)要(yao)分清里(li)面的(de)(de)都是什么意思,文(wen)件(jian)解析玩(wan),會有4個頭(tou)文(wen)件(jian):msp_errors.h msp_types.h qisr.h qtts.h,msp_errors.h msp_types.h為通用數據結構的(de)(de)頭(tou)文(wen)件(jian),qisr.h是語音識別用的(de)(de)頭(tou)文(wen)件(jian),qtts.h是語音合成用的(de)(de)頭(tou)文(wen)件(jian)。這些你(ni)是必須要(yao)了解的(de)(de),不(bu)然怎么開始接下(xia)來的(de)(de)步驟(zou)。

在你下(xia)載的sdk里面是(shi)有步驟的,但(dan)是(shi)也是(shi)要注意一(yi)些問(wen)題的,步驟如下(xia):
1.doc目錄下存放開發文檔等;
2.lib目錄下存放SDK需要調用的(de)動態庫以(yi)及需要引用的(de)頭文(wen)件。
3.example目錄下存放(fang)提供的示例(li)demo,每個(ge)例(li)子下都有Makefile文件,在當前(qian)目錄make即可;
4.bin目(mu)(mu)錄(lu)下存放符(fu)合標準(zhun)的語(yu)音(yin)文(wen)件樣例、配置(zhi)文(wen)件和(he)資(zi)源文(wen)件等,make之后(hou)的example可執行(xing)(xing)程(cheng)序也(ye)會(hui)拷貝至(zhi)此(ci),請在此(ci)目(mu)(mu)錄(lu)下運行(xing)(xing),否(fou)則會(hui)運行(xing)(xing)失敗;
5.prj目錄下提供make腳(jiao)本(ben),可以(yi)快(kuai)速編譯例子。
但是在這個(ge)過程中(zhong)我遇到了一(yi)些問題就(jiu)是報(bao)(bao)錯(cuo)了,這是為什(shen)么(me)(me)呢,他(ta)提示是說(shuo)找不(bu)到 lasound,去看它(ta)的makefile文件,其(qi)中(zhong)需要(yao)這個(ge)庫,所以在這里需要(yao)注意一(yi)點(dian),你(ni)如果(guo)重新(xin)編譯下面這個(ge)庫進去,他(ta)還是會報(bao)(bao)錯(cuo),并且(qie)警(jing)告,這就(jiu)說(shuo)明(ming)創建可能是不(bu)完整的,那么(me)(me)解決方法(fa)就(jiu)是把(ba)之前(qian)創建的“asrdemo.o”刪除,再繼(ji)續編譯,就(jiu)可以成功了。
然后在(zai)bin下生成了(le)"asrdemo"可執行(xing)文件,在(zai)bin目錄(lu)下運行(xing)(./asrdemo)
這樣(yang)就(jiu)運行成(cheng)功了,但是(shi)你會(hui)發現(xian)會(hui)有一堆代碼,那你就(jiu)要(yao)做如下步驟了
1.先要(yao)調用(yong)QISRInit()函數(shu),參數(shu)是(shi)(shi)自己(ji)的(de)appid,每個SDK都是(shi)(shi)注冊才(cai)能(neng)下載(zai)的(de),所以是(shi)(shi)唯一的(de),用(yong)來(lai)區(qu)分用(yong)戶的(de),不同級別的(de)用(yong)戶每天可以使(shi)用(yong)SDK的(de)次數(shu)有(you)限制,畢(bi)竟人(ren)用(yong)的(de)多(duo)了語(yu)音識別的(de)性能(neng)肯定會下降;
2.之(zhi)后就(jiu)是(shi)把GrammarID,輸入輸出的參(can)數(shu)param和調用狀(zhuang)態返回(hui)值ret作為參(can)數(shu)傳(chuan)入QISRSessionBegin()函數(shu)中(zhong)進(jin)行(xing)初始化,返回(hui)值是(shi)sessionID,這個是(shi)后面所(suo)有函數(shu)的主要參(can)數(shu)之(zhi)一;
3.打開自己的音(yin)(yin)頻(pin)文(wen)件,調用QISRAudioWrite()函數(shu)寫入,可以分(fen)段也可以一次,第(di)一個參數(shu)是sessionID,上(shang)面初(chu)始化(hua)函數(shu)返(fan)回的值,第(di)二個參數(shu)是音(yin)(yin)頻(pin)數(shu)據頭指(zhi)針(zhen),第(di)三個參數(shu)是音(yin)(yin)頻(pin)文(wen)件大小,第(di)四個參數(shu)是音(yin)(yin)頻(pin)發(fa)送的狀(zhuang)態,表示發(fa)送完了沒有,剩下兩個是服務器端檢測語音(yin)(yin)狀(zhuang)態和識別狀(zhuang)態的返(fan)回值;
4.調(diao)用(yong)QISRGetResult()函數(shu)(shu)獲(huo)取(qu)識(shi)別的(de)結(jie)果(guo)(guo),第一個參(can)(can)數(shu)(shu)還(huan)是sessionID,第二個參(can)(can)數(shu)(shu)是輸出識(shi)別的(de)狀(zhuang)態,第三(san)個參(can)(can)數(shu)(shu)是與服務器(qi)交互的(de)間隔時間,官方建議5000,我取(qu)為0,第四個參(can)(can)數(shu)(shu)是調(diao)用(yong)狀(zhuang)態返回值(zhi)ret,最后這個函數(shu)(shu)的(de)返回值(zhi)就是上面結(jie)果(guo)(guo)的(de)json數(shu)(shu)據了

你在進行錄(lu)音(yin)(yin)的(de)時候(hou),要使用“ffmpeg”錄(lu)音(yin)(yin),他(ta)是比較(jiao)簡單(dan)的(de),而且還(huan)能滿(man)足要求(qiu)。這樣你的(de)linux離線語音(yin)(yin)識別系統就安裝運(yun)(yun)行好了,就是這么的(de)簡單(dan),但(dan)是也有一些里面(mian)需要注(zhu)意(yi)的(de)東西(xi),就像剛(gang)才碰(peng)到的(de)那些情況一樣,如果再安裝運(yun)(yun)行時還(huan)有其(qi)他(ta)錯誤,可以咨詢哦。

