小林同学智能AI大模型语音助手

news/2024/11/16 10:20:33/文章来源:https://www.cnblogs.com/softlin/p/18297321

      闲来无事,想起吃灰的树莓派拿来做点什么,貌似去年还专门买了个麦克风还没怎么用过。正好拿来做个类似小爱智能语音助手的小林同学,现在智能助手不接入大模型都不好意思说出来,当然小林同学没有小爱同学的米家生态功能,后续如果加入多模态图片识别貌似会更有点意思。
      智能助手涉及到的技术主要由:语音离线唤醒、录音、语音识别(Speech-to-Text)、TTS、大模型,在现在这个时候整合这些技术做出个Demo的玩具并没有多少难度。做了些技术调研还有验证马上就动手。下面简单介绍硬件配置、主要代码实现;

树莓派配置

alsamixer 配置 声音大小等 
aplay -l  查看设备情况修改/etc/asound.conf或.asoundrc
vim .asoundrc配置默认设备
defaults.pcm.card 1   默认播放设备
defaults.ctl.card 0      默认控制设备
sudo /etc/init.d/alsa-utils restart录音  arecord -D hw:2,0 -t wav -c 1 -r 44100 -f S16_LE test.wav-D hw:2,0 第二个声卡的第一个设备  -f S16_LE 指定了采样格式为 16 位小端   -r 44100 设置了采样率为 44100Hz -c 1 表示使用单声道录音
播放 aplay test.wav 

      语音唤醒—》录音—》语音识别—》大模型—》TTS—》语音播报

语音唤醒

      选了开源的Snowboy作为语音唤醒的实现,Snowboy非常适合在树莓派上使用,非常轻量反应很灵敏。它的唤醒为离线实现并不依赖网络,还可以定制个人唤醒词,如小林同学、Alexa、小爱同学等你想要的任何唤醒词,使用也非常简单。
      录制唤醒词:https://snowboy.hahack.com

from snowboy import snowboydecoder
def hello_callback():communicate = edge_tts.Communicate("你好啊",voice)asyncio.run(communicate.save("./hello.wav"))playsound("hello.wav")
detector.start(detected_callback=hello_callback,interrupt_check=interrupt_callback,sleep_time=0.03)detector.terminate()启动程序  python main.py snowboy/linx.pmdl

语音录制

      最初选了Sounddevice作为录制语音的框架,在录制固定长度音频是并没有问题生成音频文件没什么杂音,但在加了阈值听到声音才开始录制没有声音停止录制的逻辑之后生成音频有嘟嘟嘟嘟的杂音,搞了一两个小时没有解决换了技术方案。
      其实AI助手也不需要听到声音开始录制,只需要在唤醒时录制即可。最终选择了SpeechRecognition作为技术方案,录制效果也不错。

import speech_recognition as sr
import baidu
import jsondef rec(rate=16000):try:r = sr.Recognizer()file = "recording.wav"with sr.Microphone(sample_rate=rate) as source:audio = r.listen(source,timeout=12,phrase_time_limit=6)with open(file, "wb") as f:f.write(audio.get_wav_data())text = json.loads(baidu.tts(file))if(text is not None):return text.get("result")[0]else:return Noneexcept sr.WaitTimeoutError:print("录音超时,没有检测到声音。")except Exception as e:print(f"发生错误: {e}")

语音识别

      想着搞离线语音识别最近有一个OpenAi开源的神器Whisper Live不仅可以对视频进行转为文本还可以进行实时视频转录,如生成视频字幕。在笔记本上试了下效果的确不错,但由于算力硬件原因,在树莓派上效果并不理想一个几秒语音转录就要几十秒。没办法最终换成了百度的在线语音识别。

TTS(Text To Speech)

      文本转语音选择了微软开源的Edge-TTS效果还不错,在树莓派上体验性能还算能接受。

import edge_ttsdef generater_wav(msg:str):communicate = edge_tts.Communicate(msg,voice)asyncio.run(communicate.save("./temp.wav"))playsound("temp.wav")

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

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

相关文章

wifi 路由器设置和丢包问题 erwa.cn备忘

手机热点:早上少,上班后就开手机热点开始的人多了,多了后,newifi_BA04 2.4G就丢包。后来连接5G就不丢包,台式电脑用5G的USB转无线的网卡(购买是选择双频网口,2.4G(丢包),5.8G都支持的)。 erwa.cn 二娃备忘

