2021-12-1 14:16:38 [显示全部楼层]
620浏览
查看: 620|回复: 0

Mind+Python编程与智能进阶教程——08智能语音开关

[复制链接]
本帖最后由 木子呢 于 2021-12-1 14:23 编辑

Mind+Python编程与智能进阶教程——08智能语音开关


课程目录:

一、实践情境


与机器进行语音交流,让机器明白我们说什么,这是人们长期以来梦寐以求的事情。

现如今,在国家的大力发展下,我国在语音识别、机器视觉、人脸识别、指纹识别等人工智能基础性技术上不断取得突破,许多曾经的梦想逐渐转变为现实。

qw1.jpg

二、实践目标

本实践项目运用micro:bit作为智能终端,结合继电器硬件来设计一个智能语音开关。通过语音来与智能终端进行交流,继而控制继电器的开关。

三、知识目标

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

2、掌握运用micro:bit作为智能终端,通过Python编程将语音转换成文字的方式

3、掌握运用micro:bit作为智能终端,通过Python编程实现语音控制智能硬件的方式

四、实践准备

硬件清单:

qw2.jpg

软件使用: Mind+编程软件

其他

1、十字/一字两用螺丝刀 x1

2、家用迷你小风扇 x1

qw3.jpg

五、实践过程
在本项目中,我们将分三步,设计一个智能语音开关,实现通过语音来控制继电器开关。

1、录制语音并将其转换成文字

2、语音控制micro:bit点阵屏显示笑脸

3、添加继电器,实现语音控制继电器开关

任务1:语音转文字

1. 分析设计

在这个任务中,我们将完成语音的录制,并将录制的语音文件转换为文字显示在Mind+终端界面。

这里,我们可先调用录音程序利用电脑麦克风录制语音,再借助百度AI开放平台的语音识别技术,将音频中的特征进行提取,并调用已有的识别引擎,识别所输入的语音,最终转换成文字显示在软件终端。

qw4.jpg

由于我们需要使用到百度AI平台的语音识别技术,因此,我们需提前创建好百度AI账户并获取密钥。

对于语音转换成文字的效果实现,我们分步骤进行,具体流程如下,

qw5.jpg

2. 获取百度AI平台账户密钥

STEP1:
进入百度云网站

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


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

qw6.jpg

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

qw7.jpg

qw8.jpg


qw9.jpg

STEP4:创建应用

在新页面中点击“创建应用”,应用名称和应用描述任意填写,无需企业认证,将“语音技术”、“文字识别”、“图像识别”、“人体分析”全部勾选,(有些目前用不上,但是都可以勾选,后续用得上)。

qw10.jpg

qw11.jpg

qw12.jpg

qw13.jpg

添加成功后点击“返回应用列表”,这样在列表中就可以看到我们新添加的应用了

qw14.jpg

STEP5:领取资源

分别点击“语音识别”和“语音合成”的“领取免费资源”,选上全部接口后点击“0元领取”即可。

qw15.jpg

qw16.jpg

qw17.jpg

STEP6:记录关键参数

领取完资源后,回到应用列表,找到我们需要的应用和对应的APPID、API Key、Secret Key,将其记录下来,这三个中的关键参数都是我们后续代码中所需要的。

qw18.jpg

3. 软件编写

在编写语音识别的代码之前,我们首先需要先手动编写录音程序以便在后续调用,之后安装所需要的库,最后便是项目任务一主程序的编写。

Tips:录音程序已提供,附录1可见。

软件设置:

STEP1:创建与保存项目文件

启动Mind+软件,选择“Python模式”,另存项目并命名为“m智能语音开关”。

STEP2:创建与保存Python文件

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

安装库:

STEP1:
安装百度AI库

在“库管理”的“PIP模式”下输入“pip install baidu-aip”,并点击运行进行安装。

qw19.jpg

STEP2:安装实现录音需要的PyAudio库

在“库管理”的“PIP模式”下输入“pip install PyAudio”,并点击运行进行安装。

qw20.jpg

编写录音程序文件:

(1)在“任务一.py”的同级目录下,新建一个“pyrec1.py”程序文件,将附录1 中的录音程序代码写入并保存。

qw21.jpg

程序编写、运行及回顾:

STEP1:编写Python程序
  1. import pyrec1 #导入录音程序文件
  2. from aip import AipSpeech #导入百度语音识别库
  3. import time #导入时间库
  4. #和我们百度AI开放平台中创建的应用的三个参数一致,按照自己所创建的应用参数对应进行替换
  5. APP_ID = '' #填入APP_ID信息
  6. API_KEY = ''#填入API_KEY信息
  7. SECRET_KEY = ''#填入SECRET_KEY信息
  8. client = AipSpeech(APP_ID,API_KEY,SECRET_KEY) #创建百度云客户端连接
  9. file_name_record='record.wav' #音频文件保存名
  10. pyrec1.record(file_name_record) #录音
  11. print("正在转换") # 打印“正在转换”
  12. #打开语音文件并读取,读取信息存入file_context
  13. with open(file_name_record,'rb') as fp:
  14.     file_context = fp.read()
  15. #向百度云发出请求,百度云反馈字典格式信息
  16. res = client.asr (file_context, 'wav', 16000, {'dev_pid': 1537,})
  17. print(res) #打印出识别到的结果
  18. res_str = res.get ("result") [0] #获取信息中的文本内容
  19. print('语音转文字成功:',res_str)#只打印关键的语音文本信息
复制代码

Tips:须在程序中填入对应的APPID、API Key、Secret Key三个参数。

STEP2:运行程序并观察效果

(1)运行程序,并录制语音

点击运行,可以看到终端内显示“开始录音,请说话”的提示字样,之后对着电脑任意说两三秒语音。

qw22.jpg

(2)观察终端界面

三秒后可以在终端看到结束提示,之后就能得到经过语音识别转换而来的语音信息及中文显示了。

Tips:这里,我们说的语音为“上海自来水来自海上”。

qw23.jpg

(3)观察文件信息栏

同时,刷新右侧文件信息栏后可以看到有新生成的两个语音文件,这就是我们刚才录制的语音得到的音频文件。

Tips:可以打开音频文件用播放器听一听自己刚才录制的语音哦。

qw24.jpg

STEP3:回顾程序

qw25.jpg

4. 调试修改

在实验时,说话的字数长短可能会影响识别的准确率,让我们多次实验,录制不同长度的语音,看一看文字长短与准确率之间的关系如何吧。

qw26.jpg

事实上,在识别的过程中,录制的语音可能会受文字长短、普通话标准与否、语速快慢等因素的影响而识别出错。因此,录制语音时需注意这些细节哦!

任务2:语音控制笑脸显示

1.分析设计

在上个任务中,我们已经成功地将语音转化为文字输出在Mind+软件终端。接下来,我们将在此基础上结合micro:bit智能硬件对识别出来的文字进行判别,实现通过语音来控制micro:bit显示笑脸。

这里,我们可将micro:bit开发板与计算机相连,之后录制指定的语音使百度AI平台进行识别,识别正确控制点阵屏秀一个笑脸。

qw27.jpg


2.硬件搭建

通过USB连接线将micro:bit接到计算机。

qw28.jpg

3.软件编写

软件设置:

STEP1:
创建与保存Python文件

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

程序编写、运行及回顾:

