木子呢 发表于 2021-12-1 14:16:38

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()


Amos Young 发表于 2023-10-20 10:41:46

很有创意,好教程,讲的真详细
页: [1]
查看完整版本: Mind+Python编程与智能进阶教程——08智能语音开关