智能家居入門DIY——【二、LD3320之語音識別】


        前一篇說了一下只有RX,TX,VCC,GND的WIFI模塊軟串口通訊;在實現了遠程觀察數據,類似的就可以實現遠程控制。接下來說一下近距離控制,很多情況下應用語音識別技術無疑比掏出手機操作要更人性化一些,當然有些情況是例外,例如半夜起床來,那么人體感應模塊和光傳感器結合就更人性化。LD3320模塊本身識別准確率並不高,但是通過編寫程序的一些技巧,可以提高這個准確度。不過這個模塊接線的時候有一些小問題,我買的是很多教程上的那個長方形模塊,頭上有倆插孔,尾巴上面2排12個針那種。說一下怎么用起來:

一、接線

A、下排

CS是片選,很多教程講接GND,如果有多個SPI設備,則需要接一個引腳。

P0-P2,接UNO11-13引腳。(通訊+時鍾)。

同排的GND,3.3V接UNO的GND,和3.3輸出。

B、上排

IRQ是中斷,接PIN2

WR接GND

RST接PIN9

共9線完成。

二、程序

        首先,感謝ld3320.h的原作者。

        然后,說一下這個“垃圾關鍵詞”:首先,明確的說,把垃圾關鍵詞都認為是真垃圾的思路我不認同;讓我說嚴重點這就是誤導,是背道而馳,貴圈確實很亂。提出幾點原因:

1、本身識別准確率並不高,假定為60%,並且要求發音清楚、連貫性適中。

2、“垃圾關鍵詞”是接近正確命令的發音,其中有相當部分是用戶正確發音但未正確識別,假定為30%。

如果,代碼中讓“垃圾關鍵詞”並不“垃圾”,那么識別率就是60%+30%;換一種說法,垃圾關鍵詞中即使有1%是正確發音但未被准確識別的,我們把它加上,也是提高1%的正確識別。那么,接下來的問題就是真的垃圾怎么辦。

1、場景切換(口令模式),當15%的真垃圾進入下一個場景,接下來的語句仍然符合下一場景的關鍵詞的幾率是多少?

2、長口令,帶稱呼的口令更符合人們的習慣,所以開燈可以變成二狗子開燈……長口令的錯誤識別率無疑要低。

所以,我的程序中,數據結構和邏輯結構是這樣的:

struct AsrCommand
{
    char* flag;
    int ID;
};

AsrCommand CallName[] = { 
{ "da hei", 0 },
{ "da ei", 0 },
{ "da kei", 0 },
{ "da bai", 1 },
{ "da he", 1 } };

AsrCommand ExecuteCommand[] = { 
{ "kai dian shi",0 },
{ "ai dian shi",0 },
{ "kai yan shi",0 },
{ "ai yan shi",0 },
{ "kai tian shi",0 },
{ "ai tian shi",0 },
{ "guan dian shi",1 },
{ "kuan dian shi",1 },
{ "guan yan shi",1 },
{ "kuan yan shi",1 },
{ "guan tian shi",1 },
{ "kuan tian shi",1 } };

CallName中,編號為1的是真垃圾關鍵詞,但是編號是0的部分里面包含了一部分假垃圾關鍵詞,通過場景切換,使用ExecuteCommand中的關鍵詞,兩組都是命令,一組是開電視,一組是關電視。通過場景切換,第一組中的錯誤識別將被縮小。你可以嘗試一下這個模式,它可以讓你不必咬文嚼字的和機器對話而機器也會正確的響應你。識別率被提高,而不必非常擔心:它會不會知道我說了什么?盡可能的不要讓我們找方便的時候被搞得不痛快吧,那就不是用機器了,簡直就是被機器用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM