当前位置: 首页 > news >正文

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢?

我最后选择的方法是用threading.Timer(),rasa这边解析说话意图“提醒我(behavior)”——behavior是任何事情,解析成功后会回复“我会在5分钟后提醒你behavior”。语音助手接收到这条回复后,会判断是否包含“5分钟后提醒”这几个关键字,若是则启动threading.Timer(),定时5分钟后执行提醒。

这里,执行提醒的操作其实就是在满5分钟时自动发一份语义解析请求给rasa。我在rasa的domain.yml中定义了一条EXTERNAL_reminder的用户意图,同时还定义了这条意图对应的action,并写入stories.md中。于是,当rasa收到执行提醒的用户意图后,便自动返回我预先定义好的话术。语音助手收到话术后直接通过TTS播报出来,定时提醒功能完成。

接下来是我写的相关代码,和大家分享。

语音助手demo.py代码中增加一个独立的函数:

def act_remind(text):print("5分钟提醒触发……")resp = rasabot.ask(text)print("提醒内容:"+resp)tts.text_to_speech(resp)

然后在call_back函数中,在if resp== “有需要再叫我”这个条件后,增加一个else指令:

else:index0 = resp.find('5分钟后提醒')if index0 != -1:text0 = '/EXTERNAL_reminder't = threading.Timer(300, act_remind, args=[text0])t.start()

这条指令就是判断是否要执行提醒计时线程。

关于demo.py的代码, 请参看之前的博文:

https://blog.csdn.net/hydekong/article/details/141354955

Rasa部分的actions.py,就增加两个actions:

class ActionSetReminder(Action):def name(self) -> Text:return "action_set_reminder"def run(self,dispatcher: CollectingDispatcher,tracker: Tracker,domain: Dict[Text, Any],) -> List[Dict[Text, Any]]:behavior = tracker.get_slot("behavior")msg1 = '我会在5分钟后提醒你' + behaviordispatcher.utter_message(text= msg1)return []class ActionReactToReminder(Action):def name(self) -> Text:return "action_react_to_reminder"def run(self,dispatcher: CollectingDispatcher,tracker: Tracker,domain: Dict[Text, Any],) -> List[Dict[Text, Any]]:behavior = tracker.get_slot("behavior")dispatcher.utter_message(f"主人,到时间 {behavior} 啦!")return []

domain.yml部分intents增加:

  - ask_remind_behavior

  - EXTERNAL_reminder

actions增加:

  - action_set_reminder

  - action_react_to_reminder

entities增加:

  - behavior

slots增加:

behavior:

    type: text

stories.md增加一个故事:

## set_reminder* ask_remind_behavior- action_set_reminder* EXTERNAL_reminder- action_react_to_reminder

nlu.md增加一个用户意图ask_remind_behavio

## intent: ask_remind_behavior
- 提醒我[接娃](behavior)
- 提醒我[健身](behavior)
- 提醒我[做饭](behavior)
- 提醒我[睡觉](behavior)
- 提醒我[回电](behavior)
- 提醒我[休息](behavior)
- 提醒我[洗澡](behavior)
- 提醒我[吃饭](behavior)
- 提醒我[开会](behavior)
- 提醒我[叫车](behavior)

最后rasa train把模型生成,rasa run actions把两个新增actions完成注册,再启动rasa run –enable-api,把rasa server跑起来。之后,进入语音助手的项目文件夹,输入python demo.py,就可以实际测试了。

相关文章:

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束…...

AIoTedge边缘计算+边缘物联网平台

在数字化转型的浪潮中,AIoTedge边缘计算平台以其边云协同的架构和强大的分布式AIoT处理能力,正成为推动智能技术发展的关键力量。AIoTedge通过在数据源附近处理信息,实现低延迟、快速响应,增强了应用的实时性。同时,它…...

Java使用拷贝asset文件,解密,并用DexclassLoader加载执行

//asset中加密的apk文件重命名为index.html,拷贝到私有目录 //解密 //加载,执行apk中的方法 public static void handleByJava(Context context){File copyedFile new File(context.getFilesDir().getAbsolutePath() "/" "main.html");FileUtil.copyAss…...

【AcWing】861. 二分图的最大匹配(匈牙利算法)

匈牙利算法,他可以在比较快的时间复杂度之内告诉我们左边和右边成功匹配的最大数是多少 匹配指的是边的数量,成功的匹配指的是两个未被使用的点之间存在一条边(就不存在两条边共用了一个点的)。 匈牙利算法可以返回成功匹配的最大匹配数是多少。 #incl…...

经验笔记:JSP(JavaServer Pages)

JSP(JavaServer Pages)经验笔记 JSP(JavaServer Pages)是一种用于创建动态网页的技术,它允许在HTML页面中嵌入Java代码,从而实现动态内容的生成。JSP与Servlet一样,都是Java EE平台的一部分&am…...

