评测的时间接近尾声了,按照评测计划,还有最后一个语音控制的测评。先看下实现的视频。
语音控灯带
一、实现思路
行空板中通过WiFi连接百度云,调用api可实现语音识别,而且效果非常好,具体可参考本人的上一篇测评,【行空板 Python编程学习主控板】 五、离线语音识别和云语音识别比较
对经过语音识别后的文本信息进行检测,就可以实现语音控制输出了。
本次选择的是灯带输出,可以用语音设置输出的颜色。初步设定“打开灯光、关闭灯光、偏红一点、红少一点、偏绿一点、绿少一点、偏蓝一点、蓝少一点”这样的语音指令控制灯带。
二、语音识别
本次代码是在前两次评测的基础上实现的,包括语音识别和所见所得的灯带输出。
由于讯飞平台的语音识别目前还是免费阶段,就选择用讯飞实现语音识别了,百度的语音识别还是收费的,前面的测评使用了24次,需要支付0.08元,处于欠费的状态,调用一直失败,后面充值后就能成功调用了。
讯飞平台的调用也是非常方便,在讯飞平台申请后,创建应用
填充APPID、APISecret、APIKey就可以使用
在代码板块中,“讯飞语音识别”需要加载用户库,输入网址: https://gitee.com/liliang9693/ext-xunfeiyuyin
然后选择加载
语音识别的具体流程根百度类似
三、代码实现
切换到代码模式后,首先加载模块
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from pinpong.board import NeoPixel
from unihiker import GUI
from unihiker import Audio
import xunfeiasr
import time
xunfeiasr主要实现语音识别
xunfeiasr.xunfeiasr_set(APPID="...",APISecret="...",APIKey="...")
print("开始进行录音")
u_audio.record("record.wav",3)
print("录音结束")
ShiBieNeiRong = xunfeiasr.xunfeiasr(r"record.wav")
if (ShiBieNeiRong == ""):
ShiBieNeiRong = "未能识别"
else:
ParseShiBieNeiRong()
yanse_update()
Chinese.config(text=ShiBieNeiRong)
得到识别后的文本后就比较简单了,对比文字实现对应的功能就可以了
def ParseShiBieNeiRong():
global BoFangBiaoShi
global ShiBieNeiRong
global HongZhi
global LanZhi
global LvZhi
global YanSe
global YanSeZhi
if (ShiBieNeiRong == "关闭灯光"):
BoFangBiaoShi = 0
elif (ShiBieNeiRong == "打开灯光"):
BoFangBiaoShi = 1
elif (ShiBieNeiRong == "偏红一点"):
HongZhi = HongZhi + 16
if (HongZhi > 255):
HongZhi = 255
YanSe[0]= HongZhi
YanSeZhi = tuple(YanSe)
elif (ShiBieNeiRong == "红少一点"):
if (HongZhi < 16):
HongZhi = 0
else:
HongZhi = HongZhi - 16
YanSe[0]= HongZhi
YanSeZhi = tuple(YanSe)
elif (ShiBieNeiRong == "偏绿一点c"):
LvZhi = LvZhi + 16
if (LvZhi > 255):
LvZhi = 255
YanSe[1]= LvZhi
YanSeZhi = tuple(YanSe)
elif (ShiBieNeiRong == "绿少一点"):
if (LvZhi < 16):
LvZhi = 0
else:
LvZhi = LvZhi - 16
YanSe[1]= LvZhi
YanSeZhi = tuple(YanSe)
elif (ShiBieNeiRong == "偏蓝一点"):
LanZhi = LanZhi + 16
if (LanZhi > 255):
LanZhi = 255
YanSe[2]= LanZhi
YanSeZhi = tuple(YanSe)
elif (ShiBieNeiRong == "蓝少一点"):
if (LanZhi < 16):
LanZhi = 0
else:
LanZhi = LanZhi - 16
YanSe[2]= LanZhi
YanSeZhi = tuple(YanSe)
设想的是一点点改变颜色,实际效果没有中间过渡,由于时间关系,暂时不解决了。
灯带的输出,依然是P24引脚
p_p24_out=Pin(Pin.P24, Pin.OUT)
p_p24_out.write_digital(0)
np1 = NeoPixel(p_p24_out,10)
for XuHao in range(0, 10):
np1[XuHao] = (0,0,0)
颜色改变后进行更新
def yanse_update():
global YanSeZhi
global DanTiaoDengDaiYanSe
global BoFangBiaoShi
XuHao = 0
if (BoFangBiaoShi == 1):
for XuHao in range(10):
Deng[XuHao].config(color=YanSeZhi)
np1[XuHao] = YanSeZhi
DanTiaoDengDaiYanSe[XuHao]=YanSeZhi
XuHao = XuHao + 1
else:
for XuHao in range(10):
Deng[XuHao].config(color="#000000")
np1[XuHao] = (0,0,0)
DanTiaoDengDaiYanSe[XuHao]=(0, 0, 0)
XuHao = XuHao + 1
由于Python初学,很多代码还是有点懵。
另外,本次测评中的lcd界面的灯带没有同时更新,只能在后面的时间中慢慢完善了
四、蓝牙音乐输出
今天看到论坛中可以通过蓝牙输出音乐了,具体实现如下:
1、蓝牙配对
1)通过命令行进入行空板进入蓝牙配置,建议PowerShell
- ssh root@10.1.2.3
- password:dfrobot
2)依次键入以下指令,打开行空板蓝牙功能
bluetoothctl
default-agent
power on
3)开启蓝牙音箱,设置配对模式
4)键入以下指令,扫描蓝牙音箱设备ID,找到并记录蓝牙设备的device ID
scan on
5)依次键入以下命令,进行设备配对
trust xx:xx:xx:xx:xx:xx (Device ID)
pair xx:xx:xx:xx:xx:xx (Device ID)
connect xx:xx:xx:xx:xx:xx (Device ID)
6)配对完成,退出设置
exit
就可以实现蓝牙音箱播放了,亲测有效哦!