在我們運行Python程序之前,我們需要安裝兩個庫:語音識別和PyAudio。要安裝這兩個庫,需要在終端窗口中運行以下兩個命令:
$ sudo pip install SpeechRecognition
$ sudo pip install PyAudio
如果您在安裝PyAudio時遇到問題,可以使用以下系列安裝它說明:
$ 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
一旦安裝了這兩個庫,您就需要禁用Raspberry Pi上的板載音頻驅動程序,因為它可能會干擾PyAudio。為此,首先打開一個新終端并運行以下命令:
$ cd /etc/modprobe.d
$ sudo nano alsa-blacklist.conf
Nano是終端的簡單文本編輯器,加載時只需要輸入一行:
blacklist snd_bcm2835
按Ctrl + X退出nano并使用文件名alsa-blacklist.conf保存文件。這個簡單的文件禁用了Raspberry Pi的Broadcom音頻系統,因此Pi上唯一可用的音頻系統是USB聲卡。
語音控制冰箱列表如何工作
Python腳本首先導入語音識別模塊,該模塊用于將口語單詞轉換為字符串。導入模塊后,我們創建一個對象r,它是一個語音識別器對象,用于記錄麥克風的音頻,然后請求轉換。在定義了語音識別對象之后,我們還定義了變量,包括項目列表,命令,當前項目以及包含已解析命令的數組。
import speech_recognition as sr
r = sr.Recognizer()
items = dict()
command = “”
item = “”
初始配置完成后,下一個要執行的代碼塊就是主循環。循環中的第一個任務是通過打印單詞“Speak”通知用戶發言,然后創建一個名為“audio”的音頻對象,它保存我們的麥克風流。
while(1):
with sr.Microphone() as source:
print(“Speak:”)
audio = r.listen(source)
當麥克風檢測到聲音并完成錄制時(當聲級低于閾值時錄制停止),它會將錄制的音頻傳遞給識別器對象。執行此操作后,r將使用Google服務嘗試將音頻轉換為句子,然后將其傳遞給名為speechString的變量。所有這些代碼都在try/except塊中完成,以防音頻被理解或服務不可用。收到的字符串也被解析為prasedCommands,其中分隔符是空格。因此,如果說“添加培根”這個詞,結果將是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]
現在我們擁有我們解析的命令和項目,我們可以將它們添加到我們的項目列表中。但是,為了保持清潔,我們會執行以下幾項檢查:
如果該項目已存在且已添加,則增加項目值
如果該項目不存在且添加了該項目,則將該項目添加到列表中
如果該項目已存在且已刪除,則如果總計大于1則減去1
/li》
如果該項目已存在,則說明已刪除,并且只剩下項目,刪除項目
如果該項目不存在,忽略命令
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”)
這個簡單腳本中的最后一個命令是“display”,它將變量項的內容打印到顯示中。
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()
此項目以Raspberry Pi為中心,除麥克風和顯示器外不需要任何電路或硬件。雖然可以使用普通的顯示器或電視顯示器,但它對于安裝來說并不是很實用,因此在這個項目中,我得到了一個小型的3.5英寸Raspberry Pi顯示器,分辨率為480x320。雖然這對于正常使用而言太小,但它非常適合命令行工作,如果通過網絡編程和使用此Pi(使用SSH),則可以從任何具有Internet連接的PC上運行Python程序。
-
python
+關注
關注
56文章
4827瀏覽量
86751 -
樹莓派
+關注
關注
121文章
2009瀏覽量
107472
發布評論請先 登錄
使用 Betaflight 和樹莓派實現 FPV 無人機自主飛行!

GPIO在樹莓派中的應用
使用樹莓派實現遠程控制的技巧
樹莓派開發的最佳編程語言選擇
樹莓派gpio有什么用,樹莓派gpio接口及編程方法
什么是樹莓派?樹莓派是什么架構的
類樹莓派網關:物聯網應用的新標桿

評論