0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

454398 来源:工程师吴畏 2019-07-31 09:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

安装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程序。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    59

    文章

    4892

    浏览量

    90424
  • 树莓派
    +关注

    关注

    122

    文章

    2086

    浏览量

    110926
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    零成本钢铁侠手套!树莓+OpenCV 秒变手势遥控器!

    大家好,这是一个树莓和OpenCV的连载专题。使用树莓与OpenCV实现姿态估计和面部特征点追踪使用树莓
    的头像 发表于 08-16 16:16 1702次阅读
    零成本钢铁侠手套!<b class='flag-5'>树莓</b><b class='flag-5'>派</b>+OpenCV 秒变手势遥控器!

    如何使用树莓与OpenCV实现面部和运动追踪的云台系统?

    大家好,这是一个树莓和OpenCV的连载专题。使用树莓与OpenCV实现姿态估计和面部特征点追踪使用树莓
    的头像 发表于 08-14 17:45 2750次阅读
    如何使用<b class='flag-5'>树莓</b><b class='flag-5'>派</b>与OpenCV实现面部和运动追踪的云台系统?

    树莓屏幕怎么选?

    树莓很多人都用过,但用屏幕的倒不是很多。不少都是直接远程操作,或者直接接身边的显示设备了。但我觉得给开发板配一个屏幕还是很能提升使用体验的。这次我就介绍一下树莓的屏幕怎么选择。
    的头像 发表于 08-08 14:59 1838次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>屏幕怎么选?

    技能+1!如何在树莓派上使用C++控制GPIO?

    和PiGPIO等库,C++可用于编程控制树莓的GPIO引脚。它提供了更好的性能和控制能力,非常适合对速度和精度要求较高的硬件项目。在树莓
    的头像 发表于 08-06 15:33 4609次阅读
    技能+1!如何在<b class='flag-5'>树莓</b>派上使用C++<b class='flag-5'>控制</b>GPIO?

    树莓操作系统:版本、特性及设置完整指南!

    树莓操作系统是什么?树莓操作系统是由树莓基金会专为树莓
    的头像 发表于 07-28 18:26 2029次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>操作系统:版本、特性及设置完整指南!

    C++ 与 Python树莓派上哪种语言更优?

    Python树莓派上的首选编程语言,我们的大部分教程都使用它。然而,C++在物联网项目中同样广受欢迎且功能强大。那么,在树莓项目中选择哪种语言更合适呢?
    的头像 发表于 07-24 15:32 1223次阅读
    C++ 与 <b class='flag-5'>Python</b>:<b class='flag-5'>树莓</b>派上哪种语言更优?

    工业树莓的高光时刻!树莓工业级 HMI 列阵!

    上海晶珩作为树莓官方设计合作伙伴和代理商,基于树莓技术开发了一系列工业级人机界面(HMI)产品,广泛应用于工业自动化、楼宇控制、智能制造
    的头像 发表于 07-23 18:36 1166次阅读
    工业<b class='flag-5'>树莓</b><b class='flag-5'>派</b>的高光时刻!<b class='flag-5'>树莓</b><b class='flag-5'>派</b>工业级 HMI 列阵!

    树莓5上开启YOLO姿态估计识别之旅!

    AIHat+上|如何编写自定义Python代码YOLO姿态估计在树莓AIHat+上|编写自定义Python代码今天是第二部分:树莓
    的头像 发表于 07-18 15:31 2870次阅读
    在<b class='flag-5'>树莓</b><b class='flag-5'>派</b>5上开启YOLO姿态估计识别之旅!

    树莓5上使用YOLO进行物体和动物识别-入门指南

    AIHat+上|如何编写自定义Python代码YOLO姿态估计在树莓AIHat+上|编写自定义Python代码今天是第一部分:在树莓
    的头像 发表于 07-17 17:16 2420次阅读
    在<b class='flag-5'>树莓</b><b class='flag-5'>派</b>5上使用YOLO进行物体和动物识别-入门指南

    树莓6 传闻:发布日期与规格!

    每当我想再为我的收藏增添一款树莓时,总会在是立即购买还是等待硬件更强大的下一代之间犹豫不决。但新树莓型号的发布往往容易被错过,尤其是在你的信息流被病毒式传播的猫咪视频占据时。因此,
    的头像 发表于 07-11 16:21 3411次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>6 传闻:发布日期与规格!

    树莓小技巧:无需键盘或显示器,如何通过WiFi设置树莓

    树莓是一款小巧便携的USB供电计算机,可以隐藏起来用于小型项目,如网络服务器或家庭自动化。通常,设置树莓需要键盘和显示器来编辑和查看树莓
    的头像 发表于 06-26 15:41 1980次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>小技巧:无需键盘或显示器,如何通过WiFi设置<b class='flag-5'>树莓</b><b class='flag-5'>派</b>?

    树莓分类器:用树莓识别不同型号的树莓

    在本教程系列的第一部分中,您将学习如何使用树莓AI摄像头来检测不同的树莓型号。本系列由DavidPlowman创建,他是树莓
    的头像 发表于 06-13 16:39 1684次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>分类器:用<b class='flag-5'>树莓</b><b class='flag-5'>派</b>识别不同型号的<b class='flag-5'>树莓</b><b class='flag-5'>派</b>!

    关于 树莓5 超频:你需要知道的一切!

    摘要树莓5可通过超频提升性能,对于机器学习等处理器密集型任务尤为有用。超频树莓5时,需将其温度控制在80°C以下。官方
    的头像 发表于 06-10 17:29 3140次阅读
    关于 <b class='flag-5'>树莓</b><b class='flag-5'>派</b>5 超频:你需要知道的一切!

    使用 Betaflight 和树莓实现 FPV 无人机自主飞行!

    开始利用Betaflight飞行控制器、简单的10个Python文件和树莓,为你的FPV战斗无人机构建自己的自动驾驶仪。FPV无人机搭载树莓
    的头像 发表于 06-07 08:32 5687次阅读
    使用 Betaflight 和<b class='flag-5'>树莓</b><b class='flag-5'>派</b>实现 FPV 无人机自主飞行!

    树莓“揪出”家里的耗电怪兽!

    在本应用中,我们将使用树莓设置一个CE电流监测器,并通过网页界面显示电路的电流读数。本项目使用的组件硬件组件树莓2ModelBx112通道20安培电流监测
    的头像 发表于 06-04 15:33 2275次阅读
    用<b class='flag-5'>树莓</b><b class='flag-5'>派</b>“揪出”家里的耗电怪兽!