STEP1:
编写Python程序

  1. import pyrec1 #导入录音程序文件
  2. from aip import AipSpeech #导入百度语音识别库
  3. import time #导入时间库
  4. from pinpong.board import Board #导入pinpong.board包中的Board模块
  5. from pinpong.extension.microbit import * #导入pinpong.extension.microbit中所有模块
  6. Board("microbit").begin() #初始化,选择板型和端口号,不输入端口号则进行自动识别
  7. #和我们百度AI开放平台中创建的应用的三个参数一致,按照自己所创建的应用参数对应进行替换
  8. APP_ID = ''
  9. API_KEY = ''
  10. SECRET_KEY = ''
  11. client = AipSpeech(APP_ID,API_KEY,SECRET_KEY) #创建百度云客户端连接
  12. file_name_record = 'record.wav' #音频文件保存名
  13. while True: #循环执行
  14.     if button_a.is_pressed() == 1: #按下板载按钮A
  15.         pyrec1.record(file_name_record) #录音
  16.         print("正在转换") # 打印“正在转换”
  17.         #打开语音文件并读取,读取信息存入file_context
  18.         with open(file_name_record,'rb') as fp:
  19.             file_context = fp.read()
  20.         #向百度云发出请求,百度云反馈字典格式信息
  21.         res = client.asr (file_context, 'wav', 16000, {'dev_pid': 1537,})
  22.         print(res) #打印出识别到的结果
  23.         res_str = res.get ("result") [0] #获取信息中的文本内容
  24.         print('语音转文字成功:',res_str)#只打印关键的语音文本信息
  25.         if '你好' in res_str: #判断识别结果中是否有“你好”二字,如果有则反馈显示笑脸
  26.             display.show(Image.HAPPY)
  27.         else:
  28.             display.show(Image.SAD)
复制代码

Tips:须在程序中填入相应的APPID、API Key、Secret Key三个参数。

STEP2:运行程序并观察效果

(1)运行程序,按下板载按键A录制语音

按下A按键一秒,依据终端提示,口述“你好”二字。

(2)观察软件终端和点阵屏

当语音识别转换出“你好”二字时,点阵屏随即显示出笑脸状。

而当识别错误时,点阵屏则显示哭脸。

qw29.jpg

STEP3:回顾程序

qw30.jpg

4.调试修改


尝试修改程序,通过语音“音乐一号”控制micro:bit播放音乐1,之后再添加更多语音设定,实现不同的语音指令播放不同的音乐。

任务3:智能语音开关

1.分析设计


在上个任务中,我们已经成功地通过语音来控制micro:bit板载上的点阵屏及蜂鸣器。接下来,我们将在此基础上添加扩展板和继电器,设计一个智能语音开关,实现通过语音来控制继电器开关。

这里,我们可通过扩展板将继电器与micro:bit开发板相连,之后录制指定的语音使百度AI平台进行识别,识别正确则控制继电器开关。

qw31.jpg

2.硬件搭建

STEP1:通过连接线将继电器连在扩展板的P8端口,并将继电器开关拨至NO端。

qw32.jpg

STEP2:将micro:bit开发板插入I/O扩展板,并通过USB连接线将micro:bit接到计算机。

3.软件编写

软件设置:

STEP1:
创建与保存Python文件

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

程序编写及运行:

STEP1:
编写Python程序

  1. import pyrec1 #导入录音函数文件
  2. from aip import AipSpeech #导入百度语音识别库
  3. import time #导入时间库
  4. from pinpong.board import Board,Pin  #导入pinpong.board包中的Board和Pin模块
  5. from pinpong.extension.microbit import * #导入pinpong.extension.microbit中所有模块
  6. Board("microbit").begin() #初始化,选择板型和端口号,不输入端口号则进行自动识别
  7. switch = Pin(Pin.D8,Pin.OUT) #初始化D8引脚为电平输出模式
  8. #和我们百度AI开放平台中创建的应用的三个参数一致,按照自己所创建的应用参数对应进行替换
  9. APP_ID = ''
  10. API_KEY = ''
  11. SECRET_KEY = ''
  12. client = AipSpeech(APP_ID,API_KEY,SECRET_KEY) #创建百度云客户端连接
  13. file_name_record = 'record.wav' #音频文件保存名
  14. while True: #循环执行
  15.     if button_a.is_pressed() == 1: #按下板载按钮A
  16.         pyrec1.record(file_name_record) #录音
  17.         print("正在转换") #打印“正在转换”
  18.         #打开语音文件并读取,读取信息存入file_context
  19.         with open(file_name_record,'rb') as fp:
  20.             file_context = fp.read()
  21.         #向百度云发出请求,百度云反馈字典格式信息
  22.         res = client.asr (file_context, 'wav', 16000, {'dev_pid': 1537,})
  23.         print(res) #打印出识别到的结果
  24.         res_str = res.get ("result") [0] #获取信息中的文本内容
  25.         print('语音转文字成功:',res_str)#只打印关键的语音文本信息
  26.         if '关灯' in res_str: #判断识别结果是否正确,如果是则执行关灯(给数字引脚D8高电平)
  27.             display.show(Image.HAPPY)
  28.             switch.write_digital(1)#引脚输出高电平
  29.         else:
  30.             display.show(Image.SAD)
  31.             switch.write_digital(0)#引脚输出低电平
复制代码

Tips:须在程序中填入对应的APPID、API Key、Secret Key三个参数。

STEP2:运行程序并观察效果

(1)运行程序,按下板载按键A录制语音

按下A按键,口述“关灯”二字

qw33.jpg

(2)观察软件终端和继电器

当语音识别转换出“关灯”二字时,继电器上的灯熄灭,同时点阵屏显示笑脸。

而当识别错误时,继电器上的指示灯保持常亮,点阵屏则显示哭脸

qw34.jpg

六、巩固提高

1.项目小结

本节课我们以micro:bit、扩展板以及继电器为器件设计了一个智能语音开关。首先录制语音并借助百度AI开放平台的语音识别技术将其转换成文字,之后对识别转换的文字进行判别,识别正确则显示笑脸,最后添加继电器,实现通过语音来控制继电器开关。

2. 项目拓展

(1)在我们的项目中,仅仅是利用继电器上的指示灯来模拟了开关的效果。接下来,让我们进一步拓展实验,尝试将家用小电器(如迷你小风扇)的正负极接入继电器,结合12V电源适配器,实现完整的语音控制风扇吧!Tips:注意用电安全!

qw35.jpg qw36.jpg qw37.jpg

(2)尝试使用方言来试一试效果吧!

附录

附录1:录音程序

  1. import wave
  2. import os
  3. import sys
  4. from pyaudio import PyAudio,paInt16
  5. framerate=16000
  6. NUM_SAMPLES=2000
  7. chunk=2014
  8. channels=1
  9. sampwidth=2
  10. TIME=30
  11. #保存
  12. def save_wave_file(filename,data):
  13.     '''save the date to the wavfile'''
  14.     wf=wave.open(filename,'wb')
  15.     wf.setnchannels(channels)
  16.     wf.setsampwidth(sampwidth)
  17.     wf.setframerate(framerate)
  18.     wf.writeframes(b"".join(data))
  19.     wf.close()
  20. #录音
  21. def record(file_name):
  22.     try:
  23.         os.close(file_name)
  24.         os.remove(file_name)#先删除一下文件,以防重名
  25.     except:
  26.         pass
  27.     #os.close(sys.stderr.fileno())
  28.     print('开始录音,请说话......')
  29.     pa=PyAudio()
  30.     stream=pa.open(format = paInt16,channels=1,
  31.                    rate=framerate,input=True,
  32.                    frames_per_buffer=NUM_SAMPLES)
  33.     my_buf=[]
  34.     count=0
  35.    
  36.     while count<time:< span="">
  37.         string_audio_data = stream.read(NUM_SAMPLES)
  38.         my_buf.append(string_audio_data)
  39.         count+=1
  40.         #print('.')
  41.     print('录音结束,请安静!')   
  42.     save_wave_file(file_name,my_buf)
  43.     stream.close()
复制代码


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

本版积分规则

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

硬件清单

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

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

mail