如何使用树莓派和Python制作语音控制的冰箱

安装python库和配置音频
在我们运行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程序。

线性电源与开关电源的关系
物联网还会有多少变数
LN4890 低成本的单声道1W音频功率放大器
中国联通正式公布了数字通信电缆公开招募结果
嘉元科技:4.5μm极薄锂电铜箔实现小批量生产
如何使用树莓派和Python制作语音控制的冰箱
FF91发布36小时收20亿预订款 中国土豪打飞的现场预订
5G和物联网是互补对网络基础设施带来重大影响
英威腾为码头建设增智添力 科大讯飞获多语言评测XTREME冠军
单通道视频缓冲器MS1631
行人摔倒检测-在英特尔开发套件上基于OpenVINO™ C# API部署PP-Human
四轴mpu6050姿态角卡尔曼滤波代码分析
护眼灯该怎么选,这些你有考虑到吗
骨传导蓝牙耳机哪个牌子好,骨传导耳机品牌排行榜
精准定位市场 长虹激光电视成行业首选
利用经过认证的 LoRaWAN 模块加速远距离连接的开发
小米6Plus什么时候上市?小米6Plus还未发布,手机壳就已上架淘宝,像不像小米6的放大版?
FPGA开发从逻辑设计做起,结合软+硬+系统很重要
软通动力携旗下两家子公司分别与雄安集团达成战略合作
LG化学将2020年电池产能目标提升约29%