【零基础必看的数据库教程】——SQL WHERE 子句

WHERE 子句用于提取那些满足指定条件的记录,过滤记录。 SQL WHERE 语法: SELECT column1, column2, ... FROM table_name WHERE condition; 参数说明: column1, column2, ...:要选择的字段名称,可以为多个字段。如…...

vscode docker debug python

1. 安装Vscode插件 ”Docker“”Dev Containers““Remote - ssh” 2. 进入Docker环境 点击左侧 Docker图标,选择Containers 对容器进行右键启动 生成新页面直接进行选择文件路径即可,之后得操作均在容器内进行...

【Kubernetes】常见面试题汇总(四)

目录 11.简述 Kubernetes 集群相关组件? 12.简述 Kubernetes Rc 的机制? 11.简述 Kubernetes 集群相关组件? Kubernetes Master控制组件,调度管理整个系统(集群),包含如下组件: (1&#xff…...

MATLAB基础语法知识

环境的配置等等就不写了,网上还是有很多资源可以找,而且正版的要付费,我也是看的网上的搞定的。 一,初识MATLAB 1.1 MATLAB的优势 不需要过多了解各种数值计算方法的具体细节和计算公式,也不需要繁琐的底层编程。可…...

PopupInner源码分析 -- ant-design-vue系列

PopupInner源码分析 – ant-design-vue系列 1 综述 上一篇讲解了vc-align的工作原理,也就是对齐是如何完成的。这一篇主要讲述包裹 Align的组件:PopupInner组件是如何工作的。 PopupInner主要是对动画状态的管理,比如打开弹窗的时候&#…...

Maven 的 pom.xml 文件中<dependency> 元素及其各个参数的解释

在 Maven 的 pom.xml 文件中&#xff0c;<dependency> 标签用于定义项目依赖的外部库。每个 <dependency> 元素包含了一系列的子元素&#xff0c;这些子元素定义了依赖库的各种属性。下面是一个典型的 <dependency> 元素及其各个参数的解释&#xff1a; <…...

【信创】Linux终端禁用USB存储 _ 统信 _ 麒麟 _ 方德

原文链接&#xff1a;【信创】Linux终端禁用USB存储 | 统信 | 麒麟 | 方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在Linux终端下禁用USB存储设备的文章。禁用USB存储设备可以提高系统的安全性&#xff0c;防止未经授权的人员将数据拷贝到外部存储设备或…...

开放API接口时要注意的安全处理总结

开发API接口&#xff1a;开放给别人调用的接口。未经过安全处理的开发API接口安全弱点&#xff1a;数据窃取&#xff08;密码等信息被窃取&#xff0c;盗刷&#xff0c;敏感信息的等&#xff09;——RSA/DES加密&#xff1a; 签名机制在API接口中的应用&#xff1a;签名用于验证…...

FastGPT自定义插件的icon

最近研究FastGPT的自定义插件&#xff0c;经过好几天的折磨&#xff0c;终于实现了一个简单的发送邮件功能&#xff0c;但是呢在使用的时候发现插件的icon是默认的fastgpt的logo&#xff0c;那肯定得自定义一个啊。直接说方法&#xff1a; 1、自定义插件下面的template.json文件…...

SprinBoot+Vue旅游网站的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…...

代码随想录刷题day27丨455.分发饼干 ,376. 摆动序列 ,53. 最大子序和

代码随想录刷题day27丨455.分发饼干 ,376. 摆动序列 ,53. 最大子序和 1.贪心算法理论基础 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 这么说有点抽象&#xff0c;来举一个例子&#xff1a; 例如&#xff0c;有一堆钞票&#xff0c;你可以拿走十张&a…...

Detect It Easy

Detect It Easy&#xff08;简称 DIE&#xff09;项目的网址为 https://github.com/horsicq/Detect-It-Easy 下载完安装包后&#xff0c;直接双击die.exe即可进入到操作界面 工具介绍&#xff1a; 它可以用来检测程序架构和文件类型。如图所示。其中&#xff0c;「模式」说明程…...

c++开关灯

题目描述 现有 &#x1d45b;n 盏灯排成一排&#xff0c;从左到右依次编号为&#xff1a;11&#xff0c;22&#xff0c;……&#xff0c;&#x1d45b;n。然后依次执行 &#x1d45a;m 项操作。 操作分为两种&#xff1a; 指定一个区间 [&#x1d44e;,&#x1d44f;][a,b]&…...

DevOps实现CI/CD实战(六)- Jenkins集成k8s

十、 Jenkins集成k8s Jenkins在集成K8s之前&#xff0c;需要搭建k8s集群&#xff0c;具体搭建步骤&#xff0c;完整笔记 https://github.com/ITenderL/ITenderL.github.io/tree/main/docs/DevOps&#xff0c; 包括完整的DevOps的笔记。 1. 准备部署的yml文件 pipeline.yml …...

张雪峰:物联网行业迎高光时刻!如何选择?我们诚聘销售工程师!

作为一间10多年的物联网公司&#xff0c;各位求职人士可以看看我们其中一个招聘要求&#xff0c;和自己需求结合分析分析&#xff0c;希望对你们有所帮助。 【公司实力底蕴】 盈电智控物联网科技&#xff08;广东&#xff09;有限公司&#xff0c;2024年7月成立&#xff0c;是…...

利用多文件编程实现顺序表的创建,判满,插入,输出

文章目录 &#x1f34a;自我介绍&#x1f34a;利用多文件编程实现顺序表的创建&#xff0c;判满&#xff0c;插入&#xff0c;输出seqlist.cseqlist.hmain.c 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff…...

百度快照劫持之JS劫持诊断与恢复一例

劫持现象&#xff1a; 百度搜索结果中&#xff0c;被劫持网站出现在搜索结果中&#xff0c; 点击进入网站&#xff0c;网站显示正常&#xff0c;数秒后网站自动跳转到彩票网站f51688.com/ff6/。但是第二次点击搜索结果&#xff0c;正常进入网站缺不会跳转到彩票网站。 初步认…...

深入探讨Go语言中的切片与数组操作

在编程世界中&#xff0c;数组一直是非常流行的数据结构&#xff0c;主要有两个原因&#xff1a;其一是简单易懂&#xff0c;其二是非常灵活&#xff0c;可以存储多种不同类型的数据。在Go语言中&#xff0c;数组的用法有其独特的特点&#xff0c;但与此同时&#xff0c;Go语言…...

【WPS Excel】复制表格时,提示“图片太大,超过部份将被截去“ 问题

WPS表格 2019版本 升级到 WPS最新版 WPS-支持多人在线协作编辑Word、Excel和PPT文档_WPS官方网站 使用最新版就能够解决这个问题&#xff0c;如果仍旧无法解决可以勾选如下配置 重启Excel解决。 请勾选&#xff1a;文件 - 选项 - 编辑 - 不提示且不压缩文件中的图像...

驱动(RK3588S)第九课时:多节点驱动与函数接口

目录 一、多节点概念1、所用到的结构体说明2、函数接口主要是read和write函数2.1、把应用层的数据拷贝给底层2.2、把应用层的数据拷贝给底层 3、应用层的read和write函数4、底层的read和write函数二、ioctl控制命令接口1、概念2、函数介绍应用层和驱动层 三、代码与现象1.编写L…...

Linux系统下配置MySQL

1. 寻找MySQL的配置文件 MySQL的配置文件通常位于以下位置&#xff1a; 在大多数Linux系统上&#xff0c;主配置文件通常位于/etc/mysql/my.cnf或/etc/my.cnf。在macOS上&#xff0c;如果你使用Homebrew安装MySQL&#xff0c;配置文件通常位于/usr/local/etc/my.cnf。在Window…...

信捷 XD PLC POU编程之FB

在使用信捷的POU方式编程&#xff0c;可以建立两种POU:FB和FC。 FB和FC这两种POU又各自可以建立梯形图语言POU和C语言POU。 函数块&#xff08;FB&#xff09;是把反复使用的部分程序块转换成一种通用部件&#xff0c;他可以在程序中反复被调用&#xff0c;不仅 提高了程序的开…...

终于有人把云计算、大数据和人工智能讲明白了!

引言 在当今数字化时代&#xff0c;云计算、大数据和人工智能成为了全球科技界的热门话题。这些技术的迅猛发展以及应用范围的不断扩大&#xff0c;正深刻地改变着我们的生活和工作方式。云计算为我们提供了有效的计算和存储能力&#xff0c;大数据则以海量的信息资源为基础&a…...

【编程底层思考】详解Java内存模型(JMM)原理及其作用

Java内存模型&#xff08;Java Memory Model, JMM&#xff09;是Java虚拟机&#xff08;JVM&#xff09;的一个核心概念&#xff0c;它定义了Java程序中各种变量&#xff08;线程共享变量&#xff09;的访问规则&#xff0c;以及在并发环境下&#xff0c;为了确保数据的可见性、…...

Docker的基本概念和优势

Docker是一个开源的容器化平台&#xff0c;它可以将应用程序及其所有依赖项和运行环境打包到一个称为容器的独立单元中。容器化使得应用程序在不同的环境中可以以相同的方式运行&#xff0c;并且更加轻量级和可移植。 Docker的基本概念包括以下几点&#xff1a; 镜像&#xf…...