Rpi Zero W做的老头乐声控灯

祭图__|\0==>历经各种尝试,最后选了docker 里装个rhasspy,配上paho-mqtt搞出了这个奇葩夜灯。各种曲折就不说了,直接分享捷径思路。

这个绿板子是respeaker hat with 2 mic 用的是seeed-voicecard,跟着github编译,不废话。上图Rhasspy中开3个模块足够了。

intent recognition或者intent handling模块真不建议。喵的说个词,它后台运行十几秒,还开个毛线灯。有尝试在pocketsphinx下用mfa和praat自己编个迷你g2p.fst去找,做到textgrid file之后,再打包成customized model.zip 居然还要用kaldi,然后这个kaldi软件死活要配置好显卡参数才能装,终于成功在这里把我劝退了。

此时恍悟,不如直接用唤醒词试试,发现唤醒词敏感度很好且误报率又低,于是直接用这个思路来了个歪招。而且后来一看htop的情况,也觉得rpi zero 也撑到极限了,想上点花里胡哨的,1Ghz内核不答应(运算能力),armv6也不会答应(软件多样性)。

代码结构上,就俩文件一个订阅对应频道,响应唤醒词。另一个是监控对应gpio,长时间高电平,我就给你关了。

import RPi.GPIO as GPIO
import paho.mqtt.client as mqtt
import timeGPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)LED=21
GPIO.setup(LED, GPIO.OUT)
GPIO.output(LED,GPIO.LOW)flag = 0def on_connect(client, userdata, flags, rc):print("Connected with result code "+str(rc))#client.subscribe("hermes/intent/ChangeLightState") #subcribed channelclient.subscribe("hermes/hotword/bumblebee_raspberry-pi/detected")#client.subscribe("hermes/asr/textCaptured")#def on_message(client, userdata, msg,ledpin=LED):
#  mypay = msg.payload.decode("utf-8")
#  print ("message received:",msg.topic,mypay)
#  if mypay=="1":
#    GPIO.output(ledpin,GPIO.HIGH)
#  if mypay=="0":
#    GPIO.output(ledpin,GPIO.LOW)def on_message(client,userdata,msg,ledpin=LED):print("message: ",msg.topic)global flag#if flag % 2 == 1 and GPIO.input(ledpin) == 0: #单数但低电平,说明时间程序关了gpio,实际应用其实可以不加,喊多一声而已。#    flag = 0#else:#    flag = flag + 1flag = flag + 1if flag % 2 == 1: #单数开灯flag = 1 #重置一下flag,不让它变很大GPIO.output(ledpin,GPIO.HIGH)start_time = int(time.time())else:flag = 0GPIO.output(ledpin,GPIO.LOW)client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_messageclient.connect("localhost", 1883)
#client.loop_forever()
try:client.loop_forever()
except:GPIO.output(LED,GPIO.LOW)
import time
import RPi.GPIO as GPIOGPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
LED = 21
GPIO.setup(LED,GPIO.OUT)while True:if GPIO.input(LED) == 1:a = 0while GPIO.input(LED) == 1:time.sleep(1)a = a + 1if a > 59:GPIO.output(LED,GPIO.LOW)time.sleep(3)

rhasspy中有用的配置也就红绿框,

docker 跑rhasspy 针对pi zero是要选择平台参数才能pull的。然后运行命令如下

docker run -p 12101:12101  --network host    --name rhasspy --restart unless-stopped -v "$HOME/.config/rhasspy/profiles:/profiles" -v "/etc/localtime:/etc/localtime:ro" -v "/etc/asound.conf:/etc/asound.conf" --device /dev/snd:/dev/snd --ipc="host" rhasspy/rhasspy --user-profiles /profiles --profile vv

#这个vv profile是customized profile,是我照抄标准en后,对字典做了缩减,但是因为没有用intent类型的功能,这玩意儿也不重要。

接下来太阳能部分用到的工具(还在犯懒,此刻没有焊上去),除了那块太阳能板,你还需要一个mppt和一个稳压电路。

等试运行了看下实际不实际吧,嘎嘎。

最后吐槽一下pocketsphinx以及与它沆瀣一气的那些个科研工具,mfa和praat。喵了个咪的,我就想说有点装。搞一个自己的音频模型,过程里的其他软件使用很多。截图一下mfa alignment的基本使用和Textgrid的生成。然后再截图一个praat软件,对于说话识别的使用方式。万一没头脑以后还要用,这里可以提示一下用法。

图中参数有点错了,我其实应该选single speaker。

下图为praat,音频对应的语音标注。注意最初这个textgrid,无中生有是从wav变出来的,下拉菜单里有个叫annotation的东西,点了之后把默认的bell改成pitch。图中是人工标注,保存后再会由mfa根据标准字典,矫正好并在english_output文件夹里输出最终版的Textgrid 文件。

总之就是遭老罪。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序开发(百货商战)实战项目的购物车和个人中心的创建

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

玩转usbserver之usbserver日志报警

一、graylog 介绍 graylog是一个简单易用、功能较全面的日志管理工具,graylog也采用Elasticsearch作为存储和索引以保障性能,MongoDB用来存储少量的自身配置信息,master-node模式具有很好的扩展性,UI上自带的基础查询与分析功能比…

JAVAWeb实战(后端篇)

因为前后端代码内容过多,这篇只写后端的代码,前端的在另一篇写 项目实战一: 1.创建数据库,表等数据 创建数据库 create database schedule_system 创建表,并添加内容 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------…

