13561浏览
查看: 13561|回复: 0

【行空板Python入门教程】第十四课:智能小管家

[复制链接]
本帖最后由 NciJlUN1qMan 于 2022-7-27 10:20 编辑

第十四课、智能小管家
夏季的夜晚,回到家,又黑又热,得找到灯和风扇的按钮才算完事儿,这时候,要是有一个听话的小管家为我们开灯和风扇该多好啊!

这节课上,让我们自己来动手,设计一个智能小管家,使得能够通过语音指令来让它为我们打开灯和风扇吧!

【行空板Python入门教程】第十四课:智能小管家图1


任务目标

调用百度AI开放平台的语音识别接口,实现通过语音来让小管家显示时间,以及控制灯、风扇、蜂鸣器等硬件设备的开关。

【行空板Python入门教程】第十四课:智能小管家图2


知识点

1、了解语音识别的一般过程

2、学习通过调用百度语音平台接口实现将语音转换成文字的方法

3、学习通过unihiker库录制语音的方法

4、学习通过schedule库设置定时任务的方法

材料清单

硬件清单:

【行空板Python入门教程】第十四课:智能小管家图3


软件使用:Mind+编程软件x1

知识储备

1、什么是语音识别

语音识别是以语音为研究对象,通过语音信号处理和模式识别让机器自动识别和理解人类口述的语言,其最大优势在于使得人机用户界面更加友好和容易使用。

语音识别一般会经历以下基本过程:通过数模转化得到一个数字声音信号,再对该声音信号进行预处理和特征提取,将该特征在声学模型中进行模式匹配得到音素序列,最后对该音素序列在语言模型中查找概率最高的文本,并输出识别结果。语音识别的过程如下图所示。

【行空板Python入门教程】第十四课:智能小管家图4


上述过程看起来很复杂,那么我们有没有什么简单的方法或工具来实现语音识别呢?

事实上,百度、腾讯、华为等人工智能开放平台集成了大量的声学模型和语言模型。通过这些平台提供的软件开发工具包,可以把录制的声音传送到平台进行识别,并返回识别结果。

这节课上,我们就将使用百度开放平台,我们只需要提供相应的语音文件,然后调用百度语音识别的接口,就可以实现将音频文件转换为文字信息啦。

【行空板Python入门教程】第十四课:智能小管家图5


2、unihiker库Audio类record()方法录制语音

unihiker库Audio类的record()方法可以录制语音,在使用前,我们需要先导入库中的这个模块并通过实例化类的方式创建一个对象,之后,通过“对象.方法名()”的形式来实现功能。

  1. from unihiker import Audio  # 导入unihiker库中的Audio模块
  2. audio = Audio() # 实例化音频
  3. audio.record("record.wav",3) # 录音3秒
复制代码

其中,“record.wav”是录制语音生成的音频文件,“3”指的是录制的时间,单位是秒。

3、schedule库设置定时功能

Python中的schedule库可以实现定时功能。使用时,需要先通过“import schedule”的方式导入它,然后,以定义函数的形式设定一个任务,再通过“every()”函数结合时间来设定定时执行该任务,之后通过“run_pending()”函数结合循环不停得查询该任务。当查询到时,方可生效定时执行。

  1. import schedule
  2. alarm_time="18:00:00" # 闹钟定时的时间,可修改
  3. def job():#以定义函数的形式设定一个任务
  4.     tone.on()  # 打开蜂鸣器
  5.     time.sleep(5.5) # 延时5.5秒
  6.     tone.off() # 关闭蜂鸣器
  7. schedule.every().day.at(alarm_time).do(job) # 设定定时执行任务
  8. while True:
  9.     schedule.run_pending() # 查询任务,查询到时定时执行任务功能才生效
  10.     time.sleep(0.5) # 延迟
复制代码

其中,alarm_time指的是做任务的时间,day指的是一天,整体上,表示在每天的18:00:00这个时间点进行job任务。

4、aip库AipSpeech类asr()方法识别语音文件并返回信息

aip是百度提供的基于Python语言的SDK(软件开发工具包),主要用于人工智能相关功能的开发,AipSpeech是百度语音识别、语音合成的Python SDK客户端。

