在我們運(yùn)行Python程序之前,我們需要安裝兩個(gè)庫(kù):語(yǔ)音識(shí)別和PyAudio。要安裝這兩個(gè)庫(kù),需要在終端窗口中運(yùn)行以下兩個(gè)命令:
$ sudo pip install SpeechRecognition
$ sudo pip install PyAudio
如果您在安裝PyAudio時(shí)遇到問(wèn)題,可以使用以下系列安裝它說(shuō)明:
$ sudo apt-get install git
$ sudo git clone http://people.csail.mit.edu/hubert/git/pyaudio.git
$ sudo apt-get install libportaudio0 libportaudio2 libportaudiocpp0 portaudio19-dev
$ sudo apt-get install python-dev
$ cd pyaudio
$ sudo python setup.py install
一旦安裝了這兩個(gè)庫(kù),您就需要禁用Raspberry Pi上的板載音頻驅(qū)動(dòng)程序,因?yàn)樗赡軙?huì)干擾PyAudio。為此,首先打開一個(gè)新終端并運(yùn)行以下命令:
$ cd /etc/modprobe.d
$ sudo nano alsa-blacklist.conf
Nano是終端的簡(jiǎn)單文本編輯器,加載時(shí)只需要輸入一行:
blacklist snd_bcm2835
按Ctrl + X退出nano并使用文件名alsa-blacklist.conf保存文件。這個(gè)簡(jiǎn)單的文件禁用了Raspberry Pi的Broadcom音頻系統(tǒng),因此Pi上唯一可用的音頻系統(tǒng)是USB聲卡。
語(yǔ)音控制冰箱列表如何工作
Python腳本首先導(dǎo)入語(yǔ)音識(shí)別模塊,該模塊用于將口語(yǔ)單詞轉(zhuǎn)換為字符串。導(dǎo)入模塊后,我們創(chuàng)建一個(gè)對(duì)象r,它是一個(gè)語(yǔ)音識(shí)別器對(duì)象,用于記錄麥克風(fēng)的音頻,然后請(qǐng)求轉(zhuǎn)換。在定義了語(yǔ)音識(shí)別對(duì)象之后,我們還定義了變量,包括項(xiàng)目列表,命令,當(dāng)前項(xiàng)目以及包含已解析命令的數(shù)組。
import speech_recognition as sr
r = sr.Recognizer()
items = dict()
command = “”
item = “”
初始配置完成后,下一個(gè)要執(zhí)行的代碼塊就是主循環(huán)。循環(huán)中的第一個(gè)任務(wù)是通過(guò)打印單詞“Speak”通知用戶發(fā)言,然后創(chuàng)建一個(gè)名為“audio”的音頻對(duì)象,它保存我們的麥克風(fēng)流。
while(1):
with sr.Microphone() as source:
print(“Speak:”)
audio = r.listen(source)
當(dāng)麥克風(fēng)檢測(cè)到聲音并完成錄制時(shí)(當(dāng)聲級(jí)低于閾值時(shí)錄制停止),它會(huì)將錄制的音頻傳遞給識(shí)別器對(duì)象。執(zhí)行此操作后,r將使用Google服務(wù)嘗試將音頻轉(zhuǎn)換為句子,然后將其傳遞給名為speechString的變量。所有這些代碼都在try/except塊中完成,以防音頻被理解或服務(wù)不可用。收到的字符串也被解析為prasedCommands,其中分隔符是空格。因此,如果說(shuō)“添加培根”這個(gè)詞,結(jié)果將是parsedCommands [0]將是“add”而parsedCommands [1]將是“bacon”。
try:
speechString =r.recognize_google(audio)
parsedCommands = speechString.split(“ ”)
except sr.UnknownValueError:
print(“Could not understand audio”)
except sr.RequestError as e:
print(“Could not request results; {0}”.format(e))
if(len(parsedCommands) 》 0):
command = parsedCommands[0]
if(len(parsedCommands) 》 1):
item = parsedCommands[1]
現(xiàn)在我們擁有我們解析的命令和項(xiàng)目,我們可以將它們添加到我們的項(xiàng)目列表中。但是,為了保持清潔,我們會(huì)執(zhí)行以下幾項(xiàng)檢查:
如果該項(xiàng)目已存在且已添加,則增加項(xiàng)目值
如果該項(xiàng)目不存在且添加了該項(xiàng)目,則將該項(xiàng)目添加到列表中
如果該項(xiàng)目已存在且已刪除,則如果總計(jì)大于1則減去1
/li》
如果該項(xiàng)目已存在,則說(shuō)明已刪除,并且只剩下項(xiàng)目,刪除項(xiàng)目
如果該項(xiàng)目不存在,忽略命令
if(command == “add”):
if item in items:
items[item] = str(int(items[item]) + 1)
else:
items[item] = str(1)
print(item + “ added”)
if(command == “remove”):
if item in items:
if(int(items[item]) 》 1):
items[item] = str(int(items[item]) - 1)
else:
try:
items.pop(item, None)
except:
pass
print(item + “ removed”)
這個(gè)簡(jiǎn)單腳本中的最后一個(gè)命令是“display”,它將變量項(xiàng)的內(nèi)容打印到顯示中。
if(command == “display”):
print(items)
完整代碼
import speech_recognition as sr
r = sr.Recognizer()
items = dict()
command = “”
item = “”
while(1):
with sr.Microphone() as source:
print(“Speak:”)
audio = r.listen(source)
try:
speechString =r.recognize_google(audio)
parsedCommands = speechString.split(“ ”)
except sr.UnknownValueError:
print(“Could not understand audio”)
except sr.RequestError as e:
print(“Could not request results; {0}”.format(e))
if(len(parsedCommands) 》 0):
command = parsedCommands[0]
if(len(parsedCommands) 》 1):
item = parsedCommands[1]
if(command == “add”):
if item in items:
items[item] = str(int(items[item]) + 1)
else:
items[item] = str(1)
print(item + “ added”)
if(command == “remove”):
if item in items:
if(int(items[item]) 》 1):
items[item] = str(int(items[item]) - 1)
else:
try:
items.pop(item, None)
except:
pass
print(item + “ removed”)
if(command == “display”):
print(items)
command = “”
item = “”
days = “”
parsedCommands.clear()
此項(xiàng)目以Raspberry Pi為中心,除麥克風(fēng)和顯示器外不需要任何電路或硬件。雖然可以使用普通的顯示器或電視顯示器,但它對(duì)于安裝來(lái)說(shuō)并不是很實(shí)用,因此在這個(gè)項(xiàng)目中,我得到了一個(gè)小型的3.5英寸Raspberry Pi顯示器,分辨率為480x320。雖然這對(duì)于正常使用而言太小,但它非常適合命令行工作,如果通過(guò)網(wǎng)絡(luò)編程和使用此Pi(使用SSH),則可以從任何具有Internet連接的PC上運(yùn)行Python程序。
-
python
+關(guān)注
關(guān)注
57文章
4876瀏覽量
90034 -
樹莓派
+關(guān)注
關(guān)注
122文章
2078瀏覽量
110473
發(fā)布評(píng)論請(qǐng)先 登錄
零成本鋼鐵俠手套!樹莓派+OpenCV 秒變手勢(shì)遙控器!
如何使用樹莓派與OpenCV實(shí)現(xiàn)面部和運(yùn)動(dòng)追蹤的云臺(tái)系統(tǒng)?
技能+1!如何在樹莓派上使用C++控制GPIO?
C++ 與 Python:樹莓派上哪種語(yǔ)言更優(yōu)?
在樹莓派5上開啟YOLO姿態(tài)估計(jì)識(shí)別之旅!
在樹莓派5上使用YOLO進(jìn)行物體和動(dòng)物識(shí)別-入門指南
樹莓派6 傳聞:發(fā)布日期與規(guī)格!
樹莓派小技巧:無(wú)需鍵盤或顯示器,如何通過(guò)WiFi設(shè)置樹莓派?
樹莓派分類器:用樹莓派識(shí)別不同型號(hào)的樹莓派!
使用 Betaflight 和樹莓派實(shí)現(xiàn) FPV 無(wú)人機(jī)自主飛行!
用樹莓派“揪出”家里的耗電怪獸!
樹莓派“吉尼斯世界記錄”:將樹莓派的性能發(fā)揮到極致的項(xiàng)目!
用 樹莓派 Zero 打造的智能漫游車!
用 樹莓派4 打造專屬流媒體控制臺(tái)!
超酷的樹莓派智能鏡項(xiàng)目,快來(lái)了解!
如何使用樹莓派和Python制作語(yǔ)音控制的冰箱
評(píng)論