linux 添加唤醒词

news/2025/9/30 0:57:49/文章来源:https://www.cnblogs.com/FBsharl/p/19119799

在RK3588 Ubuntu主板上实现FunASR离线语音唤醒系统

RK3588是一款性能强大的SoC,搭配FunASR可以很好地实现离线语音唤醒功能。以下是完整的实施方案:

1. 硬件准备

音频输入设备选择

由于您的主板针脚图未显示专用音频接口,您需要添加以下硬件之一:

  1. USB麦克风/USB声卡(推荐)

    • 最简单的解决方案
    • 即插即用,无需额外配置
    • 推荐型号:USB全向麦克风或带麦克风的USB声卡
  2. I2S麦克风模块

    • 如INMP441或MSM261S4030H0
    • 需要配置GPIO引脚以支持I2S功能
    • 需要在设备树中添加I2S配置
  3. WM8960等音频编解码器模块

    • 提供麦克风输入和音频输出
    • 通过I2C控制,需要相应驱动

2. 环境配置

安装依赖

# 更新系统
sudo apt update && sudo apt upgrade -y# 安装基本工具
sudo apt install -y build-essential git cmake python3-pip python3-dev# 安装音频相关库
sudo apt install -y alsa-utils pulseaudio portaudio19-dev# 安装科学计算和AI相关库
sudo apt install -y python3-numpy python3-scipy# 检查音频设备
arecord -l

配置ALSA音频

# 创建或编辑.asoundrc文件
nano ~/.asoundrc# 添加以下内容(假设USB麦克风是card 1)
pcm.!default {type asymplayback.pcm "hw:0,0"capture.pcm "hw:1,0"
}ctl.!default {type hwcard 0
}

3. 安装FunASR

FunASR是达摩院开源的语音识别工具箱,支持离线唤醒。

安装FunASR Python包

# 创建虚拟环境(推荐)
python3 -m pip install virtualenv
virtualenv funasr_env
source funasr_env/bin/activate# 安装FunASR
pip install -U funasr
pip install funasr-onnx  # 如果想使用ONNX模型加速

下载唤醒模型

mkdir -p models
cd models# 下载唤醒模型(以"你好小智"为例)
wget https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/models/wekws_wenetspeech_xiaoyu.tar.gz
tar -xzf wekws_wenetspeech_xiaoyu.tar.gz

4. 实现离线唤醒程序

创建唤醒程序

# wakeup.py
import os
import time
import wave
import pyaudio
import funasr
import threading
import signal
import sys# 配置参数
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
RECORD_SECONDS = 0.5  # 每次处理的音频长度
THRESHOLD = 0.6  # 唤醒阈值# 初始化FunASR唤醒模型
model_dir = "models/wekws_wenetspeech_xiaoyu"
wakeup_model = funasr.AutoModel(model=model_dir,model_type="wekws",device_id=0  # 使用CPU,设置为>=0使用GPU
)# 全局变量
running = True
is_wakeup = Falsedef signal_handler(sig, frame):global runningprint("正在退出...")running = Falsesys.exit(0)# 注册信号处理函数
signal.signal(signal.SIGINT, signal_handler)# 回调函数,执行唤醒后的操作
def on_wakeup():print("\n系统已唤醒,等待命令...")# 这里可以添加唤醒后的操作,如播放提示音、启动命令识别等os.system("aplay -q wake_tone.wav")  # 播放提示音(需准备此文件)# 示例:唤醒后进入交互模式,可执行命令等global is_wakeupis_wakeup = True# 设置唤醒超时def reset_wakeup():global is_wakeuptime.sleep(10)  # 10秒后自动重置唤醒状态if is_wakeup:print("唤醒超时,重新进入监听模式...")is_wakeup = Falsethreading.Thread(target=reset_wakeup, daemon=True).start()def main():# 初始化PyAudiop = pyaudio.PyAudio()# 打开音频流stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)print("开始监听唤醒词 '你好小智'...")print("按Ctrl+C退出")global running, is_wakeupbuffer = []while running:# 读取音频数据data = stream.read(CHUNK, exception_on_overflow=False)buffer.append(data)# 保持buffer大小为固定长度(约RECORD_SECONDS秒)if len(buffer) > int(RATE / CHUNK * RECORD_SECONDS):buffer.pop(0)# 非唤醒状态下检测唤醒词if not is_wakeup:# 每1秒处理一次(可调整为更频繁)if len(buffer) >= int(RATE / CHUNK * RECORD_SECONDS):# 将buffer中的数据保存为临时wav文件with wave.open("temp.wav", 'wb') as wf:wf.setnchannels(CHANNELS)wf.setsampwidth(p.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(b''.join(buffer))# 使用FunASR检测唤醒词result = wakeup_model.generate("temp.wav")# 检查结果if "keyword" in result and result["keyword"] == "你好小智" and result["score"] > THRESHOLD:print(f"检测到唤醒词!得分: {result['score']:.2f}")on_wakeup()else:# 唤醒状态下的处理逻辑(可添加命令识别等)pass# 短暂休眠,降低CPU占用time.sleep(0.01)# 清理资源stream.stop_stream()stream.close()p.terminate()os.remove("temp.wav")if __name__ == "__main__":main()