这里,我们可以简单点理解,aip就类似一个Python的第三方库,AipSpeech类似这个库下的模块,而其下的asr()方法可以实现识别语音文件后返回文本信息,在使用前,我们需要先导入库中的这个模块,之后,通过实例化类的形式来创建客户端对象,以连接平台,之后,通过“对象.方法名()”的形式来实现功能。

  1. from aip import AipSpeech # 导入百度语音库
  2. client = AipSpeech (APP_ID, API_KEY, SECRET_KEY)
  3. res = client.asr (file_context, 'pcm', 16000, {'dev_pid': 1537, })
复制代码

其中,括号内的“APP_ID”、“API_KEY”、“SECRET_KEY”是三个用于连接百度语音平台的接口参数,用于标识用户,为访问做签名验证。这就类似于我们平时使用微信社交账户,需要先输入账号、密码等关键信息,登录成功后方可使用其功能。“client”是个变量,用于存储生成的客户端对象。“file_context”指代要识别的文件,“pcm”是指文件的格式,“16000”指采样率,“{'dev_pid':1537,}”指的是语言,1537代表普通话。

动手实践

任务描述1:语音控制时间显示

说出“时间”二字,智能小管家能够识别成功,并且能够执行将系统时间显示在屏幕上的操作

1、硬件搭建

通过USB连接线将行空板连接到计算机

2、分析设计

在这个任务中,我们将完成语音的录制,并将录制的语音文件传给百度语音平台进行识别,再对识别的结果进行判别,当结果中有“时间”二字时,控制小管家的屏幕显示系统当前的时间。

【行空板Python入门教程】第十四课:智能小管家图6

3、程序编写

STEP1:创建与保存项目文件

启动Mind+,另存项目并命名为“014、智能小管家”。

STEP2:创建与保存Python文件

创建一个Python程序文件“main1.py”,双击打开。

STEP3:导入图片

在项目文件夹中导入背景图。(图片下载链接见附录1)

STEP4:程序编写

(1)导入所需库

在这个任务中,我们需要使用datetime库来检测系统时间,使用unihiker库的Audio模块和GUI模块来实现语音录制和屏幕显示,通过aip库的AipSpeech模块来进行语音识别,以及借助Pinpong库来使用板载按键,因此我们需要先导入它们。

  1. '''语音识别,语音控制屏幕显示时间,
  2. 按下按键A,口述时间二字,屏幕显示系统当前时间'''
  3. import time # 导入时间库   
  4. import datetime # 导入datetime库
  5. from unihiker import Audio, GUI
  6. from aip import AipSpeech # 导入百度语音库
  7. from pinpong.board import Board,Pin # 导入pinpong库
  8. from pinpong.extension.unihiker import * # 导入pinpong.extension.unihiker库所有模块
复制代码

(2)初始化板子

之后,我们初始化板子,创建音频和GUI对象以便后续使用相关功能。

  1. Board().begin() # 初始化板子
  2. audio = Audio() # 实例化音频
  3. gui = GUI() # 实例化gui对象
复制代码

(3)显示背景图和初始文字

接着,我们导入一张背景图,并在屏幕上显示初始内容。

  1. # 显示背景图片和文字
  2. img = gui.draw_image(w=240, h=320, image='bot-02.png')
  3. text_value = gui.draw_text(x=40, y=30, w=150, color="red", text="按下按键说话",font_size=10)
  4. text_value_2 = gui.draw_text(x=65, y=125, w=150, color="red", text="你好呀",font_size=10)
复制代码

(4)设置接口参数

在连接百度语音平台时需要提供接口参数,这里,我们先定义好以便后续直接使用。

Tips:接口参数获取方式可参考附录2

  1. # 定义连接百度语音平台所需接口参数(类似于密钥)
  2. APP_ID = ""  # 引号内填写账号的APP_ID
  3. API_KEY = '' # 引号内填写账号的API_KEY
  4. SECRET_KEY = '' # 引号内填写账号的SECRET_KEY
复制代码

(5)定义语音转字符函数

之后,我们定义一个语音转字符的功能函数,在这个函数中,我们需要做四个操作。第一,连接上百度云平台;第二,打开录制的语音文件,读取其中的信息并将其存入变量file_context中;第三,将语音信息发送给百度云平台进行处理,接收反馈信息并将其存入变量res中;第四,获取信息中的文本内容,如果获取不到,则进行提醒。

  1. # 定义语音转字符串函数,输入语音文件文件名,反馈一个识别内容(打印内容自选)
  2. def audio_to_text(pcm_file):
  3.     client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) # 创建一个客户端对象,连接百度云平台
  4.     # 打开语音文件并读取,读取信息存入file_context
  5.     with open(pcm_file,'rb') as fp:
  6.         file_context = fp.read()
  7.     # 向百度云发出请求,百度云反馈字典格式信息(1536、1537可修改,变化不大)
  8.     res = client.asr(file_context, 'pcm', 16000, {'dev_pid': 1537,})
  9.     try:
  10.         res_str = res.get("result")[0] # 获取信息中的文本内容
  11.         print('语音转文字成功:',res_str) # 只打印关键的语音文本信息
  12.         return res_str # 返回该文本信息
  13.     except Exception: #(大部分错误是清晰度问题,具体请查看《https://cloud.baidu.com/doc/SPEECH/s/sk38lxie0》)
  14.         print('语音转文字失败,请保证电脑联网并注意语言清晰度')
  15.         print('错误信息:',res) # 打印所有反馈信息,主要用于检查有无错误(包含错误码等等)
复制代码

(6)语音控制时间显示

最后,我们添加功能,当按键a被按下后,录制3秒的语音,之后调用语音转字符函数,将音频文件发送至百度语音平台并获取平台返回的文本信息。

接着我们再对文本信息进行判别,当文本内容中包含了“时间”二字,则检测当前的系统时间并将其显示在屏幕上。

同时,为了确保上述功能永久成立,在编程时,我们将对按键a的监测放在循环中实现。

  1. while True:
  2.     if button_a.is_pressed(): # 如果板载按键a被按下
  3.         print("开始录音3秒")
  4.         text_value_2.config(text = "我在听")
  5.         audio.record("record.wav",3) # 录音3秒
  6.         print("正在转换")
  7.         text_value_2.config(text = "我在识别")
  8.         res_str=audio_to_text("record.wav") # 调用函数将录音发出,云端反馈文本并打印
  9.         print(res_str)
  10.         text_value.config(text= res_str) # 显示识别结果
  11.         text_value_2.config(text = "识别完了")
  12.         # 文本内容检测
  13.         if '时间' in res_str: # 如果检测到"时间"二字
  14.             #str_time = datetime.datetime.now()
  15.             text_value_2.config(text = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) # 屏幕显示现在的时间(格式:年-月-日-时_分_秒)
  16.             time.sleep(2)
复制代码

Tips:完整示例程序如下:

  1. '''语音识别,语音控制屏幕显示时间,
  2. 按下按键A,口述时间二字,屏幕显示系统当前时间'''
  3. import time # 导入时间库   
  4. import datetime # 导入datetime库
  5. from unihiker import Audio, GUI
  6. from aip import AipSpeech # 导入百度语音库
  7. from pinpong.board import Board,Pin # 导入pinpong库
  8. from pinpong.extension.unihiker import * # 导入pinpong.extension.unihiker库所有模块
  9. Board().begin() # 初始化板子
  10. audio = Audio() # 实例化音频
  11. gui = GUI() # 实例化gui对象
  12. # 显示背景图片和文字
  13. img = gui.draw_image(w=240, h=320, image='bot-02.png')
  14. text_value = gui.draw_text(x=40, y=30, w=150, color="red", text="按下按键说话",font_size=10)
  15. text_value_2 = gui.draw_text(x=65, y=125, w=150, color="red", text="你好呀",font_size=10)
  16. # 定义连接百度语音平台所需参数(类似于密钥)
  17. APP_ID = ""  # 引号内填写账号的APP_ID
  18. API_KEY = '' # 引号内填写账号的API_KEY
  19. SECRET_KEY = '' # 引号内填写账号的SECRET_KEY
  20. # 定义语音转字符串函数,输入语音文件文件名,反馈一个识别内容(打印内容自选)
  21. def audio_to_text(pcm_file):
  22.     client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) # 创建一个客户端对象,连接百度云平台
  23.     # 打开语音文件并读取,读取信息存入file_context
  24.     with open(pcm_file,'rb') as fp:
  25.         file_context = fp.read()
  26.     # 向百度云发出请求,百度云反馈字典格式信息(1536、1537可修改,变化不大)
  27.     res = client.asr(file_context, 'pcm', 16000, {'dev_pid': 1537,})
  28.     try:
  29.         res_str = res.get("result")[0] # 获取信息中的文本内容
  30.         print('语音转文字成功:',res_str) # 只打印关键的语音文本信息
  31.         return res_str # 返回该文本信息
  32.     except Exception: #(大部分错误是清晰度问题,具体请查看《https://cloud.baidu.com/doc/SPEECH/s/sk38lxie0》)
  33.         print('语音转文字失败,请保证电脑联网并注意语言清晰度')
  34.         print('错误信息:',res) # 打印所有反馈信息,主要用于检查有无错误(包含错误码等等)
  35.         
  36. while True:
  37.     if button_a.is_pressed(): # 如果板载按键a被按下
  38.         print("开始录音3秒")
  39.         text_value_2.config(text = "我在听")
  40.         audio.record("record.wav",3) # 录音3秒
  41.         print("正在转换")
  42.         text_value_2.config(text = "我在识别")
  43.         res_str=audio_to_text("record.wav") # 调用函数将录音发出,云端反馈文本并打印
  44.         print(res_str)
  45.         text_value.config(text= res_str) # 显示识别结果
  46.         text_value_2.config(text = "识别完了")
  47.         # 文本内容检测
  48.         if '时间' in res_str: # 如果检测到"时间"二字
  49.             #str_time = datetime.datetime.now()
  50.             text_value_2.config(text = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) # 屏幕显示现在的时间(格式:年-月-日-时_分_秒)
  51.             time.sleep(2)
复制代码

Tips:须在程序中填入语音平台的APP_ID、API_KEY、SECRET_KEY三个接口参数。

4、程序运行

STEP1:连接网络

【行空板Python入门教程】第十四课:智能小管家图7

STEP2:远程连接行空板并运行

STEP3:按下板载按键a后根据提示,口述“时间”二字,完成3秒语音的录制

【行空板Python入门教程】第十四课:智能小管家图8

STEP4:观察效果

观察行空板,可以看到在开始时屏幕提示我们按下按键并说话录音,之后,当我们说完“时间”二字后,小管家则立马将当前的系统时间在屏幕上告知了我们。而当我们说出别的指令时,小管家则只能告诉我们识别完成。

【行空板Python入门教程】第十四课:智能小管家图9


任务描述2:语音控制硬件开关

在上个任务中,我们实现了通过语音来让小管家在屏幕上提醒我们时间,接下来,我们将进一步结合硬件,完善小管家的功能,使得其能够依据我们的语音指令来控制硬件开关。

1、硬件搭建

STEP1:将LED灯接入行空板的P23引脚,风扇接入行空板的P24引脚

【行空板Python入门教程】第十四课:智能小管家图10


2、分析设计

在这个任务中,我们将继续对识别的结果进行判别,当结果为“开灯”、“关灯”、“开风扇”、“关风扇”、“开闹钟”、“关闹钟”时,使得小管家控制硬件设备执行相应的操作并在屏幕上显示已完成,否则提示无法理解语音。

【行空板Python入门教程】第十四课:智能小管家图11

3、程序编写

STEP1:创建与保存项目文件

新建一个Python程序文件“main2.py”,双击打开。

Step2:程序编写

(1)导入所需功能库

由于我们将使用schedule库来设置定时闹钟,因此,我们需要补充导入它。

  1. import schedule # 导入schedule库
复制代码

(2)初始化引脚

为了能借助Pinpong库控制LED、风扇和蜂鸣器,这里,我们需要先对其进行引脚的初始化操作,并对蜂鸣器设置好发声的频率。

  1. led = Pin(Pin.P23, Pin.OUT) # 定义P23数字引脚为灯控制端
  2. fan = Pin(Pin.P24, Pin.OUT) # 定义P24数字引脚为风扇控制端
  3. tone = Tone(Pin(Pin.P26)) # 将Pin传入Tone中实现模拟输出
  4. tone.freq(200) # 按照设置的频率200播放
复制代码

(3)设置闹钟时间和标记

之后,为了能通过语音来控制闹钟的开关,我们首先需设定好闹钟定时的时间,再添加一个变量来作为控制闹钟开关的标记,并使其初始时为False。

  1. alarm_time="18:00:30" # 闹钟定时的时间,可修改
  2. alarm_flag=False # 闹钟控制变量,设为False不执行定时任务的查询,继而闹钟保持关闭
复制代码

(4)定义闹钟功能函数并启动它

接下来,我们定义一个闹钟功能函数,在这个函数中,我们需要做三个操作。第一,我们把蜂鸣器发声5.5秒定义为一个任务;第二,每天定时执行该任务;第三,在循环中检测闹钟的控制变量,当它为True时,执行任务的查询工作以开启定时闹钟。最后我们将这个函数作为一个线程启动起来。

  1. # 定义定时更新函数
  2. def schedule_update():
  3.     # 闹钟到时间后执行的任务
  4.     def job():
  5.         tone.on()  # 打开蜂鸣器
  6.         time.sleep(5.5) # 延时5.5秒
  7.         tone.off()
  8.     schedule.every().day.at(alarm_time).do(job) # 定时执行任务
  9.     while True:
  10.         if alarm_flag == True: # 只有闹钟控制变量为True才执行查询任务,继而开启闹钟
  11.             schedule.run_pending() # 查询任务
  12.         time.sleep(0.5) # 延迟
  13. gui.start_thread(schedule_update) # 启动闹钟线程
复制代码

(5)语音控制硬件开关

最后,我们在按下按键录制完语音后,将音频文件发送至百度语音平台并获取平台返回的文本信息。再对语音中文本内容进行检测判别,当识别出文本中有“开灯”二字后,控制LED打开,识别出“关灯”后,控制LED关闭,识别出“开风扇”、“关风扇”、“开闹钟”、“关闹钟”后,执行相应的操作。

  1. while True:
  2. if button_a.is_pressed():
  3.         print("开始录音3秒")
  4.         text_value_2.config(text = "我在听")
  5.         audio.record("record.wav",3) # 录音3秒
  6.         print("正在转换")
  7.         text_value_2.config(text = "我在识别")
  8.         res_str=audio_to_text("record.wav") # 调用函数将录音发出,云端反馈文本并打印
  9.         print(res_str)
  10.         text_value.config(text= res_str) # 显示识别结果
  11.         text_value_2.config(text = "识别完了")
  12.         # 文本内容检测
  13.         if '开灯' in res_str:
  14.             led.write_digital(1) # 如果识别语音中有“开灯”,点亮灯
  15.             text_value_2.config(text = "好的,灯开了")
  16.             time.sleep(2)
  17.         elif '关灯' in res_str:
  18.             led.write_digital(0) # 如果识别语音中有“关灯”,熄灭灯
  19.             text_value_2.config(text = "好的,灯已关")
  20.             time.sleep(2)
  21.         elif '开风扇' in res_str:
  22.             fan.write_digital(1) # 如果识别语音中有“开风扇”,开风扇
  23.             text_value_2.config(text = "风扇已开")
  24.             time.sleep(2)
  25.         elif '关风扇' in res_str:
  26.             fan.write_digital(0) # 如果识别语音中有“关风扇”,关风扇
  27.             text_value_2.config(text = "风扇已关")
  28.             time.sleep(2)
  29.         elif '时间' in res_str:
  30.             #str_time = datetime.datetime.now()
  31.             text_value_2.config(text = datetime.datetime.now().strftime('%Y-%m-%d-%H_%M_%S')) # 如果识别语音中有“时间”,打印时间
  32.             time.sleep(2)
  33.         elif '开闹钟' in res_str:
  34.             alarm_flag=True # 如果识别语音中有“开闹钟”,设置闹钟控制变量为True,继而开闹钟
  35.             text_value_2.config(text = "闹钟已开")
  36.             time.sleep(2)
  37.         elif '关闹钟' in res_str:
  38.             alarm_flag=False # 如果识别语音中有“关闹钟”,设置闹钟控制变量为False,继而关闹钟
  39.             text_value_2.config(text = "闹钟已关")
  40.             time.sleep(2)
  41.         else:
  42.             text_value_2.config(text = "我不太理解你说的")
  43.             time.sleep(2)
复制代码

Tips:完整示例程序如下:

  1. '''语音识别,语音控制开关灯、开关风扇、设置闹钟的开启
  2. 按下按键A,口述开灯、关灯、开风扇、关风扇、时间、开闹钟、关闹钟,执行相应操作'''
  3. import time # 导入时间库   
  4. from unihiker import Audio, GUI
  5. import datetime # 导入datetime库
  6. from aip import AipSpeech # 导入百度语音库
  7. from pinpong.board import Board,Pin,Tone # 导入 pinpong库Board,Pin,Tone模块
  8. from pinpong.extension.unihiker import * # 导入 pinpong.extension.unihiker中的模块
  9. import schedule # 导入schedule库
  10. Board().begin() # 初始化板子
  11. led = Pin(Pin.P23, Pin.OUT) # 定义P23数字引脚为灯控制端
  12. fan = Pin(Pin.P24, Pin.OUT) # 定义P24数字引脚为风扇控制端
  13. tone = Tone(Pin(Pin.P26)) # 将Pin传入Tone中实现模拟输出
  14. tone.freq(200) # 按照设置的频率200播放
  15. audio = Audio() # 实例化音频
  16. gui = GUI()  # 实例化gui对象
  17. # 显示背景图片和文字
  18. img = gui.draw_image(w=240, h=320, image='bot-02.png')
  19. text_value = gui.draw_text(x=40, y=30, w=150, color="red", text="按下按键说话",font_size=10)
  20. text_value_2 = gui.draw_text(x=65, y=125, w=150, color="red", text="你好呀",font_size=10)
  21. # 定义连接百度语音平台所需参数(类似于密钥)
  22. APP_ID = ""  # 引号内填写账号的APP_ID
  23. API_KEY = '' # 引号内填写账号的API_KEY
  24. SECRET_KEY = '' # 引号内填写账号的SECRET_KEY
  25. # 定义语音转字符串函数,输入语音文件文件名,反馈一个识别内容(打印内容自选)
  26. def audio_to_text(pcm_file):
  27.     client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)  # 创建百度云客户端连接
  28.     # 打开语音文件并读取,读取信息存入file_context
  29.     with open(pcm_file,'rb') as fp:
  30.         file_context = fp.read()
  31.     # 向百度云发出请求,百度云反馈字典格式信息(1536、1537可修改,变化不大)
  32.     res = client.asr(file_context, 'pcm', 16000, {'dev_pid': 1537,})
  33.     try:
  34.         res_str = res.get("result")[0] # 获取信息中的文本内容
  35.         print('语音转文字成功:',res_str) # 只打印关键的语音文本信息
  36.         return res_str  # 返回该文本信息
  37.     except Exception: #(大部分错误是清晰度问题,具体请查看《https://cloud.baidu.com/doc/SPEECH/s/sk38lxie0》)
  38.         print('语音转文字失败,请保证电脑联网并注意语言清晰度')
  39.         print('错误信息:',res)  # 打印所有反馈信息,主要用于检查有无错误(包含错误码等等)
  40. alarm_time="18:00:30" # 闹钟定时的时间,可修改
  41. alarm_flag=False # 闹钟控制变量,设为False不执行定时任务的查询,继而闹钟保持关闭
  42. # 定义定时更新函数
  43. def schedule_update():
  44.     # 闹钟到时间后执行的任务
  45.     def job():
  46.         tone.on()  # 打开蜂鸣器
  47.         time.sleep(5.5) # 延时5.5秒
  48.         tone.off()
  49.     schedule.every().day.at(alarm_time).do(job) # 定时执行任务
  50.     while True:
  51.         if alarm_flag == True: # 只有闹钟控制变量为True才执行查询任务,继而开启闹钟
  52.             schedule.run_pending() # 查询任务
  53.         time.sleep(0.5) # 延迟
  54. gui.start_thread(schedule_update) # 启动闹钟线程
  55. while True:
  56.     if button_a.is_pressed():
  57.         print("开始录音3秒")
  58.         text_value_2.config(text = "我在听")
  59.         audio.record("record.wav",3) # 录音3秒
  60.         print("正在转换")
  61.         text_value_2.config(text = "我在识别")
  62.         res_str=audio_to_text("record.wav") # 调用函数将录音发出,云端反馈文本并打印
  63.         print(res_str)
  64.         text_value.config(text= res_str) # 显示识别结果
  65.         text_value_2.config(text = "识别完了")
  66.         # 文本内容检测
  67.         if '开灯' in res_str:
  68.             led.write_digital(1) # 如果识别语音中有“开灯”,点亮灯
  69.             text_value_2.config(text = "好的,灯开了")
  70.             time.sleep(2)
  71.         elif '关灯' in res_str:
  72.             led.write_digital(0) # 如果识别语音中有“关灯”,熄灭灯
  73.             text_value_2.config(text = "好的,灯已关")
  74.             time.sleep(2)
  75.         elif '开风扇' in res_str:
  76.             fan.write_digital(1) # 如果识别语音中有“开风扇”,开风扇
  77.             text_value_2.config(text = "风扇已开")
  78.             time.sleep(2)
  79.         elif '关风扇' in res_str:
  80.             fan.write_digital(0) # 如果识别语音中有“关风扇”,关风扇
  81.             text_value_2.config(text = "风扇已关")
  82.             time.sleep(2)
  83.         elif '时间' in res_str:
  84.             #str_time = datetime.datetime.now()
  85.             text_value_2.config(text = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) # 如果识别语音中有“时间”,打印时间
  86.             time.sleep(2)
  87.         elif '开闹钟' in res_str:
  88.             alarm_flag=True #如果识别语音中有“开闹钟”,设置闹钟控制变量为True,继而开闹钟
  89.             text_value_2.config(text = "闹钟已开")
  90.             time.sleep(2)
  91.         elif '关闹钟' in res_str:
  92.             alarm_flag=False #如果识别语音中有“关闹钟”,设置闹钟控制变量为False,继而关闹钟
  93.             text_value_2.config(text = "闹钟已关")
  94.             time.sleep(2)
  95.         else:
  96.             text_value_2.config(text = "我不太理解你说的")
  97.             time.sleep(2)
复制代码

Tips:须在程序中填入语音平台的APP_ID、API_KEY、SECRET_KEY三个接口参数。

4、程序运行

STEP1:远程连接行空板并运行

STEP2:录制语音并观察效果

按下板载按键a,根据提示,说出“开灯”,可以发现LED很快亮了起来。

再用同样的方式告诉小管家“关灯”、“开风扇”、“关风扇”、“开闹钟”、“关闹钟”,可以发现小管家听话得按我们的要求完成了相应的任务。

其中,在开启闹钟后,当到达我们设定的18:00:30后,蜂鸣器开始响起5.5秒。而在关闭闹钟后,可以发现即使达到时间,蜂鸣器也不再响起。

【行空板Python入门教程】第十四课:智能小管家图12

【行空板Python入门教程】第十四课:智能小管家图13


STEP3:继续按下按键a,说出“你好呀”观察效果。

当检测到的内容不在我们设定的范围中时,小管家则会给我们提醒。

【行空板Python入门教程】第十四课:智能小管家图14

挑战自我

1、对于可以听懂我们说话的智能小管家,你还希望它能为我们做什么呢,自己想一想,添加上去吧!

2、假如我们每天回家的时间固定,尝试修改程序,为小管家再添加一个功能:在每天晚上6点时自动打开灯和风扇!

附录

附录1:背景图链接

链接:

https://pan.baidu.com/s/1drYKiRwh0T61XS1a4jdO4g

提取码:ro3b

附录2:百度接口参数获取

STEP1:进入百度云网站

点击进入下列网站:https://cloud.baidu.com/

STEP2:注册并登录百度云账号,

【行空板Python入门教程】第十四课:智能小管家图15

STEP3:登录成功后,在右上角个人账号中点击“用户中心”,点击左上角的,找到“产品服务”中的“语音技术”,并点击进入。

【行空板Python入门教程】第十四课:智能小管家图16

【行空板Python入门教程】第十四课:智能小管家图17


STEP4:创建应用

在新页面中点击“创建应用”,应用名称和应用描述任意填写。

【行空板Python入门教程】第十四课:智能小管家图18

【行空板Python入门教程】第十四课:智能小管家图19

STEP5:记录接口参数

创建好应用后,点击“返回应用列表”,找到我们创建的应用后,我们需要记录下生成的三个接口参数APP_ID、API_KEY、SECRET_KEY,以便后续在程序中连接百度语音平台时能够使用。

【行空板Python入门教程】第十四课:智能小管家图20

【行空板Python入门教程】第十四课:智能小管家图21

STEP6:领取资源

最后,最重要地,为了使得应用的接口参数能够使用,我们一定要领取好额度。

这里,我们返回概览后,点击“领取免费资源”,选上全部接口后点击“0元领取”即可。

【行空板Python入门教程】第十四课:智能小管家图22

【行空板Python入门教程】第十四课:智能小管家图23

Tip1:随着百度云网站的更新,上述步骤可能略有调整,但整体思路不变,即获取有额度的语音技术接口参数。

Tip2: 每个百度云账号目前都支持领取一次免费的额度。如已无该资格,可尝试依据百度相关政策操作。



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail