Mind+Python编程与智能进阶教程——08智能语音开关
本帖最后由 木子呢 于 2021-12-1 14:23 编辑Mind+Python编程与智能进阶教程——08智能语音开关
课程目录:
[*]Python编程进阶系列教程—序章
[*]Python编程进阶系列课程—01 趣味数字电导仪
[*]Python编程进阶系列课程—02 简易气象站
[*]Python编程进阶系列课程—03 自制通信设备(上)
[*]Python编程进阶系列课程—03 自制通信设备(下)
[*]Python编程进阶系列课程—04 穿戴计步器
[*]Python编程进阶系列课程—05鱼缸自动水位控制
[*]Python编程进阶系列课程—06植物监测仪
[*]Mind+Python编程进阶教程——07智能厨房安防系统
[*]Mind+Python编程与智能进阶教程——08智能语音开关
一、实践情境
与机器进行语音交流,让机器明白我们说什么,这是人们长期以来梦寐以求的事情。
现如今,在国家的大力发展下,我国在语音识别、机器视觉、人脸识别、指纹识别等人工智能基础性技术上不断取得突破,许多曾经的梦想逐渐转变为现实。
二、实践目标
本实践项目运用micro:bit作为智能终端,结合继电器硬件来设计一个智能语音开关。通过语音来与智能终端进行交流,继而控制继电器的开关。
三、知识目标
1、了解语音识别的一般过程
2、掌握运用micro:bit作为智能终端,通过Python编程将语音转换成文字的方式
3、掌握运用micro:bit作为智能终端,通过Python编程实现语音控制智能硬件的方式
四、实践准备
硬件清单:
软件使用: Mind+编程软件
其他:
1、十字/一字两用螺丝刀 x1
2、家用迷你小风扇 x1
五、实践过程
在本项目中,我们将分三步,设计一个智能语音开关,实现通过语音来控制继电器开关。
1、录制语音并将其转换成文字
2、语音控制micro:bit点阵屏显示笑脸
3、添加继电器,实现语音控制继电器开关
任务1:语音转文字
1. 分析设计
在这个任务中,我们将完成语音的录制,并将录制的语音文件转换为文字显示在Mind+终端界面。
这里,我们可先调用录音程序利用电脑麦克风录制语音,再借助百度AI开放平台的语音识别技术,将音频中的特征进行提取,并调用已有的识别引擎,识别所输入的语音,最终转换成文字显示在软件终端。
由于我们需要使用到百度AI平台的语音识别技术,因此,我们需提前创建好百度AI账户并获取密钥。
对于语音转换成文字的效果实现,我们分步骤进行,具体流程如下,
2. 获取百度AI平台账户密钥
STEP1:进入百度云网站
点击进入下列网站:https://cloud.baidu.com/
STEP2:注册并登录百度云账号,
STEP3:登录成功后,在右上角个人账号中点击“用户中心”,点击左上角的,找到“产品服务”中的“语音技术”,并点击进入。
STEP4:创建应用
在新页面中点击“创建应用”,应用名称和应用描述任意填写,无需企业认证,将“语音技术”、“文字识别”、“图像识别”、“人体分析”全部勾选,(有些目前用不上,但是都可以勾选,后续用得上)。
添加成功后点击“返回应用列表”,这样在列表中就可以看到我们新添加的应用了
STEP5:领取资源
分别点击“语音识别”和“语音合成”的“领取免费资源”,选上全部接口后点击“0元领取”即可。
STEP6:记录关键参数
领取完资源后,回到应用列表,找到我们需要的应用和对应的APPID、API Key、Secret Key,将其记录下来,这三个中的关键参数都是我们后续代码中所需要的。
3. 软件编写
在编写语音识别的代码之前,我们首先需要先手动编写录音程序以便在后续调用,之后安装所需要的库,最后便是项目任务一主程序的编写。
Tips:录音程序已提供,附录1可见。
软件设置:
STEP1:创建与保存项目文件
启动Mind+软件,选择“Python模式”,另存项目并命名为“m智能语音开关”。
STEP2:创建与保存Python文件
创建一个Python程序文件“任务一.py”,双击打开。
安装库:
STEP1:安装百度AI库
在“库管理”的“PIP模式”下输入“pip install baidu-aip”,并点击运行进行安装。
STEP2:安装实现录音需要的PyAudio库
在“库管理”的“PIP模式”下输入“pip install PyAudio”,并点击运行进行安装。
编写录音程序文件:
(1)在“任务一.py”的同级目录下,新建一个“pyrec1.py”程序文件,将附录1 中的录音程序代码写入并保存。
程序编写、运行及回顾:
STEP1:编写Python程序
import pyrec1 #导入录音程序文件
from aip import AipSpeech #导入百度语音识别库
import time #导入时间库
#和我们百度AI开放平台中创建的应用的三个参数一致,按照自己所创建的应用参数对应进行替换
APP_ID = '' #填入APP_ID信息
API_KEY = ''#填入API_KEY信息
SECRET_KEY = ''#填入SECRET_KEY信息
client = AipSpeech(APP_ID,API_KEY,SECRET_KEY) #创建百度云客户端连接
file_name_record='record.wav' #音频文件保存名
pyrec1.record(file_name_record) #录音
print("正在转换") # 打印“正在转换”
#打开语音文件并读取,读取信息存入file_context
with open(file_name_record,'rb') as fp:
file_context = fp.read()
#向百度云发出请求,百度云反馈字典格式信息
res = client.asr (file_context, 'wav', 16000, {'dev_pid': 1537,})
print(res) #打印出识别到的结果
res_str = res.get ("result") #获取信息中的文本内容
print('语音转文字成功:',res_str)#只打印关键的语音文本信息
Tips:须在程序中填入对应的APPID、API Key、Secret Key三个参数。
STEP2:运行程序并观察效果
(1)运行程序,并录制语音
点击运行,可以看到终端内显示“开始录音,请说话”的提示字样,之后对着电脑任意说两三秒语音。
(2)观察终端界面
三秒后可以在终端看到结束提示,之后就能得到经过语音识别转换而来的语音信息及中文显示了。
Tips:这里,我们说的语音为“上海自来水来自海上”。
(3)观察文件信息栏
同时,刷新右侧文件信息栏后可以看到有新生成的两个语音文件,这就是我们刚才录制的语音得到的音频文件。
Tips:可以打开音频文件用播放器听一听自己刚才录制的语音哦。
STEP3:回顾程序
4. 调试修改
在实验时,说话的字数长短可能会影响识别的准确率,让我们多次实验,录制不同长度的语音,看一看文字长短与准确率之间的关系如何吧。
事实上,在识别的过程中,录制的语音可能会受文字长短、普通话标准与否、语速快慢等因素的影响而识别出错。因此,录制语音时需注意这些细节哦!
任务2:语音控制笑脸显示
1.分析设计
在上个任务中,我们已经成功地将语音转化为文字输出在Mind+软件终端。接下来,我们将在此基础上结合micro:bit智能硬件对识别出来的文字进行判别,实现通过语音来控制micro:bit显示笑脸。
这里,我们可将micro:bit开发板与计算机相连,之后录制指定的语音使百度AI平台进行识别,识别正确控制点阵屏秀一个笑脸。
2.硬件搭建
通过USB连接线将micro:bit接到计算机。
3.软件编写
软件设置:
STEP1:创建与保存Python文件
新建一个Python程序文件“任务二.py”,双击打开。
程序编写、运行及回顾:
STEP1:编写Python程序
import pyrec1 #导入录音程序文件
from aip import AipSpeech #导入百度语音识别库
import time #导入时间库
from pinpong.board import Board #导入pinpong.board包中的Board模块
from pinpong.extension.microbit import * #导入pinpong.extension.microbit中所有模块
Board("microbit").begin() #初始化,选择板型和端口号,不输入端口号则进行自动识别
#和我们百度AI开放平台中创建的应用的三个参数一致,按照自己所创建的应用参数对应进行替换
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
client = AipSpeech(APP_ID,API_KEY,SECRET_KEY) #创建百度云客户端连接
file_name_record = 'record.wav' #音频文件保存名
while True: #循环执行
if button_a.is_pressed() == 1: #按下板载按钮A
pyrec1.record(file_name_record) #录音
print("正在转换") # 打印“正在转换”
#打开语音文件并读取,读取信息存入file_context
with open(file_name_record,'rb') as fp:
file_context = fp.read()
#向百度云发出请求,百度云反馈字典格式信息
res = client.asr (file_context, 'wav', 16000, {'dev_pid': 1537,})
print(res) #打印出识别到的结果
res_str = res.get ("result") #获取信息中的文本内容
print('语音转文字成功:',res_str)#只打印关键的语音文本信息
if '你好' in res_str: #判断识别结果中是否有“你好”二字,如果有则反馈显示笑脸
display.show(Image.HAPPY)
else:
display.show(Image.SAD)
Tips:须在程序中填入相应的APPID、API Key、Secret Key三个参数。
STEP2:运行程序并观察效果
(1)运行程序,按下板载按键A录制语音
按下A按键一秒,依据终端提示,口述“你好”二字。
(2)观察软件终端和点阵屏
当语音识别转换出“你好”二字时,点阵屏随即显示出笑脸状。
而当识别错误时,点阵屏则显示哭脸。
STEP3:回顾程序
4.调试修改
尝试修改程序,通过语音“音乐一号”控制micro:bit播放音乐1,之后再添加更多语音设定,实现不同的语音指令播放不同的音乐。
任务3:智能语音开关
1.分析设计
在上个任务中,我们已经成功地通过语音来控制micro:bit板载上的点阵屏及蜂鸣器。接下来,我们将在此基础上添加扩展板和继电器,设计一个智能语音开关,实现通过语音来控制继电器开关。
这里,我们可通过扩展板将继电器与micro:bit开发板相连,之后录制指定的语音使百度AI平台进行识别,识别正确则控制继电器开关。
2.硬件搭建
STEP1:通过连接线将继电器连在扩展板的P8端口,并将继电器开关拨至NO端。
STEP2:将micro:bit开发板插入I/O扩展板,并通过USB连接线将micro:bit接到计算机。
3.软件编写
软件设置:
STEP1:创建与保存Python文件
新建一个Python程序文件“任务三.py”,双击打开。
程序编写及运行:
STEP1:编写Python程序
import pyrec1 #导入录音函数文件
from aip import AipSpeech #导入百度语音识别库
import time #导入时间库
from pinpong.board import Board,Pin#导入pinpong.board包中的Board和Pin模块
from pinpong.extension.microbit import * #导入pinpong.extension.microbit中所有模块
Board("microbit").begin() #初始化,选择板型和端口号,不输入端口号则进行自动识别
switch = Pin(Pin.D8,Pin.OUT) #初始化D8引脚为电平输出模式
#和我们百度AI开放平台中创建的应用的三个参数一致,按照自己所创建的应用参数对应进行替换
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
client = AipSpeech(APP_ID,API_KEY,SECRET_KEY) #创建百度云客户端连接
file_name_record = 'record.wav' #音频文件保存名
while True: #循环执行
if button_a.is_pressed() == 1: #按下板载按钮A
pyrec1.record(file_name_record) #录音
print("正在转换") #打印“正在转换”
#打开语音文件并读取,读取信息存入file_context
with open(file_name_record,'rb') as fp:
file_context = fp.read()
#向百度云发出请求,百度云反馈字典格式信息
res = client.asr (file_context, 'wav', 16000, {'dev_pid': 1537,})
print(res) #打印出识别到的结果
res_str = res.get ("result") #获取信息中的文本内容
print('语音转文字成功:',res_str)#只打印关键的语音文本信息
if '关灯' in res_str: #判断识别结果是否正确,如果是则执行关灯(给数字引脚D8高电平)
display.show(Image.HAPPY)
switch.write_digital(1)#引脚输出高电平
else:
display.show(Image.SAD)
switch.write_digital(0)#引脚输出低电平
Tips:须在程序中填入对应的APPID、API Key、Secret Key三个参数。
STEP2:运行程序并观察效果
(1)运行程序,按下板载按键A录制语音
按下A按键,口述“关灯”二字
(2)观察软件终端和继电器
当语音识别转换出“关灯”二字时,继电器上的灯熄灭,同时点阵屏显示笑脸。
而当识别错误时,继电器上的指示灯保持常亮,点阵屏则显示哭脸
六、巩固提高
1.项目小结
本节课我们以micro:bit、扩展板以及继电器为器件设计了一个智能语音开关。首先录制语音并借助百度AI开放平台的语音识别技术将其转换成文字,之后对识别转换的文字进行判别,识别正确则显示笑脸,最后添加继电器,实现通过语音来控制继电器开关。
2. 项目拓展
(1)在我们的项目中,仅仅是利用继电器上的指示灯来模拟了开关的效果。接下来,让我们进一步拓展实验,尝试将家用小电器(如迷你小风扇)的正负极接入继电器,结合12V电源适配器,实现完整的语音控制风扇吧!Tips:注意用电安全!
(2)尝试使用方言来试一试效果吧!
附录
附录1:录音程序
import wave
import os
import sys
from pyaudio import PyAudio,paInt16
framerate=16000
NUM_SAMPLES=2000
chunk=2014
channels=1
sampwidth=2
TIME=30
#保存
def save_wave_file(filename,data):
'''save the date to the wavfile'''
wf=wave.open(filename,'wb')
wf.setnchannels(channels)
wf.setsampwidth(sampwidth)
wf.setframerate(framerate)
wf.writeframes(b"".join(data))
wf.close()
#录音
def record(file_name):
try:
os.close(file_name)
os.remove(file_name)#先删除一下文件,以防重名
except:
pass
#os.close(sys.stderr.fileno())
print('开始录音,请说话......')
pa=PyAudio()
stream=pa.open(format = paInt16,channels=1,
rate=framerate,input=True,
frames_per_buffer=NUM_SAMPLES)
my_buf=[]
count=0
while count<time:< span="">
string_audio_data = stream.read(NUM_SAMPLES)
my_buf.append(string_audio_data)
count+=1
#print('.')
print('录音结束,请安静!')
save_wave_file(file_name,my_buf)
stream.close()
很有创意,好教程,讲的真详细
页:
[1]