袁瑞臨++張棲銘++王峰++范凡
摘要:為了對豬只異常狀態(tài)進行檢測,本文設計了一種基于嵌入式平臺的豬只聲音識別系統(tǒng),該系統(tǒng)以S3C2440芯片為微處理器,以Linux為操作系統(tǒng),以QT為顯示界面,并通過移植基于隱馬爾科夫模型算法的語音識別工具箱HTK,實現(xiàn)了自動識別豬只不同狀態(tài)的聲音。經(jīng)過實驗驗證表明,本系統(tǒng)達到了預期的實驗效果。
關鍵詞:聲音識別;S3C2440; 隱馬爾科夫模型;HTK; 嵌入式
中圖分類號:TP391 文獻標識碼:A 文章編號:1009-3044(2017)04-0186-03
The Design of Embedded Voice Recognition System Based on HTK in Pigs
YUAN Rui-lin ,ZHANG Qi-ming,WANG Feng,F(xiàn)AN Fan
(1.College of Information Engineering, Taiyuan University of Technology, Jinzhong 030600,China)
Abstract: In order to detect the abnormal state of pigs, this paper designs a pig voice recognition system based on embedded platform, the system uses S3C2440 chip microprocessor, the Linux operating system, using QT as the display interface, and through transplantation based on Hidden Markov model algorithm for speech recognition toolbox HTK, realizes the automatic identification of pigs in different states sound. The experimental results show that the system achieves the desired experimental results.
Key words: voice recognition; S3C2440; HMM; HTK; embedded
現(xiàn)代集約化的養(yǎng)豬場規(guī)模越來越大,自動化和無人值守的水平日益提高,對豬場的狀態(tài)監(jiān)測提出了很高的要求,而豬的聲音信息可以很好地反映豬的狀態(tài),為飼養(yǎng)員判斷豬只的狀態(tài)提供參考。聲音識別作為模式識別的重要研究內(nèi)容,近二十年來發(fā)展迅速,語音技術的應用已經(jīng)成為一個具有競爭性的新興高技術產(chǎn)業(yè)。隨著計算機技術與電子技術的發(fā)展,嵌入式系統(tǒng)的應用領域越來越廣,基于嵌入式平臺的聲音識別技術發(fā)展備受關注。由英國劍橋大學工程系開發(fā)的、由眾多函數(shù)庫和工具組成的聲音識別工具箱HTK(Hidden Markov Model Toolkit),經(jīng)過不斷地發(fā)展和改進,得到了廣泛使用,在嵌入式平臺上移植開源的HTK可以縮短開發(fā)周期,節(jié)約成本。本文主要介紹了一種通過移植HTK應用于檢測和識別豬只不同狀態(tài)聲音的嵌入式系統(tǒng)實現(xiàn)的整個過程。
1 實現(xiàn)原理
1.1 聲音識別基本原理
關于豬只聲音識別的算法,我們主要采用目前在聲音信號處理的各個領域使用最為廣泛的隱馬爾可夫模型(HMM)算法。HMM算法是一種屬于模板匹配類型的模式識別方法,即按照一定的相似度測度準則,使未知的聲音模型與參考模型庫作比較,以最大輸出概率的一個模型作為識別結(jié)果。
在語音識別系統(tǒng)設計中,將每一種豬只狀態(tài)作為一個基本元,并建立對應的HMM。HMM是一個輸出符號序列的雙重隨機過程,假設具有N種狀態(tài)S1,S2,S2,…,SN,在一定時間從某一個狀態(tài)轉(zhuǎn)移到另一個狀態(tài)并且會輸出一個符號序列。狀態(tài)轉(zhuǎn)移結(jié)果由初始狀態(tài)概率π和狀態(tài)轉(zhuǎn)移概率矩陣A決定,輸出的符號序列由觀察值概率矩陣B決定。
在本文中,我們設定了具有6個轉(zhuǎn)移狀態(tài)的HMM模型,如圖1所示。其中,S1和S6分別稱為開始狀態(tài)和結(jié)束狀態(tài),它們無觀察函數(shù),稱為非發(fā)散狀態(tài);S2至S5這4個狀態(tài)稱為活動狀態(tài)。HMM的狀態(tài)轉(zhuǎn)換圖如下所示,其中aij為從狀態(tài)i到狀態(tài)j的轉(zhuǎn)移概率,bi為狀態(tài)i轉(zhuǎn)移時的輸出概率。
1.2 硬件組成
本嵌入式系統(tǒng)硬件采用Samsung公司推出的S3C2440芯片為核心,它是基于ARM920T的32位RISC微處理器,其主頻為400MHZ,并且具有低功耗、高性能、高集成度等優(yōu)點。豬只聲音通過麥克風聲音傳感器采集回來,再經(jīng)過數(shù)字音頻編譯碼器進行處理。嵌入式音頻系統(tǒng)的CODEC采用Philips公司生產(chǎn)的UDA1341芯片,它提供標準的IIS接口,可與S3C2440內(nèi)置的IIS接口直接相連。音頻驅(qū)動程序采用ALSA體系,由它提供的音頻編程API接口,可以對聲卡進行控制,設置采樣頻率、聲道數(shù)目等參數(shù),并完成對聲卡的讀出數(shù)據(jù)及寫入數(shù)據(jù)等操作。系統(tǒng)的其他模塊還有64M的SDRAM、256M的Nand Flash、MIC輸入接口、耳機輸出接口、電源模塊等。
圖 2 硬件結(jié)構圖
1.3 軟件設計
在軟件設計部分,首先采用自行編寫的錄音程序?qū)⒇i只聲音保存為WAVE波形文件格式。再利用HTK所提供的數(shù)據(jù)準備工具、HMM模型訓練工具、識別工具和結(jié)果分析工具來實現(xiàn)豬只聲音信號的特征提取、訓練、識別等過程。軟件結(jié)構如下圖所示:
圖 3 軟件設計結(jié)構圖
2 嵌入式系統(tǒng)設計
以Linux為內(nèi)核的嵌入式操作系統(tǒng)的設計,分為引導程序Bootloader的移植、內(nèi)核的移植、文件系統(tǒng)(包含應用程序)的移植三大部分。本設計中Bootloader采用開發(fā)板自帶的Uboot,故本文重點介紹內(nèi)核的移植及文件系統(tǒng)和應用程序的移植。
2.1 交叉編譯平臺搭建
2.1.1 交叉編譯簡介
由于嵌入式平臺處理能力及存儲空間等資源的限制,需要在PC上利用交叉編譯工具鏈對需要下載到ARM平臺的文件進行交叉編譯。本設計以ARM-Linux平臺作為運行環(huán)境,故所選交叉編譯工具鏈為arm-linux-gcc。
2.1.2 交叉編譯工具安裝過程
在PC主機上安裝交叉編譯工具鏈的主要步驟為:
① 下載交叉編譯工具鏈arm-linux-gcc-4.3.2.tgz,并在/usr/local下建立arm文件夾:#mkdir /usr/local/arm。
② 將文件解壓縮:#tar xzvf arm-linux-gcc-4.3.2.tgz -C /usr/local/arm。
③ 添加環(huán)境變量,在profile文件中添加:export PATH=/usr/local/arm/4.3.2/bin:$PATH。
2.2 內(nèi)核的移植
2.2.1 內(nèi)核簡介
內(nèi)核是嵌入式操作系統(tǒng)的核心,內(nèi)核主要由進程調(diào)度、內(nèi)存管理、虛擬文件系統(tǒng)、網(wǎng)絡接口和通訊進程等組成。Linux內(nèi)核具有代碼開源、體積小、效率高、易裁剪等優(yōu)點。本文中我們采用嵌入式Linux 2.6.31版本內(nèi)核作為移植對象,并結(jié)合聲音識別平臺硬件的需要進行相應的配置。
2.2.2 內(nèi)核安裝過程
內(nèi)核移植的主要步驟為:
①在官網(wǎng)上下載linux-2.6.31.tar.bz2內(nèi)核源碼。
②修改編譯配置文件Makefile,指定系統(tǒng)硬件框架及交叉編譯工具:
ARCH ? = arm
CROSS_COMPILE ?= arm-linux-
③在PC上Linux操作系統(tǒng)下進入圖4所示的圖形化配置界面,打開S3C2440的默認配置文件后,再進入"System Type"選項單,配置選中以下幾項:
2.3 文件系統(tǒng)的設計
文件系統(tǒng)是操作系統(tǒng)的重要組成部分, Linux文件系統(tǒng)具有一些固定格式和功能的目錄。文件系統(tǒng)制作的主要過程是創(chuàng)建系統(tǒng)的各個目錄以及在這些目錄下添加各種文件,由于創(chuàng)建目錄部分無特別之處,故在下文中我們重點介紹在文件系統(tǒng)中如何添加本設計中所需要的應用程序。
2.3.1 HTK的編譯
由于嵌入式平臺資源的限制,在ARM平臺主要完成豬只聲音的識別工作,而聲音模型的建立,即訓練過程需要在PC平臺完成。因此整個系統(tǒng)搭建分為PC平臺和ARM平臺兩大部分。由于針對于宿主機的編譯過程和針對ARM-Linux平臺的類似,這里只介紹過程相對復雜的交叉編譯過程,主要步驟如下:
①在HTK官網(wǎng):http://htk.eng.cam.ac.uk/download.shtml下載HTK-3.4.1.tar.gz源碼包。
②Linux下運行解壓后文件夾下configure程序,生成Makefile文件:
./configure - prefix=/home/yrl/HTK1。
③修改源碼包下HTKLib文件夾中的編譯配置Makefile文件使其針對ARM平臺,并移除一些嵌入式平臺不需要的庫文件,修改如下:
CC = gcc
CFLAGS := $(CFLAGS) -ansi -D_SVID_SOURCE -DOSS_AUDIO -D'ARCH="i686"' -Wall -Wno-switch -g -O2 -
RANLIB = ranlib
objects = HGraf.o esig_asc.o \
lvobjects = $(basename HGraf.o).lv.o esig_asc.lv.o \
修改為:
CC = arm-linux-gcc
CFLAGS := $(CFLAGS) -ansi -D_SVID_SOURCE -DOSS_AUDIO -D'ARCH="arm"' -Wall -Wno-switch -g -O2 -
RANLIB =arm-linux-ranlib
objects = esig_asc.o \
lvobjects = esig_asc.lv.o \
修改完成后保存,運行:make。
④與第③步類似,修改HTKTools文件夾下的Makefile文件,修改完保存退出。
Linux下運行:make
make install。
⑤編譯完成后,將在HTKTools文件夾下生成所有可執(zhí)行程序中的用于提取MFCC特征的工具HCopy和用于識別的工具HVite添加到文件系統(tǒng)的/usr/bin目錄下即可。
2.3.2 HTK的應用
在采集豬只聲音后,使用HTK所提供的與聲音識別相關的工具集構建系統(tǒng)時,根據(jù)圖3中所示的軟件工具完成聲音數(shù)據(jù)的標記并提取MFCC特征,使用基于前向后向算法的工具HInit和Hcompv及基于Baum-Welch算法的HRest完成聲學模型的訓練。在識別時,使用HVite將提取好的測試數(shù)據(jù)的MFCC特征與聲學模型比較,得出識別結(jié)果。構建好豬只聲音系統(tǒng)后,利用HResults對本系統(tǒng)進行性能評估,可得到測評結(jié)果及相關信息。
2.3.3 QT程序的設計
為了便于在ARM上顯示結(jié)果并且方便測試,我們設計了Qt程序,并將編寫好的程序利用Qt Embedded編譯器編譯成ARM-Linux平臺的可執(zhí)行程序,添加到文件系統(tǒng)中。在Qt程序中,嵌入編譯好的聲音識別可執(zhí)行程序,同時為了方便單次測試,在界面中加入了QPushButton部件,當按鈕被點擊時,根據(jù)設計的“信號與槽”機制便會觸發(fā)聲音采集程序,進行識別。進行一次測試后,Qt識別界面如下圖所示:
3 結(jié)束語
本設計通過移植較為成熟的開源工具箱HTK,并且合理地進行軟硬件裁剪,成功實現(xiàn)了豬只異常聲音在嵌入式平臺的檢測和識別。經(jīng)過實驗驗證,準確率和處理速度均較為理想,具有很好的推廣價值。
參考文獻:
[1] 韋東山. 嵌入式 Linux應用開發(fā)完全手冊[M].北京: 人民郵電出版社,2008.
[2] 張懿. 構造廉價的ARM9開發(fā)平臺[J].單片機與嵌入式系統(tǒng)應用,2007(5):70-75.
[3] 布蘭切特,薩默菲爾德.C++ GUI Qt4 編程[M].閆鋒欣,曾泉人,張志強,譯.2版.北京:電子工業(yè)出版社,2013.
[4] 楊成.嵌入式語音識別平臺及優(yōu)化研究[D].華南理工大學,2010.
[5] 胡航.語音信號處理[M].哈爾濱工業(yè)大學出版社,2000.
[6] 王柄錫.實用語音識別基礎[M].北京:國防工業(yè)出版社,2005.
[7] 韓紀慶,張磊,鄭鐵然.語音信號處理[M].北京: 清華大學出版社,2005.
[8] 王炳錫,屈丹.實用語音識別基礎[M].北京:國防工業(yè)出版社,2005.