如何安装和使用 Redis

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 关于 Redis Redis,于2009年开发,是一个灵活的、开源的、键值数据存储。在其他NoSQL数据库(如Cassan…

向日葵RCE复现(CNVD-2022-10270/CNVD-2022-03672)

一、环境 1.1 网上下载低版本的向日葵<2022 二、开始复现 2.1 在目标主机上打开旧版向日葵 2.2 首先打开nmap扫描向日葵主机端口 2.3 在浏览器中访问ip端口号cgi-bin/rpc?actionverify-haras &#xff08;端口号&#xff1a;每一个都尝试&#xff0c;直到获取到session值…

Spring条件装配:灵活配置你的应用

文章目录 摘要1. 条件装配概述1.1 什么是条件装配1.2 为什么需要条件装配 2. 使用Conditional注解2.1 Conditional注解简介2.2 编写自定义条件类2.3 应用Conditional注解 3. 内置的条件注解3.1 ConditionalOnClass3.2 ConditionalOnMissingBean3.3 ConditionalOnProperty 4. 使…

PHP For循环

PHP 中的 for 循环是另一种基本的循环控制结构&#xff0c;它允许你重复执行一段代码块指定次数。for 循环通常用于当你事先知道循环需要执行的确切次数时。 基本语法 for (初始化表达式; 循环条件; 更新表达式) {// 循环体// 当循环条件为真时执行的代码 } 初始化表达式&am…

Git基本用法

仓库初始化 创建目录(git_test01)并在目录下打开gitbash 初始化git仓库 git init 创建文件并提交 在目录下创建文件 touch file01.txt 将修改加入暂存区 git add 将修改提交到本地仓库&#xff0c;提交记录内容为“update ***” git commit -m "update ***" 查看…

动手学深度学习V2每日笔记(权重衰退+Dropout)

本文主要参考沐神的视频教程 https://www.bilibili.com/video/BV1UK4y1o7dy/vd_sourcec7bfc6ce0ea0cbe43aa288ba2713e56d 文档教程 https://zh-v2.d2l.ai/ 本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录&#xff0c;内容不会特别严谨仅供参考。 1.函数目录…

科普文:万字详解Kafka基本原理和应用

一、Kafka 简介 1. 消息引擎系统ABC Apache Kafka是一款开源的消息引擎系统&#xff0c;也是一个分布式流处理平台。除此之外&#xff0c;Kafka还能够被用作分布式存储系统&#xff08;极少&#xff09;。 A. 常见的两种消息引擎系统传输协议&#xff08;即用什么方式把消息…

【机器学习】探索图神经网络 (GNNs): 揭秘图结构数据处理的未来

&#x1f48e; 欢迎大家互三&#xff1a;2的n次方_ ​ &#x1f48e;1. 引言 图结构数据在现实世界中无处不在&#xff0c;从社交网络中的用户关系&#xff0c;到推荐系统中的用户-物品交互&#xff0c;再到生物信息学中的分子结构。传统的机器学习模型在处理这些数据时常常力…

【Unity插件】Editor Console Pro:提升开发效率的神器

在 Unity 开发过程中&#xff0c;控制台&#xff08;Console&#xff09;是我们排查错误、获取信息的重要窗口。而 Editor Console Pro 则是 Unity 编辑器控制台的强大替代品&#xff0c;为 Unity 的控制台带来了更多实用的功能和改进&#xff0c;极大地提升了开发效率。 一、…

力扣刷题----42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图&#xf…

PHP超级全局变量

PHP 中的超级全局变量&#xff08;Superglobals&#xff09;是 PHP 4.1.0 引入的一个特性&#xff0c;它们在脚本的全部作用域中都是可用的。这意味着一旦一个脚本被载入&#xff0c;这些变量就可以在脚本的任何地方被访问&#xff0c;无论是在函数内部还是外部。PHP 提供了几个…

TCP程序设计

TCP概述 建立连接 客户端和服务器端在建立连接时&#xff1a; 服务端是典型的监听接受连接的模式&#xff0c;就是ListenAccept 客户端是主动建立连接的模式&#xff0c;就是Dial Go语言中使用 net包实现网络的相关操作&#xff0c;包括我们TCP的操作。 用于建立连接的典型…

【JavaEE】阻塞队列

目录 一.阻塞队列(Blocking Queue) 1.什么是阻塞队列 2.特性 二.生产者消费者模型 1.什么是生产者消费者模型&#xff1f; 2.生产者消费模型的好处 2.1解耦合 2.2削峰填谷 三.如何在java中使用阻塞队列 四.模拟实现阻塞队列 1.加锁 2.阻塞等待实现 3.解决interru…

学习c语言第十三天(结构体)

一.结构体声明 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 描述复杂对象。 结构体成员可以是标量、数组、指针、结构体。 定义和初始化&#xff1a; struct peo {char namer[20];char tele[12];char sex[5];int high; }; s…

支付交易——支付渠道与路由引擎

摘要 支付渠道与路由引擎是现代支付系统中关键的组成部分。支付渠道指的是连接商家和支付网络的通道,如信用卡、支付宝等。而路由引擎则负责根据交易特征和规则,将支付请求导向最合适的渠道,以确保安全高效的资金转移。这些系统不仅简化了支付过程,还增强了支付系统的灵活…

git 迁移仓库的方法

git Git是一个开源的分布式版本控制系统&#xff0c;由Linus Torvalds在2005年创建&#xff0c;用于有效、高速地处理从小到大的项目管理。它最初是为Linux内核开发而设计的&#xff0c;但很快被广泛用于各种项目。 以下是Git的一些主要特性&#xff1a; 分布式架构&#xff…

Python设计模式 - 工厂方法模式

定义 工厂方法模式是一种创建型设计模式&#xff0c;它定义一个创建对象的接口&#xff0c;让其子类来处理对象的创建&#xff0c;而不是直接实例化对象。 结构 抽象工厂&#xff08;Factory&#xff09;&#xff1a;声明工厂方法&#xff0c;返回一个产品对象。具体工厂类都…