制作启动服务

# 创建systemd服务文件
sudo nano /etc/systemd/system/voice-wakeup.service

添加以下内容:

[Unit]
Description=Voice Wakeup Service
After=network.target[Service]
ExecStart=/bin/bash -c 'source /home/your_username/funasr_env/bin/activate && python3 /home/your_username/wakeup.py'
WorkingDirectory=/home/your_username
StandardOutput=inherit
StandardError=inherit
Restart=always
User=your_username[Install]
WantedBy=multi-user.target

启用服务:

sudo systemctl daemon-reload
sudo systemctl enable voice-wakeup
sudo systemctl start voice-wakeup

5. 优化与扩展

性能优化

RK3588有NPU加速能力,可以利用它提高识别速度:

# 安装NPU加速库(需要根据具体RK3588开发板调整)
sudo apt install librga-dev# 尝试使用TNN或ONNX运行时优化模型推理
pip install funasr-onnx onnxruntime

添加命令识别功能

唤醒后可以添加命令识别功能:

# 在on_wakeup函数中添加命令识别
def on_wakeup():print("系统已唤醒,等待命令...")os.system("aplay wake_tone.wav")# 录制5秒钟的命令p_cmd = pyaudio.PyAudio()stream_cmd = p_cmd.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)print("请说出您的命令...")frames = []for i in range(0, int(RATE / CHUNK * 5)):data = stream_cmd.read(CHUNK)frames.append(data)# 保存命令音频with wave.open("command.wav", 'wb') as wf:wf.setnchannels(CHANNELS)wf.setsampwidth(p_cmd.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(b''.join(frames))# 识别命令asr_model = funasr.AutoModel(model="models/speech_paraformer-large_asr_nat-zh-cn",model_type="paraformer",device_id=0)result = asr_model.generate("command.wav")command_text = result["text"]print(f"识别到命令: {command_text}")# 执行命令逻辑execute_command(command_text)

总结

基于RK3588的Ubuntu系统,使用FunASR实现离线语音唤醒是完全可行的。该方案具有以下优势:

  1. 完全离线: 无需联网,保护隐私
  2. 低延迟: 本地处理,响应速度快
  3. 可定制: 可以根据需要自定义唤醒词和后续行为
  4. 资源高效: RK3588强大的算力足以处理语音识别任务

这个方案适合用于智能家居控制中心、智能音箱、交互机器人等多种应用场景。

如需进一步帮助或具体某一部分的详细说明,请随时告知!

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

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

相关文章

US$980 Xhorse VVDI2 BMW OBD + CAS4 +FEM/BDC Functions Full BMW License

Xhorse VVDI2 BMW OBD + CAS4 +FEM/BDC Functions Full BMW LicenseLicense Includes:VB-01 BMW OBDVB-02 BMW CAS4VB-03 BMW FEM/BDCIf you buy VVDI2 Basic or VVDI2 VAG and need to get VVDI2 BMW functions for B…

学网站开发可以创业吗聊天网站模板

MySQLMySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一YUM 安装mysql1、下载 YUM 仓库文件打开网址: https://dev.mysql.com/downloads/…

做电销有什么资料网站深圳宝安区是什么风险

首先,我们通过一张图片来了解一下Oracle数据库的内存结构,如下:每个数据库实例有两个关联的内存结构—系统全局区(SGA),程序全局区(PGA)。系统全局(SGA):一组共享的内存结构(称为SGA 组件),其中包含一个OracleDB 实例的…

建立自己的网站费用广告运营具体是做什么

案例:给"ls -l"命令,设置别名通过”ll“快速访问 1、在项目根目录底下查看有无.bash_profile文件,注意这个是个隐藏文件,需要使用ls -a命令查看: 没有.bash_profile新建一个文件, 在最后添加一行…

做软件外包的网站怎么查看小程序的开发公司

maven-antrun-plugin允许我们在各种maven构建阶段中运行ant目标。 我将专门为具有开发环境的开发人员解释maven-antrun-plugin的非常实际的用法。 通常,使用maven build,您会将项目捆绑到war文件或ear文件中。 您可以使用maven-antrun-plugin直接将此w…

【python】1.基础入门

官网安装可能会有下载较慢的问题 win安装记得勾选 “添加到path”终端运行pythonMAC注意:输入python3,否则不识别 写一行python代码并执行:python3回车后执行注:mac按control+D或者输入exit() -- 退出python代码运…

测速网站开发下沙网站建设

