摘要:本文主要實(shí)現(xiàn)語(yǔ)音輸入“開(kāi)”、“關(guān)”信號(hào)來(lái)完成開(kāi)發(fā)板上LED燈的開(kāi)啟和關(guān)閉,通過(guò)分別采集100次“開(kāi)”、“關(guān)”、“環(huán)境噪音”等聲音信號(hào),并將采集的聲音以CSV格式的數(shù)據(jù)集進(jìn)行訓(xùn)練,再將訓(xùn)練得到的模型轉(zhuǎn)換為T(mén)FLite格式,同時(shí)將該模型運(yùn)行到開(kāi)發(fā)板進(jìn)行聲音的推理,進(jìn)而控制開(kāi)發(fā)板上LED燈的開(kāi)啟和關(guān)閉操作。
關(guān)鍵詞:人工智能;語(yǔ)音識(shí)別;PCM信號(hào);快速傅里葉變換
【Abstract】Thispapermainlyrealizesthevoiceinput"on"and"off"signalstocompletetheopeningandclosingofLEDlightsonthedevelopmentboard.Throughtheacquisitionof100timesof"on","off","environmentalnoise"andothersoundsignals,thecollectedsoundistrainedinthedatasetofCSVformat,andthetrainingmodelistransformedintoTFLiteformat.Basedontheaboved,themodelisloadedtothedevelopmentboardforsoundreasoning.ItisdemonstratedthattheLEDlamponthedevelopmentboardcanbeturnedonandoff.
【Keywords】artificialintelligence;speechrecognition;PCMsignal;fastFouriertransform
作者簡(jiǎn)介:盛雪豐(1981-),男,副教授,主要研究方向:人工智能、移動(dòng)應(yīng)用開(kāi)發(fā)、物聯(lián)網(wǎng)。
0引言
當(dāng)今世界信息產(chǎn)業(yè)發(fā)展中物聯(lián)網(wǎng)的崛起,無(wú)疑是繼計(jì)算機(jī)、互聯(lián)網(wǎng)后信息化時(shí)代的又一重大變革?;谖锫?lián)網(wǎng)的各種創(chuàng)新應(yīng)用將成為新一輪的創(chuàng)業(yè)熱點(diǎn)話(huà)題,而這些創(chuàng)新領(lǐng)域中一個(gè)重要特點(diǎn)就是物聯(lián)網(wǎng)與人工智能的深度融合??梢云诖@些融合必將廣泛應(yīng)用于智慧城市、工業(yè)物聯(lián)網(wǎng)、智能家居、農(nóng)業(yè)物聯(lián)網(wǎng)和各種可穿戴設(shè)備等領(lǐng)域,有著巨大的發(fā)展?jié)摿涂捎^的應(yīng)用前景。
在人工智能走入人們生活場(chǎng)景前,物聯(lián)網(wǎng)應(yīng)用已被廣泛運(yùn)用于智能家居場(chǎng)景,比如智能照明,就是一種非常直觀的物聯(lián)網(wǎng)家居體驗(yàn),通過(guò)手機(jī)應(yīng)用控制燈光的開(kāi)關(guān),類(lèi)似的應(yīng)用還有家庭安防、空調(diào)溫度調(diào)節(jié)等。直到2017年7月,阿里巴巴推出的智能音箱產(chǎn)品-天貓精靈,其中內(nèi)置了阿里研發(fā)的語(yǔ)音助手AliGenie,伴隨著和用戶(hù)的持續(xù)互動(dòng),讓AliGenie這個(gè)語(yǔ)音大腦不斷進(jìn)化成長(zhǎng),從而實(shí)現(xiàn)更多技能,這也可以視作人工智能技術(shù)第一次真正意義上走進(jìn)人們的生活場(chǎng)景。隨著阿里智能以及一些第三方應(yīng)用的加入,天貓精靈逐漸能控制多達(dá)數(shù)十種品類(lèi)的智能家居產(chǎn)品,正式開(kāi)啟了物聯(lián)網(wǎng)與人工智能結(jié)合的道路。隨后的幾年時(shí)間里,小米、百度、京東等知名廠商也紛紛推出了自己的智能音箱產(chǎn)品,但無(wú)論是哪家廠商推出的智能音箱產(chǎn)品,都只是識(shí)別了用戶(hù)語(yǔ)音輸入的內(nèi)容,再傳送到云端進(jìn)行數(shù)據(jù)匹配,最終返回相應(yīng)的控制指令來(lái)操控物聯(lián)網(wǎng)設(shè)備,無(wú)法達(dá)到個(gè)性化的語(yǔ)音控制效果。
其實(shí)每個(gè)人發(fā)出的聲音都各不相同,這是因?yàn)槿税l(fā)出的聲音是由音色決定的。一個(gè)人的聲音不會(huì)是單調(diào)的100Hz,可能是由100Hz(10分貝)、200Hz(20分貝)、50Hz(5分貝)等頻率的一種組合,而這種組合就被稱(chēng)為音色。本次研究旨在通過(guò)采集不同人的聲音,分別進(jìn)行模型訓(xùn)練,從而達(dá)到個(gè)性化的語(yǔ)音控制效果,并將這種應(yīng)用和物聯(lián)網(wǎng)進(jìn)行結(jié)合,例如聲控門(mén)鎖、聲控?zé)艄獾戎悄芗揖赢a(chǎn)品,在達(dá)到智能化的同時(shí)也更好地保護(hù)了用戶(hù)的隱私安全。
為了實(shí)現(xiàn)個(gè)性化的語(yǔ)音控制,研究中先要采集家庭中各個(gè)成員的音頻數(shù)據(jù),然后對(duì)采集的音頻數(shù)據(jù)進(jìn)行預(yù)處理,接著采用人工智能框架搭建合適的模型進(jìn)行訓(xùn)練,最終將模型搭載到相應(yīng)的物聯(lián)網(wǎng)設(shè)備進(jìn)行推理。
1音頻數(shù)據(jù)的采集
聲音是連續(xù)的聲波信息,也可稱(chēng)為模擬音頻信號(hào)。聲音有2個(gè)重要指標(biāo),分別是:振幅(聲音的強(qiáng)弱)、頻率(音調(diào)的高低)。而計(jì)算機(jī)內(nèi)部使用0或者1離散地表示數(shù)據(jù),則被稱(chēng)為數(shù)字音頻信號(hào)。純粹的模擬信號(hào)無(wú)法完全不失真地用數(shù)據(jù)來(lái)描述,必需經(jīng)過(guò)定制化處理,才能得到用于描述現(xiàn)象的理想數(shù)據(jù)。這些處理中至少需要用到采樣和量化這兩個(gè)過(guò)程,從而將外界的模擬信號(hào)轉(zhuǎn)化為數(shù)字信號(hào)。綜上可知,模擬信號(hào)轉(zhuǎn)化為數(shù)字信號(hào)的設(shè)計(jì)流程則如圖1所示。
在轉(zhuǎn)換的過(guò)程中,需要考慮3個(gè)重要的技術(shù)指標(biāo),也就是:采樣頻率,量化位數(shù),通道數(shù)。其中,采樣頻率是指每秒鐘取得聲音樣本的次數(shù)。采樣頻率越高,聲音的質(zhì)量就越好,但同時(shí)所占用的資源也就越多。量化就是將采樣樣本幅度加以量化,也是用來(lái)衡量聲音波動(dòng)變化的一個(gè)參數(shù)。例如,一個(gè)2bit量化的過(guò)程即如圖2所示。2bit的模數(shù)轉(zhuǎn)換采樣意味著只能取值4次,通過(guò)2bit去量化世界上所有的聲音,那么最終只能得到4種聲音,與實(shí)際的模擬量聲音效果有比較大的出入,會(huì)帶來(lái)很明顯的噪聲,也可將其稱(chēng)為量化噪聲。
通道數(shù),即采集聲音的通道數(shù)目。常有單聲道和立體聲之分,單聲道的聲音只能使用一個(gè)喇叭發(fā)聲(有的也處理成2個(gè)喇叭輸出同一個(gè)聲道的聲音),立體聲可以使2個(gè)喇叭都發(fā)聲(一般左右聲道有分工),對(duì)空間效果的感受也將更為豐富,當(dāng)然還有更多的通道數(shù)。
本次研究使用的是TinyML開(kāi)發(fā)板,主要考慮到該開(kāi)發(fā)板上自帶一個(gè)全向麥克風(fēng)設(shè)備,當(dāng)然也可以選擇其他類(lèi)型的開(kāi)發(fā)板,然后外接音頻采樣設(shè)備。同時(shí)在初始化方法中完成采樣頻率、量化位數(shù)以及采樣通道等參數(shù)的設(shè)置。設(shè)置代碼具體如下。
voidi2s_init(){
consti2s_config_ti2s_config={
.sample_rate=8000,
//設(shè)置采樣頻率為8000Hz
.bits_per_sample=i2s_bits_per_sample_t(16),
//設(shè)置量化位數(shù)為16bit
.channel_format=I2S_CHANNEL_FMT_ONLY_LEFT,
//設(shè)置采樣通道數(shù)為單通道
}
}
在本次實(shí)驗(yàn)中,采樣頻率設(shè)置為8000,主要是考慮到開(kāi)發(fā)板的存儲(chǔ)空間有限,并且8000Hz常用于電話(huà)音頻的采樣,已經(jīng)能夠提供清晰的音頻信息。量化位數(shù)設(shè)置為16bit,可以將振幅劃分為65536個(gè)等級(jí),這已經(jīng)是CD的標(biāo)準(zhǔn)。采樣通道,這里設(shè)置為單通道。
當(dāng)成功設(shè)置了聲音采集參數(shù)后,在loop函數(shù)中使用i2s_pop_sample函數(shù)對(duì)聲音進(jìn)行持續(xù)的采樣。音頻數(shù)據(jù)的串口輸出如圖3所示,此時(shí)研究中編寫(xiě)的代碼見(jiàn)如下。
voidloop(){
int16_tsample=0;
//保存當(dāng)前采樣點(diǎn)的具體值
intbytes=i2s_pop_sample(I2S_PORT,(void*)&sample,portMAX_DELAY);
if(bytes>0){
Serial.println(sample);
}
}
通過(guò)串口輸出可以發(fā)現(xiàn),模擬信號(hào)經(jīng)過(guò)采樣、量化、編碼轉(zhuǎn)換成了標(biāo)準(zhǔn)數(shù)字音頻數(shù)據(jù),并被稱(chēng)為PCM音頻數(shù)據(jù)。通過(guò)Arduino工具菜單中自帶的串口繪圖器,來(lái)查看用戶(hù)采集到的PCM數(shù)據(jù),以圖形化的方式進(jìn)行展示。PCM音頻數(shù)據(jù)的圖形化輸出結(jié)如圖4所示。
由于開(kāi)發(fā)板的內(nèi)存空間有限,無(wú)法預(yù)留很大的緩沖區(qū)去暫存采集的PCM數(shù)據(jù)。實(shí)踐也發(fā)現(xiàn),串口輸出釋放內(nèi)存的速度遠(yuǎn)不如采樣消耗內(nèi)存來(lái)得快,于是本次研究將不再采用串口輸出的模式,而是改用websocket的方式將數(shù)據(jù)傳到瀏覽器端進(jìn)行PCM信號(hào)的收集,以確保緩沖區(qū)內(nèi)數(shù)據(jù)不會(huì)溢出。
因此需要將開(kāi)發(fā)板連接路由器,使之和PC端的瀏覽器處于同一個(gè)局域網(wǎng)內(nèi),可以在開(kāi)發(fā)板上嵌入一個(gè)WiFi模塊,同時(shí)配置路由器采用DHCP動(dòng)態(tài)路由的方式,稍后在程序代碼中配置相應(yīng)的ssid和password,讓開(kāi)發(fā)板連接路由器。
當(dāng)開(kāi)發(fā)板與路由器連接成功后,會(huì)在串口監(jiān)視器中返回一個(gè)IP地址,該IP地址代表路由器分配給開(kāi)發(fā)板的動(dòng)態(tài)IP地址,得到的開(kāi)發(fā)板的IP地址界面如圖5所示。此時(shí),開(kāi)發(fā)板和PC就處于同一個(gè)局域網(wǎng)了。
至此,將通過(guò)瀏覽器訪問(wèn)這個(gè)IP地址,就可以實(shí)時(shí)輸出開(kāi)發(fā)板中采集的PCM音頻數(shù)據(jù)。但是實(shí)踐發(fā)現(xiàn),隨著用戶(hù)音頻數(shù)據(jù)的采集,瀏覽器會(huì)出現(xiàn)卡死的現(xiàn)象,為此將不會(huì)直接在瀏覽器頁(yè)面輸出PCM數(shù)據(jù),而是編寫(xiě)python程序?qū)⒉杉降腜CM音頻數(shù)據(jù)存入文本文件,具體如圖6所示。
2音頻數(shù)據(jù)的處理
對(duì)于前述采集的PCM音頻數(shù)據(jù),如果用一幅圖像來(lái)表示,可以觀察到這樣一幅圖像,如圖7所示。其中,橫坐標(biāo)表示時(shí)間,縱坐標(biāo)表示此刻的聲波能量大小。
假設(shè)在圖7中圖像的任意一個(gè)時(shí)刻,用刀進(jìn)行切割,會(huì)發(fā)現(xiàn)此刻的聲音其實(shí)是由很多不同頻率的聲音構(gòu)成的,而每個(gè)頻率上響度值也各不相同,人的耳朵所聽(tīng)到的其實(shí)是該時(shí)刻所有聲音頻率和響度的總合。本次研究期望實(shí)現(xiàn)的個(gè)性化語(yǔ)音控制,其實(shí)就是利用每個(gè)人的聲音在頻率和響度上都是不一樣的原理。
PCM音頻數(shù)據(jù)的時(shí)域和頻域表示如圖8所示。
一個(gè)PCM采樣點(diǎn)的數(shù)字是無(wú)法表示當(dāng)前時(shí)刻聲音的頻率和響度的,也很難直接體現(xiàn)出其特征,但是如果變換到頻域之后,就很容易得出其特征了。那么如何將PCM圖轉(zhuǎn)化為頻譜圖?這里可以使用離散傅里葉變換的快速算法(FFT)。假設(shè)采樣頻率為Fs,信號(hào)頻率F,采樣點(diǎn)數(shù)為N。在FFT后的結(jié)果就是N個(gè)點(diǎn)的復(fù)數(shù),每一個(gè)點(diǎn)對(duì)應(yīng)一個(gè)頻率,其模值就是該頻率下的幅度特性。第一個(gè)點(diǎn)表示直流分量(即0Hz),而最后一個(gè)點(diǎn)N的再下一個(gè)點(diǎn)(實(shí)際上這個(gè)點(diǎn)是不存在的,這里是假設(shè)第N+1個(gè)點(diǎn))表示采樣頻率Fs,采樣頻率被平均分成N等份,每個(gè)點(diǎn)的頻率依次增加,例如某點(diǎn)n所表示的頻率值為:Fn=(n-1)*Fs/N。采樣頻率越高,可以測(cè)量的頻譜范圍越大,因此這里將采樣頻率從8000Hz提高到44100Hz。
同時(shí),考慮到FFT結(jié)果的對(duì)稱(chēng)性,通常只使用前半部分的結(jié)果,即小于采樣頻率一半的結(jié)果,最多只能測(cè)到22050Hz。本次研究中選取了8個(gè)特征頻率{"125Hz","250Hz","500Hz","1KHz","2KHz","4KHz","8KHz","16KHz"},以此為基礎(chǔ)來(lái)分析在這些頻率上的響度情況。
通過(guò)在PC端的瀏覽器中輸入開(kāi)發(fā)板的IP地址進(jìn)行訪問(wèn),可以看到PCM信號(hào)已經(jīng)成功轉(zhuǎn)化為頻譜圖了。PCM音頻數(shù)據(jù)的頻譜圖表示如圖9所示。
經(jīng)過(guò)多次實(shí)驗(yàn)發(fā)現(xiàn),某些頻率上的振幅比較明顯,而其他頻率上的振幅相對(duì)較小,可以認(rèn)為聲音的特性是由這些變化明顯的頻率所掌控,而其他頻率影響較小,一旦明顯變化的頻率振幅出現(xiàn)問(wèn)題,將直接影響到目標(biāo)聲音的預(yù)測(cè)。把預(yù)測(cè)的好壞由少數(shù)頻率來(lái)控制,會(huì)存在高風(fēng)險(xiǎn),故而需要對(duì)其進(jìn)行標(biāo)準(zhǔn)化處理,使得頻譜圖中不同的特征頻率具有相同的尺度(將特征的值控制在某個(gè)范圍內(nèi)),這樣目標(biāo)聲音就可以由多個(gè)相同尺度的特征頻率共同控制,也便于后續(xù)訓(xùn)練過(guò)程中加速權(quán)重參數(shù)的收斂。本次研究將振幅情況映射到0~128的區(qū)間。
3音頻數(shù)據(jù)集的收集
綜合前文所述,已經(jīng)大致了解如何來(lái)收集音頻數(shù)據(jù),以及如何區(qū)分不同音頻。但是在模型訓(xùn)練時(shí),需要用到大量連續(xù)的音頻數(shù)據(jù)樣本,所以還需要完成音頻數(shù)據(jù)的收集。
本次研究擬通過(guò)用戶(hù)語(yǔ)音輸入的“開(kāi)”、“關(guān)”來(lái)控制LED的開(kāi)啟和關(guān)閉。因此這里主要來(lái)收集用戶(hù)“開(kāi)”和“關(guān)”的音頻數(shù)據(jù),統(tǒng)計(jì)每次音頻采集所獲取到的數(shù)據(jù)條數(shù)。實(shí)驗(yàn)發(fā)現(xiàn),“開(kāi)”和“關(guān)”這樣一個(gè)字大約會(huì)產(chǎn)生20~30條左右的數(shù)據(jù)。綜合考慮實(shí)際測(cè)量結(jié)果后,文中將使用30條頻譜數(shù)據(jù)來(lái)描述一個(gè)語(yǔ)音指令。
在前文分析基礎(chǔ)上,每一條頻譜數(shù)據(jù)又分別采集了8個(gè)特征頻率上的響度值,因此,一個(gè)控制指令所包含的數(shù)據(jù)量為30*8個(gè)值。
但是需要面對(duì)開(kāi)發(fā)板重復(fù)收集很多次同一個(gè)控制指令的數(shù)據(jù),比方說(shuō)“開(kāi)”字的100次的數(shù)據(jù)。假如在認(rèn)真喊話(huà)的時(shí)候數(shù)錯(cuò)或者喊錯(cuò),為了保證訓(xùn)練數(shù)據(jù)的準(zhǔn)確性,就又得重新開(kāi)始收集。本次仿真時(shí)通過(guò)在開(kāi)發(fā)板上外接一個(gè)LED燈,再控制LED的顏色來(lái)表示采集和結(jié)束采集的情況。到達(dá)規(guī)定次數(shù)時(shí),紅燈亮起;超過(guò)規(guī)定次數(shù),藍(lán)燈亮起,表示收集完畢。研究中編寫(xiě)的程序代碼見(jiàn)如下。
intdata_count=0;
//當(dāng)前已經(jīng)采集的聲音次數(shù)
intn=100;
//需要采集聲音的次數(shù)
voidCheck_Start(){
if(bsum>=Threshold_HIGH&&record_count==-1){
data_count++;
if(data_count==n){
pixels.setPixelColor(0,pixels.Color(255,0,0));//紅燈
}elseif(data_count>n){
pixels.setPixelColor(0,pixels.Color(0,0,255));//藍(lán)燈
}
record_count=0;
}
}
喊完100次的時(shí)候,紅燈亮起,此后將串口監(jiān)視器中的數(shù)據(jù)復(fù)制到open.txt文件,并將該文件名重命名為open.csv,將其打開(kāi)則會(huì)發(fā)現(xiàn)在這張表格中已經(jīng)存在3000條記錄,而且每條記錄都是由8個(gè)頻率數(shù)據(jù)組成。
采用同樣的方式,再收集100次“關(guān)”控制指令的數(shù)據(jù)集,并保存為close.csv文件。除了收集“開(kāi)”和“關(guān)”數(shù)據(jù)集外,還要收集環(huán)境噪音。因?yàn)樽罱K要分類(lèi)的其實(shí)是環(huán)境噪音、“開(kāi)”和“關(guān)”這三種聲音。收集環(huán)境噪音十分簡(jiǎn)單,只要將高閾值調(diào)到0就可以了,等到紅燈亮起,再將這些數(shù)據(jù)保存為silence.csv文件。
4搭建模型完成訓(xùn)練
到目前為止,已經(jīng)收集了3種聲音,分別為“開(kāi)”、“關(guān)”和“環(huán)境噪音”,每種聲音各采集了100次的數(shù)據(jù)集。但將這些數(shù)據(jù)集提交訓(xùn)練前,還需要進(jìn)行預(yù)處理,主要涉及如下操作:
(1)將采集的每個(gè)聲音以30條數(shù)據(jù)進(jìn)行切割,生成一個(gè)二維矩陣。
(2)將聲音數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化操作,使每個(gè)數(shù)據(jù)的范圍都控制在[0,1]之間。
(3)給聲音數(shù)據(jù)打上數(shù)字標(biāo)簽,最終生成一維標(biāo)簽矩陣。
在模型訓(xùn)練時(shí),可以選擇本地服務(wù)器,也可以選擇采用各種云平臺(tái)。而本次實(shí)驗(yàn)采用的是浙江城市學(xué)院創(chuàng)建的黑胡桃實(shí)驗(yàn)室云平臺(tái)進(jìn)行模型的訓(xùn)練。
在本次實(shí)驗(yàn)中,決定采用keras框架搭建模型進(jìn)行訓(xùn)練,使用的是Sequential模型。在確定好每一層的輸入數(shù)據(jù)尺寸、輸出數(shù)據(jù)尺寸以及激活函數(shù)后,使用keras.layers.Dense定義模型的每一層計(jì)算。相應(yīng)的程序代碼參見(jiàn)如下。
model.add(keras.layers.Dense(32,input_shape=(FEATURE_NUM*SAMPLES_PER_VOICE,),activation='relu'))
model.add(keras.layers.Dense(16,activation='relu'))
model.add(keras.layers.Dense(3,activation='softmax'))
分析可知,本實(shí)驗(yàn)是一個(gè)多分類(lèi)的問(wèn)題,因此在輸出層使用的激活函數(shù)是softmax函數(shù)。最終輸出只有“開(kāi)”、“關(guān)”和“環(huán)境噪音”三種聲音,所以最后一層的輸出節(jié)點(diǎn)尺寸定義為3。定義好模型結(jié)構(gòu)之后還需要定義優(yōu)化器、損失函數(shù)、性能評(píng)估函數(shù)等參數(shù)來(lái)編譯模型。程序代碼具體如下。
adam=keras.optimizers.Adam(0.00001)
model.compile(loss='sparse_categorical_crossentropy',optimizer=adam,metrics=['sparse_categorical_accuracy'])
在上述的參數(shù)設(shè)置中,則將學(xué)習(xí)速率設(shè)定為0.00001。一般學(xué)習(xí)速率越低,訓(xùn)練的時(shí)長(zhǎng)越長(zhǎng),但是學(xué)習(xí)效果越好??蓤?zhí)行代碼的內(nèi)容見(jiàn)如下。
history=model.fit(xTrain,yTrain,batch_size=1,validation_data=(xTest,yTest),epochs=1000,verbose=1)
設(shè)置epoch為1000,也就是經(jīng)過(guò)1000步后結(jié)束訓(xùn)練。當(dāng)然這個(gè)步數(shù)需要根據(jù)實(shí)際情況進(jìn)行調(diào)整。本實(shí)驗(yàn)中由于數(shù)據(jù)量比較小,不會(huì)占用太多的處理器內(nèi)存,batch_size設(shè)置為1,這些數(shù)據(jù)會(huì)一次性加載到處理器中進(jìn)行訓(xùn)練。verbose=1表示在訓(xùn)練過(guò)程中會(huì)有進(jìn)度條記錄輸出。
為了最終能將訓(xùn)練好的模型運(yùn)用到開(kāi)發(fā)板上,在訓(xùn)練結(jié)束后,需要使用模型轉(zhuǎn)換器將模型轉(zhuǎn)換為T(mén)FLite格式,再將轉(zhuǎn)換的結(jié)果從內(nèi)存中撈出保存到磁盤(pán)中。與其相關(guān)聯(lián)的代碼可寫(xiě)為如下形式。
converter=tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model=converter.convert()
//保存TFLite格式的模型到磁盤(pán)
open("model","wb").write(tflite_model)
但是,這個(gè)模型還不能直接輸送到開(kāi)發(fā)板上去運(yùn)行,還需要對(duì)其進(jìn)行一定的轉(zhuǎn)換,轉(zhuǎn)換為能被C語(yǔ)言加載的靜態(tài)數(shù)組形式??墒褂胠inu命令xxd-i來(lái)將二進(jìn)制文件內(nèi)容存儲(chǔ)到C代碼靜態(tài)數(shù)組內(nèi),最終生成model.h格式的文件。
5模型推理
在前文的模型搭建和模型訓(xùn)練研發(fā)的基礎(chǔ)上,此時(shí)的開(kāi)發(fā)板已經(jīng)實(shí)現(xiàn)智能化,能夠通過(guò)用戶(hù)的語(yǔ)音輸入來(lái)區(qū)分“開(kāi)”、“關(guān)”、“環(huán)境噪音”等不同聲音。
修改原來(lái)的程序,將原本通過(guò)串口輸出的數(shù)據(jù)直接輸入到模型中去進(jìn)行推理,使用tflInputTensor將一組30條、每條8種響度值的數(shù)據(jù)輸入到模型中。需要注意的是,這些數(shù)據(jù)在輸入前也需要經(jīng)過(guò)與模型訓(xùn)練時(shí)一樣的標(biāo)準(zhǔn)化操作,這里也是將各種頻率的響度值除以128,使每個(gè)數(shù)據(jù)的范圍也都控制在[0,1]之間。
一次聲音數(shù)據(jù)輸入完畢后,就使用Invoke進(jìn)行推理。并且在完成推理后,將推理結(jié)果進(jìn)行輸出,使用tflOutputTensor來(lái)取出這3個(gè)聲音的準(zhǔn)確率。程序代碼內(nèi)容詳見(jiàn)如下。
TfLiteStatusinvokeStatus=tflInterpreter->Invoke();
for(inti=0;i Serial.print(VOICES[i]); Serial.print(":"); Serial.println(tflOutputTensor->data.f[i],6); } 使用TFLite模型進(jìn)行模型推理如圖10所示。圖10中,分別展示了每次用戶(hù)語(yǔ)音輸入后,判定為“開(kāi)”、“關(guān)”、“環(huán)境噪音”的可能性,最終以百分比的數(shù)值進(jìn)行顯示。百分比越高,表明此次用戶(hù)輸入的音頻數(shù)據(jù)為對(duì)應(yīng)的類(lèi)別可能性就越高。實(shí)驗(yàn)證明,環(huán)境噪音對(duì)最終識(shí)別的準(zhǔn)確性有一定的影響,在上述第四次實(shí)驗(yàn)中,隨著環(huán)境噪音的增強(qiáng),識(shí)別的結(jié)果受到了一定的影響。 6實(shí)現(xiàn)個(gè)性化的燈光控制 至此,研究中將使用LED燈來(lái)真實(shí)反映語(yǔ)音識(shí)別的結(jié)果。首先刪除前面收集數(shù)據(jù)集時(shí)的燈光效果,并在推理結(jié)束后對(duì)推理結(jié)果進(jìn)行判斷,從而控制LED的開(kāi)關(guān)。程序代碼可依次展開(kāi)如下。 floatsilence=tflOutputTensor->data.f[0]; floatopen=tflOutputTensor->data.f[1]; floatclose=tflOutputTensor->data.f[2]; if(silence==1){ }else{ if(open>close&&open>0.6){ pixels.clear();//調(diào)顏色 pixels.setPixelColor(0,pixels.Color(255,255,255));//調(diào)顏色 }elseif(close>open&&close>0.6){ pixels.clear();//調(diào)顏色 pixels.setPixelColor(0,pixels.Color(0,0,0));//調(diào)顏色 } } 因考慮到環(huán)境噪音對(duì)語(yǔ)音識(shí)別結(jié)果的影響,在上述的程序中,并沒(méi)有采用100%的概率來(lái)進(jìn)行判定,而是采用判定用戶(hù)輸入的音頻數(shù)據(jù)達(dá)到60%以上的概率為“開(kāi)”或者“關(guān)”的時(shí)候,則執(zhí)行相應(yīng)的操作。實(shí)驗(yàn)證明,當(dāng)測(cè)試者對(duì)著開(kāi)發(fā)板喊出“開(kāi)”的指令后,LED燈就會(huì)自動(dòng)開(kāi)啟,再對(duì)著開(kāi)發(fā)板喊出“關(guān)”的指令后,LED燈會(huì)立刻關(guān)閉。 7實(shí)驗(yàn)測(cè)試及思考 到目前為止,本實(shí)驗(yàn)已經(jīng)可以通過(guò)語(yǔ)音輸入“開(kāi)”、“關(guān)”的指令來(lái)控制LED的開(kāi)啟和關(guān)閉操作,而且通過(guò)前面的分析,每個(gè)人發(fā)出的聲音的頻率不同,以及在每個(gè)頻率上的響度不同等特點(diǎn),再進(jìn)行模型訓(xùn)練等操作后,可以達(dá)到個(gè)性化的燈光控制效果。 實(shí)驗(yàn)中還發(fā)現(xiàn),識(shí)別的準(zhǔn)確率并不能達(dá)到100%,可能跟多種因素有關(guān)。例如,聲音采集時(shí)所處的環(huán)境和最后推理時(shí)的環(huán)境不一致,從而造成了環(huán)境噪音的不一致,影響了識(shí)別的準(zhǔn)確率。在采集100次“開(kāi)”、“關(guān)”的數(shù)據(jù)集時(shí),特別是在采集初期,因?yàn)槿诉€沒(méi)有喊話(huà),而開(kāi)發(fā)板卻已經(jīng)開(kāi)始采集數(shù)據(jù)了,這時(shí)候其實(shí)采集到的僅僅是環(huán)境噪音的數(shù)據(jù),卻被用戶(hù)認(rèn)定為“開(kāi)”或者“關(guān)”指令的數(shù)據(jù),也在一定程度上影響了識(shí)別的準(zhǔn)確率。 另外,還會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題,這套程序只能采集并識(shí)別話(huà)音起始的那一個(gè)字,而人們平時(shí)說(shuō)話(huà)很顯然并不是使用單個(gè)字的發(fā)音進(jìn)行溝通交流的。一句話(huà)可以由多個(gè)字所構(gòu)成,機(jī)器認(rèn)識(shí)的那個(gè)字,并不一定是這句話(huà)的第一個(gè)字,就比如芝麻開(kāi)門(mén)這句話(huà),“開(kāi)”是位于中間位置的,那么對(duì)于這種情況的處理方式,也是亟待不斷探索和嘗試的問(wèn)題。 8結(jié)束語(yǔ) 未來(lái)勢(shì)必是萬(wàn)物在線—智聯(lián)網(wǎng)的時(shí)代,曾有專(zhuān)家說(shuō)過(guò),物聯(lián)網(wǎng)的本質(zhì)首先必須是智聯(lián)網(wǎng),只有在連起來(lái)之后,才能實(shí)現(xiàn)智能化。智能音箱的出現(xiàn),用語(yǔ)音把智能家居生態(tài)和本地生活服務(wù)連了起來(lái),形成了閉環(huán)。相信隨著人工智能技術(shù)的不斷發(fā)展,人工智能與物聯(lián)網(wǎng)相結(jié)合,可以創(chuàng)造出更多的“智能設(shè)備”。 參考文獻(xiàn) [1]韓麗麗,潘煒,劉豐威.基于人工智能語(yǔ)音識(shí)別客服稽查應(yīng)用前景[J].電子測(cè)試,2020(15):118-119,95. [2]徐來(lái),朱海昆.淺談人工智能家居在室內(nèi)設(shè)計(jì)中的應(yīng)用[J].戲劇之家,2020(29):174-175. [3]張夏明,張艷.人工智能應(yīng)用中數(shù)據(jù)隱私保護(hù)策略研究[J].人工智能,2020(4):76-84. [4]周坤,李小松.人工智能與計(jì)算智能在物聯(lián)網(wǎng)方面的應(yīng)用探索[J].計(jì)算機(jī)產(chǎn)品與流通,2020(11):152. [5]劉娟宏,胡彧,黃鶴宇.端到端的深度卷積神經(jīng)網(wǎng)絡(luò)語(yǔ)音識(shí)別[J].計(jì)算機(jī)應(yīng)用與軟件,2020,37(4):192-196. [6]張文霞,閆順斌.智聯(lián)網(wǎng)家居控制系統(tǒng)設(shè)計(jì)[J].無(wú)錫商業(yè)職業(yè)技術(shù)學(xué)院學(xué)報(bào),2019,19(6):97-102. [7]呂值敏,蘇皓,曹志文.面向物聯(lián)網(wǎng)應(yīng)用的人工智能技術(shù)[J].造紙裝備及材料,2020,49(1):95. [8]李蓀,范志琰.AI+趨勢(shì)下智能語(yǔ)音產(chǎn)業(yè)多模態(tài)發(fā)展趨勢(shì)研究[J].電信網(wǎng)技術(shù),2019(6):17-21.