0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于RT-Thread和N32G457的家庭语音助手方案

湫叶风 来源:湫叶风 作者:湫叶风 2022-04-15 18:50 次阅读

出处:RT-Thread

作者:王胖胖

应用方案说明及使用场景描述:
本方案通过N32G457+RT-Thread,实现一个家庭语音助手,提供语音唤醒、多路开关、倒计时、闹钟提醒、天气提醒、新闻播报、音乐播放等功能,为家庭生活增添便利和趣味性。
具体实现功能如下:
1.一键配网(未实现)
2.特定唤醒词唤醒
3.语音控制多路开关
4.语音设置倒计时
5.语音设置闹钟(未实现)
6.语音播报天气提醒
7.语音播报新闻
8.语音控制音乐播放
硬件平台
N32G45XVL-STB开发板
软件平台
RT-Thread 4.0.4
RT-Thread Studio
功能模块
ADC
Timer
msh
Serial
pyaudio
pyserial
百度实时语音识别realtime-asr
百度语音合成tts
全家福

初步方案


语音识别是本项目的核心,一般有语音识别模块、在线语音识别、离线语音识别等三种方案。一开始觉得语音识别模块、在线语音识别没有技术含量,离线语音识别才能最大限度的发挥开发板的性能。于是春节期间查阅了不少离线语音识别的资料,最终确定了MFCC+DTW的离线语音识别方案。节后事情比较多,中断了很长时间。等再拾起来的时候,发现没有想象中那么简单,像FFT/DCT等DSP运算不是新手能轻易搞定的。距离截稿时间已经没几天了,无奈只能选择降级方案。
降级方案
降级后的方案是使用ADC采样音频信号,交由上位机(或ESP8266)进行在线语音识别。ADC进行了配置之后,给VREF接上3.3V,测试正常。可问题还是出现了,首先是自制的音频放大电路的放大能力不足,远达不到3.3v的上限,导致采样精度不足;其次是音频采样需要8k的采样速率,也就是125us采样一次,而系统定时器最小周期默认是10ms,就算配置成1ms也是不能满足需求的。文档里的高精度定时器还需要进一步研究,无奈只能再次降级。

再次降级

复制

def process_instruct(instruct):
  """
  处理语音指令
  """
  instruct = str(instruct).replace("。", "").replace("?", "")
  cmd = ""
  voice = ""
  match instruct:
  case "小白小白":
    cmd = "mini_rgb up"
    voices = "在呢|嗯|爷爷在此".split("|")
    random.shuffle(voices)
    voice = voices[0]
  case "打开红灯":
    cmd = "light_control red on"
    voice = "红灯已打开"
  case "关闭红灯":
    cmd = "light_control red off"
    voice = "红灯已关闭"
  case "打开绿灯":
    cmd = "light_control green on"
    voice = "绿灯已打开"
  case "关闭绿灯":
    cmd = "light_control green off"
    voice = "绿灯已关闭"
  case "打开蓝灯":
    cmd = "light_control blue on"
    voice = "蓝灯已打开"
  case "关闭蓝灯":
    cmd = "light_control blue off"
    voice = "蓝灯已关闭"
  case "天气":
    cmd = "mini_rgb up"
    voice = "有你的每一天都是晴天"
  case "几点了":
    cmd = "mini_rgb up"
    now = time.strftime("%Y年%m月%d日%H点%M分%S秒", time.localtime()) 
    voice = "现在是" + now
  case "早上好":
    cmd = "mini_rgb up"
    voice = "morning"
  case "我想听歌":
    cmd = "mini_rgb up"
    voice = "一闪一闪亮晶晶,满天都是小星星"
  case "倒计时五秒钟":
    cmd = "count_down 5"
    voice = "已为您设置好倒计时"
  case "新闻":
    cmd = "mini_rgb up"
    voice = "【一眼新闻丨3月16日贝果财经早间资讯】中国塞尔维亚驾*互认正式生效;106班上海入境国际航班将更改入境点;邓伦偷逃税被处罚并追缴1.06亿元;最高法明确电商不得以拆封为由拒绝退货;茅台回应潘长江直播事件;白俄罗斯和俄罗斯将在能源交易中放弃使用美元;英国将取消所有新冠疫情旅行限制措施;韩国开发全球首个可拉伸无失真元显示技术;美国航天局证实:美航天员将乘俄飞船返回......"
  case "再见":
    cmd = "mini_rgb down"
    voice = "再见"
  case _:
    cmd = "mini_rgb down"
    voices = "不知道你说了什么|不懂".split("|")
    random.shuffle(voices)
    voice = voices[0]
  if cmd != "":
  logger.info('cmd:'+cmd)
  cmd = cmd + "\n"
  cmd = cmd.encode("ascii")
  n32_serial.write(cmd)
  if voice != "":
  tts_file = tts(voice)
  if tts_file != "":
    play_audio(tts_file)


再次降级后,使用上位机通过pyaudio进行音频录制,语音片段通过websocket上传至百度实时语音接口进行语音识别,返回的结果转换为指令通过pyserial写入开发板,触发对应动作,同时通过百度语音合成tts生成对应语音回复,通过pyaudio播放。基本实现了前期预定目标。
总结
由于是第一个硬件项目,经验有限加上知识储备不足,一开始的想法并没有完全实现出来,只能一再降级,好在也不辱使命,完成了作品。后期我会继续完善这个项目,把离线语音识别方案实现出来,真正发挥这块开发板的价值!
bilibili:https://gitee.com/grinow/home-voice-assistant
gitee:https://www.bilibili.com/video/BV1gU4y1o7XJ/

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6032

    文章

    44513

    浏览量

    632693
  • 语音识别
    +关注

    关注

    38

    文章

    1721

    浏览量

    112533
  • RT-Thread
    +关注

    关注

    31

    文章

    1271

    浏览量

    39903
  • 语音助手
    +关注

    关注

    7

    文章

    235

    浏览量

    26791
  • N32G457
    +关注

    关注

    0

    文章

    16

    浏览量

    911
收藏 人收藏

    评论

    相关推荐

    基于N32G457 RT-Thread的设计作品集分享

    1、基于RT-ThreadN32G457的智能工业网关的设计方案基于RT-Thread系统和N32G457开发板,简单的实现了modbus
    发表于 03-11 17:49

    作品分享-基于RT-Thread系统和N32G457开发板开发的电子围栏设计

    基于RT-Thread系统和N32G457开发板开发的电子围栏设计,主要采用的是N32G457开发板,并搭载AIR724 4G模块作为数据传输模块,通过采集GPS的数据,并将该设备的经
    发表于 03-14 14:25

    基于RT-ThreadN32G457的智慧家庭

    作品出处:RT-Thread作者:此生何用声声叹本项目是基于国民芯片N32G457,和RT-thread操作系统开发的智慧家庭。由于万物互联深入人心,于是便有了把自己的
    发表于 04-18 15:21

    基于RT-ThreadN32G457家庭语音助手

    出处:RT-Thread作者:王胖胖应用方案说明及使用场景描述:本方案通过N32G457+RT-Thread,实现一个家庭
    发表于 04-18 15:25

    分享一种基于RT-ThreadN32G457的运动姿态解算设计

    1、基于RT-ThreadN32G457的运动姿态解算基本框架如上图所示,设计框架由硬件和软件两部分组成,其中硬件主要包括N32G457主控板和MPU6050模块,软件部分主要包括eMPL的移植(
    发表于 06-23 10:24

    基于RT-ThreadN32G457的温度气压显示系统设计

    1、基于RT-ThreadN32G457的温度气压显示系统设计此次基于RTT和N32G457开发实现u8g2 spi 硬件驱动显示及bmp280 传感器驱动。整体架构如下:原作者:x
    发表于 07-21 11:44

    基于RT-ThreadN32G457的门禁控制系统设计方案

    1、基于RT-ThreadN32G457的门禁控制系统设计应用背景1.应用场景可以作为家庭的安全门锁控制系统;2.同样可以作为企业的门禁考勤系统;实现功能1.通过按键实现指纹的添加和删除;2.可以
    发表于 08-05 11:27

    基于RT-ThreadN32G457的智能家居demo相关资料介绍

    1、基于RT-ThreadN32G457的智能家居demo简介本文使用 N32G457 开发板,移植 RT-Thread 操作系统,增加 ESP8266 WIFI 模块模拟了一个小型
    发表于 08-22 15:09

    基于RT-ThreadN32G457的继电器控制加热设备制作方案

    1、基于RT-ThreadN32G457的继电器控制加热设备制作此项目是移植现有的加热设备程序到RT-Thread 框架,主要是基于RT-Thread框架及对应的软件包(bottom
    发表于 08-26 15:55

    基于RT-ThreadN32G457的数字气压表设计相关资料分享

    1、基于RT-ThreadN32G457的数字气压表设计  基于RT-Thread系统和N32G457的数字气压表的设计。气压传感器使用国产的华普HP5806气压传感器,RTC时钟使
    发表于 10-11 16:44

    基于RT-ThreadN32G457的温度气压显示系统设计方案

    1、基于RT-ThreadN32G457的温度气压显示系统设计  此次基于RTT和N32G457开发实现u8g2 spi 硬件驱动显示及bmp280 传感器驱动。  整体架构如下:原
    发表于 10-31 17:35

    基于RT-ThreadN32G457的嵌入式目标识别系统设计实现

    1、基于RT-ThreadN32G457的嵌入式目标识别系统设计  本演示示例移植苏州大学计算机科学与技术学院王宜怀教授团队的金葫芦嵌入式人工智能:物体认知系统中的代码在N32G457上实现。可以识别单独的英文字母A B C
    发表于 11-30 11:36

    N32G457系列通用MCU RT_Thread设备注册应用笔记

    N32G457系列通用MCU RT_Thread设备注册应用笔记
    发表于 11-10 19:51 3次下载
    <b class='flag-5'>N32G457</b>系列通用MCU <b class='flag-5'>RT_Thread</b>设备注册应用笔记

    N32G457系列通用MCU RT_Thread使用指南

    N32G457系列通用MCU RT_Thread使用指南
    发表于 11-11 21:50 0次下载
    <b class='flag-5'>N32G457</b>系列通用MCU <b class='flag-5'>RT_Thread</b>使用指南

    求一种基于RT-ThreadN32G457的便携测距模块设计方案

    背景:基于RT-Thread系统和N32G457开发板开发的一款便携测距小模块;
    发表于 08-07 16:30 442次阅读
    求一种基于<b class='flag-5'>RT-Thread</b>和<b class='flag-5'>N32G457</b>的便携测距模块设计<b class='flag-5'>方案</b>