修改version https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/using.html

深圳公司贷款天津网络优化招聘

QT学习笔记(一):VS2013 QT 5.8 运行、编译问题解决 jom: E:\C\4.QT\HelloWord\Makefile.Debug [debug\moc_predefs.h] Error 1 ‘cl’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 jom: E:\C\4.QT\HelloWord\Makefile…

山东省住房和城乡建设厅网站教育中心wordpress商城主题哪个好

文章目录 基本用法失效的多态数组就是数组使用限制作用于空class作用于引用基本用法 sizeof运算符用于查询对象或类型的大小。它在编译时计算,并返回以字节为单位的对象或类型的大小。 在某些情况下,我们需要知道对象的实际大小。例如,当我们分配内存或操作具有特定大小要…

中国营销网站启信聚客通网络营销策划

目录 一、朴素贝叶斯分类理论 1、贝叶斯分类理论 2、条件概率 3、全概率公式 4、贝叶斯推断 5、朴素贝叶斯推断 6、拉普拉斯平滑系数 二、决策树分类 1、相关概念 2、基于信息增益决策树的建立 3、基于基尼指数决策树的建立 一、朴素贝叶斯分类理论 1、贝叶斯分类理…

网站在正在建设中崇义县网站建设

JMS规范 一、JMS是什么二、MQ中间件对比三、JMS组成1.JMS Provider2.JMS Producer3.JMS Consumer4.JSM Message4.1 消息头4.2 消息体4.2.1 生产者4.2.2 消费者 4.3 消息属性 四、JMS可靠性1.PERSISTENT - 持久化1.1 参数设置1.2 Queue持久化1.3 Topic持久化1.3.1 持久的发布主题…

免费发布推广信息网站asp.net网站开发菜鸟

一.新建工程模板(基于固件库) 1.1库函数与寄存器的区别 这里的启动文件都是根据容量来进行区分的 对MDK而言即使include了,也不知道在哪里找头文件 STM32F10X_HD,USE_STDPERIPH_DRIVER 二.新建工程模板(基于寄存器) 上面的大部分配置与固件库的一样 具体可以看手…

简单的视频网站能不能用dw做北京企业建站程序

目录 环境描述 分析过程 1.SD卡格式化 2.使用winhex打开sd卡 3.MBR分析 4.DBR分析

广州响应式网站建设南京网站开发南京乐识权威

前言 上一篇:从领域驱动到模型驱动中我们讨论到,领域驱动设计的核心思想是保持业务-模型-代码的一致性,模型作为沟通业务和代码的工具,至关重要,今天这篇文章就来讨论DDD中建模的一些思考和方法。 什么是建模 虽然看…

天津网站建设公司推荐学电脑哪家好

性能优化是一个很有趣的探索方向,将耗时耗资源的查询优化下来也是一件很有成就感的事情,但既然编程是一种沟通手段,那每一个数据开发者就都有义务保证写出的代码逻辑清晰,具有很好的可读性。 目录 引子 小试牛刀 答案 引言 …

网站建设案例怎么样做淘宝客网站服务器

目录 1.网络编程 2.Echo模型(服务器与客户端实现通信) 3.BIO处理模型(实现多用户访问同个服务器) 4.UDP程序 1.网络编程 有两种通信模型 C/S(Client/Server)基于客户端和服务器端,实现代码时候需要实现客户端与服务器端 B/S(Browser/S…

大二学计算机系统基础

大二学计算机系统基础平台:IA-64 + linux + C + gcc在 linux 系统中:gdb 在 Macintosh OS 上:lldb编译器:以机器码为目标 操作系统:管理进程状态x86-64(又称 x64、AMD64) x86 架构的 64 位扩展 指令集的 64位版…

目前哪些企业需要做网站建设的呢w7系统那个网站做的好

我相信命理,但我不相信在床脚钉四个铜钱就可以保证婚姻幸福、白首偕老。 我相信风水,但我不相信挂一个风铃、摆一个鱼缸就可以使人财运亨通、官禄无碍。 我相信人与环境中有一些神秘的对应关系,但我不相信一个人走路时先跨走左脚或右脚就可以…

阿里云模板建站教程网站的种类

常数 值 描述 vbCr Chr(13) 回车符。 vbCrLf Chr(13) & Chr(10) 回车符与换行符。 vbFormFeed Chr(12) 换页符;在 Microsoft Windows 中不适用。 vbLf Chr(10) 换行符。 vbNewLine Chr(13) & Chr(10) 或 Chr(10) 平台指定的新行字符;适用于…

免费做网站app怎么做页面跳转

参考链接&#xff1a; 反转Java中的字符串String 一、java字符串的反转 1.利用java字符串的拼接实现字符串的反转&#xff0c;代码如下&#xff1a; public static String reverse(String s){ int lens.length(); String str""; for (int i 0; i < len; i) { …