ASP.NET Core中创建中间件的几种方式

前言 今天我们一起来盘点一下在ASP.NET Core应用程序中添加和创建中间件常见的四种方式。 中间件介绍 ASP.NET Core中间件(Middleware)是用于处理HTTP请求和响应的组件,它们被安排在请求处理管道中,并按顺序执行。中间件的设计是为了使其在请求处理管道中能够以灵活和可扩展…

读人工智能全传10深度思维

读人工智能全传10深度思维1. 深度思维 1.1. DeepMind 1.1.1. 深度思维 1.1.2. 2014年的员工不足25人 1.1.3. 深度思维公司公开宣称其任务是解决智能问题 1.1.4. 2014年谷歌收购DeepMind,人工智能突然成了新闻热点,以及商业热点 1.1.4.1. 收购报价高达4亿英镑 1.1.4.2. 深度思…

Teamcenter 按照时间段分批导入索引数据

1.修改导入区间:2.打开文件,修改日期范围:3.上传回服务器: 4.执行索引命令: 5.执行结果: 6.所有索引都创建完成后,启动定时增量索引,30秒索引一次 ./runTcFTSIndexer.sh -task=objdata:sync -interval=30

TIOVX验证阶段分析

TIOVX验证阶段分析 OpenVX数据对象的分配和映射发生在验证阶段。每个数据对象的内存都是通过在框架内部使用tivxMemBufferAlloc API从DDR共享内存的分割区域分配的。此分配在主机CPU上完成。通过在vxVerifyGraph调用中执行此分配,框架可以在应用程序内的单个点返回错误,以通知…

c++ 常见问题

1.中文输出乱码解决办法(二选一) #include <iostream> #include "windows.h" using namespace std; // 方法1: // 引入Windows.h // 增加 SetConsoleOutputCP(CP_UTF8); // 方法2: // system("chcp 65001") int main() {SetConsoleOutputCP(CP_…

点分治

介绍 点分治, 作为一种统计带权树简单路径长度的暴力分治算法, 其分治方法非常的巧妙, 可以将暴力的 \(O(n^2)\) 优化到 \(O(nlogn)\) 先看问题: 在一个带权树上, 统计两个点的简单路径长度不超过 \(k\) 的路径个数 这就是 模板题1 POJ1741 首先还是考虑如何使用暴力求出, 很明…

代理的设置

准备工作需要先获取一个可用代理,代理就是 IP 地址和端口的组合,就是 <ip>:<port> 这样的格式。如果代理需要访问认证,那就还需要额外的用户名密码两个信息。那怎么获取一个可用代理呢?使用搜索引擎搜索 “代理” 关键字,可以看到许多代理服务网站,网站上会有…

Web_BUUCTF_WriteUp | [强网杯 2019]随便注

题目分析 把 1 提交上去,得到回显如下:输入框可输入的内容不止数字,尝试用 " ) ") 闭合,探测发现输入 1 and 1=1;# 和 1 and 1=2;# 的回显不同,判断为单引号闭合。1 and 1=1;#:1 and 1=2;#:尝试查看当前所有数据库 1;show databases;#:成功了,接着看看当前…

红日靶场二

一、所需环境web端(双网卡)pc主机(双网卡)dc web端开启weblogic服务,360安全卫士 二、信息收集 1、目标主机探测2、端口扫描发现开启了许多高危端口,比如:7001、3389、445等 3、对7001weblogic端口就行漏洞扫描--->工具(Vscan-plus)发现扫出了一些cve漏洞,然后逐个…

Eureka原理

Eureka高级架构每一个地区对应一个region,zone 相当于机房 Eureka的服务治理流程 1、客户端启动时会向Eureka server发送注册请求; 2、当注册成功后客户端会每30秒定时通过提供的http api请求一次Eureka server端获取服务列表,第一次是全量,后面都是增量,然后缓存到本地;…

算法金 | 来了,pandas 2.0

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」今日 210+/10000,内含 Pandas 是一个强大的数据分析库,广泛应用于科学研究、金融分析、商业智能等领域。它提供了高效的数据结构和数据分析工具,使得处理和分析数据变…