前一篇說了一下只有RX,TX,VCC,GND的WIFI模塊軟串口通信;在實現了遠程觀察數據,相似的就能夠實現遠程控制。接下來講一下近距離控制,不少狀況下應用語音識別技術無疑比掏出手機操做要更人性化一些,固然有些狀況是例外,例如半夜起牀來,那麼人體感應模塊和光傳感器結合就更人性化。LD3320模塊自己識別準確率並不高,可是經過編寫程序的一些技巧,能夠提升這個準確度。不過這個模塊接線的時候有一些小問題,我買的是不少教程上的那個長方形模塊,頭上有倆插孔,尾巴上面2排12個針那種。說一下怎麼用起來:數據結構
1、接線spa
A、下排code
CS是片選,不少教程講接GND,若是有多個SPI設備,則須要接一個引腳。blog
P0-P2,接UNO11-13引腳。(通信+時鐘)。教程
同排的GND,3.3V接UNO的GND,和3.3輸出。class
B、上排技巧
IRQ是中斷,接PIN2程序
WR接GND技術
RST接PIN9d3
共9線完成。
2、程序
首先,感謝ld3320.h的原做者。
而後,說一下這個「垃圾關鍵詞」:首先,明確的說,把垃圾關鍵詞都認爲是真垃圾的思路我不認同;讓我說嚴重點這就是誤導,是背道而馳,貴圈確實很亂。提出幾點緣由:
一、自己識別準確率並不高,假定爲60%,而且要求發音清楚、連貫性適中。
二、「垃圾關鍵詞」是接近正確命令的發音,其中有至關部分是用戶正確發音但未正確識別,假定爲30%。
若是,代碼中讓「垃圾關鍵詞」並不「垃圾」,那麼識別率就是60%+30%;換一種說法,垃圾關鍵詞中即便有1%是正確發音但未被準確識別的,咱們把它加上,也是提升1%的正確識別。那麼,接下來的問題就是真的垃圾怎麼辦。
一、場景切換(口令模式),當15%的真垃圾進入下一個場景,接下來的語句仍然符合下一場景的關鍵詞的概率是多少?
二、長口令,帶稱呼的口令更符合人們的習慣,因此開燈能夠變成二狗子開燈……長口令的錯誤識別率無疑要低。
因此,個人程序中,數據結構和邏輯結構是這樣的:
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中的關鍵詞,兩組都是命令,一組是開電視,一組是關電視。經過場景切換,第一組中的錯誤識別將被縮小。你能夠嘗試一下這個模式,它可讓你沒必要咬文嚼字的和機器對話而機器也會正確的響應你。識別率被提升,而沒必要很是擔憂:它會不會知道我說了什麼?儘量的不要讓咱們找方便的時候被搞得不痛快吧,那就不是用機器了,簡直就是被機器用。