出處:RT-Thread
作者:王胖胖
應(yīng)用方案說明及使用場景描述:
本方案通過N32G457+RT-Thread,實(shí)現(xiàn)一個(gè)家庭語音助手,提供語音喚醒、多路開關(guān)、倒計(jì)時(shí)、鬧鐘提醒、天氣提醒、新聞播報(bào)、音樂播放等功能,為家庭生活增添便利和趣味性。
具體實(shí)現(xiàn)功能如下:
1.一鍵配網(wǎng)(未實(shí)現(xiàn))
2.特定喚醒詞喚醒
3.語音控制多路開關(guān)
4.語音設(shè)置倒計(jì)時(shí)
5.語音設(shè)置鬧鐘(未實(shí)現(xiàn))
6.語音播報(bào)天氣提醒
7.語音播報(bào)新聞
8.語音控制音樂播放
硬件平臺(tái)
N32G45XVL-STB開發(fā)板
軟件平臺(tái)
RT-Thread 4.0.4
RT-Thread Studio
功能模塊
ADC
Timer
msh
Serial
pyaudio
pyserial
百度實(shí)時(shí)語音識(shí)別realtime-asr
百度語音合成tts
全家福

初步方案

語音識(shí)別是本項(xiàng)目的核心,一般有語音識(shí)別模塊、在線語音識(shí)別、離線語音識(shí)別等三種方案。一開始覺得語音識(shí)別模塊、在線語音識(shí)別沒有技術(shù)含量,離線語音識(shí)別才能最大限度的發(fā)揮開發(fā)板的性能。于是春節(jié)期間查閱了不少離線語音識(shí)別的資料,最終確定了MFCC+DTW的離線語音識(shí)別方案。節(jié)后事情比較多,中斷了很長時(shí)間。等再拾起來的時(shí)候,發(fā)現(xiàn)沒有想象中那么簡單,像FFT/DCT等DSP運(yùn)算不是新手能輕易搞定的。距離截稿時(shí)間已經(jīng)沒幾天了,無奈只能選擇降級(jí)方案。
降級(jí)方案
降級(jí)后的方案是使用ADC采樣音頻信號(hào),交由上位機(jī)(或ESP8266)進(jìn)行在線語音識(shí)別。ADC進(jìn)行了配置之后,給VREF接上3.3V,測試正常??蓡栴}還是出現(xiàn)了,首先是自制的音頻放大電路的放大能力不足,遠(yuǎn)達(dá)不到3.3v的上限,導(dǎo)致采樣精度不足;其次是音頻采樣需要8k的采樣速率,也就是125us采樣一次,而系統(tǒng)定時(shí)器最小周期默認(rèn)是10ms,就算配置成1ms也是不能滿足需求的。文檔里的高精度定時(shí)器還需要進(jìn)一步研究,無奈只能再次降級(jí)。
再次降級(jí)
復(fù)制
def process_instruct(instruct):
"""
處理語音指令
"""
instruct = str(instruct).replace("。", "").replace("?", "")
cmd = ""
voice = ""
match instruct:
case "小白小白":
cmd = "mini_rgb up"
voices = "在呢|嗯|爺爺在此".split("|")
random.shuffle(voices)
voice = voices[0]
case "打開紅燈":
cmd = "light_control red on"
voice = "紅燈已打開"
case "關(guān)閉紅燈":
cmd = "light_control red off"
voice = "紅燈已關(guān)閉"
case "打開綠燈":
cmd = "light_control green on"
voice = "綠燈已打開"
case "關(guān)閉綠燈":
cmd = "light_control green off"
voice = "綠燈已關(guān)閉"
case "打開藍(lán)燈":
cmd = "light_control blue on"
voice = "藍(lán)燈已打開"
case "關(guān)閉藍(lán)燈":
cmd = "light_control blue off"
voice = "藍(lán)燈已關(guān)閉"
case "天氣":
cmd = "mini_rgb up"
voice = "有你的每一天都是晴天"
case "幾點(diǎn)了":
cmd = "mini_rgb up"
now = time.strftime("%Y年%m月%d日%H點(diǎn)%M分%S秒", time.localtime())
voice = "現(xiàn)在是" + now
case "早上好":
cmd = "mini_rgb up"
voice = "morning"
case "我想聽歌":
cmd = "mini_rgb up"
voice = "一閃一閃亮晶晶,滿天都是小星星"
case "倒計(jì)時(shí)五秒鐘":
cmd = "count_down 5"
voice = "已為您設(shè)置好倒計(jì)時(shí)"
case "新聞":
cmd = "mini_rgb up"
voice = "【一眼新聞丨3月16日貝果財(cái)經(jīng)早間資訊】中國塞爾維亞駕*互認(rèn)正式生效;106班上海入境國際航班將更改入境點(diǎn);鄧倫偷逃稅被處罰并追繳1.06億元;最高法明確電商不得以拆封為由拒絕退貨;茅臺(tái)回應(yīng)潘長江直播事件;白俄羅斯和俄羅斯將在能源交易中放棄使用美元;英國將取消所有新冠疫情旅行限制措施;韓國開發(fā)全球首個(gè)可拉伸無失真元顯示技術(shù);美國航天局證實(shí):美航天員將乘俄飛船返回......"
case "再見":
cmd = "mini_rgb down"
voice = "再見"
case _:
cmd = "mini_rgb down"
voices = "不知道你說了什么|不懂".split("|")
random.shuffle(voices)
voice = voices[0]
if cmd != "":
logger.info('cmd:'+cmd)
cmd = cmd + "\n"
cmd = cmd.encode("ascii")
n32_serial.write(cmd)
if voice != "":
tts_file = tts(voice)
if tts_file != "":
play_audio(tts_file)
再次降級(jí)后,使用上位機(jī)通過pyaudio進(jìn)行音頻錄制,語音片段通過websocket上傳至百度實(shí)時(shí)語音接口進(jìn)行語音識(shí)別,返回的結(jié)果轉(zhuǎn)換為指令通過pyserial寫入開發(fā)板,觸發(fā)對應(yīng)動(dòng)作,同時(shí)通過百度語音合成tts生成對應(yīng)語音回復(fù),通過pyaudio播放?;緦?shí)現(xiàn)了前期預(yù)定目標(biāo)。
總結(jié)
由于是第一個(gè)硬件項(xiàng)目,經(jīng)驗(yàn)有限加上知識(shí)儲(chǔ)備不足,一開始的想法并沒有完全實(shí)現(xiàn)出來,只能一再降級(jí),好在也不辱使命,完成了作品。后期我會(huì)繼續(xù)完善這個(gè)項(xiàng)目,把離線語音識(shí)別方案實(shí)現(xiàn)出來,真正發(fā)揮這塊開發(fā)板的價(jià)值!
bilibili:https://gitee.com/grinow/home-voice-assistant
gitee:https://www.bilibili.com/video/BV1gU4y1o7XJ/
-
單片機(jī)
+關(guān)注
關(guān)注
6067文章
44962瀏覽量
648971 -
語音識(shí)別
+關(guān)注
關(guān)注
39文章
1778瀏覽量
114082 -
RT-Thread
+關(guān)注
關(guān)注
32文章
1387瀏覽量
41703 -
語音助手
+關(guān)注
關(guān)注
7文章
240瀏覽量
27111 -
N32G457
+關(guān)注
關(guān)注
0文章
18瀏覽量
1124
發(fā)布評論請先 登錄
基于N32G457 RT-Thread的設(shè)計(jì)作品集分享
作品分享-基于RT-Thread系統(tǒng)和N32G457開發(fā)板開發(fā)的電子圍欄設(shè)計(jì)
基于RT-Thread和N32G457的智慧家庭
基于RT-Thread和N32G457的家庭語音助手
分享一種基于RT-Thread和N32G457的運(yùn)動(dòng)姿態(tài)解算設(shè)計(jì)
基于RT-Thread和N32G457的溫度氣壓顯示系統(tǒng)設(shè)計(jì)
基于RT-Thread和N32G457的門禁控制系統(tǒng)設(shè)計(jì)方案
基于RT-Thread和N32G457的智能家居demo相關(guān)資料介紹
基于RT-Thread和N32G457的繼電器控制加熱設(shè)備制作方案
基于RT-Thread和N32G457的數(shù)字氣壓表設(shè)計(jì)相關(guān)資料分享
基于RT-Thread和N32G457的溫度氣壓顯示系統(tǒng)設(shè)計(jì)方案
基于RT-Thread和N32G457的嵌入式目標(biāo)識(shí)別系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)
N32G457系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記

求一種基于RT-Thread和N32G457的便攜測距模塊設(shè)計(jì)方案

評論