树莓派5+文心一言 -> 智能音箱

一、简介

效果:运行起来后,可以连续对话

硬件:树莓派5、麦克风、音箱,成本500-1000

软件:snowboy作为唤醒词、百度语音作为语音识别、brain作为指令匹配、百度文心一言作为对话模块、微软的edge-tts语音合成...

二、开发流程

连接到树莓派,不管是ssh、vnc都比较简单,这个不再赘述。在这个基础上进行

1、基础配置

(1)、从0开始启动树莓派,先是把树莓派系统从头到尾的更新一下,否则在安装一些软件的时候会出现问题

更新源

sudo nano /etc/apt/sources.list
deb https://mirrors.tuna.tsinghua.edu.cn/debian bookworm main contrib non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian bookworm-updates main contrib non-free-firmware

更新源

sudo nano /etc/apt/sources.list.d/raspi.list
deb https://mirrors.tuna.tsinghua.edu.cn/raspberrypi bookworm main

更新系统

sudo apt update
sudo apt full-upgrade

(2)、安装miniconda

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh
bash Miniconda3-latest-Linux-aarch64.sh

(3)、配置git(较简单,不再赘述)

(4)、树莓派、windows剪切板内容互用

2、音箱代码配置

(1)、安装必要的和音箱相关的包

sudo apt-get install portaudio19-dev 
sudo apt-get install python3-pyaudio 
sudo apt-get install sox 
sudo apt-get install pulseaudio 
sudo apt-get install libsox-fmt-all 
sudo apt-get install ffmpeg

(2)、安装python3.8虚拟环境即可,因为这个项目是比较早的版本了

conda create --name pi python=3.8

(3)、连接好麦克风、音箱后,检查下设备

如果遇到录音问题/音箱问题,先单独测试硬件设备,方法是:在百度搜“在线测试麦克风”,然后把新买的麦克风、音箱插到电脑上,进行测试,如果测试没有问题,那说明是树莓派有问题,或者树莓派没问题,但是你哪里搞错了。如果有问题,就换设备即可

aplay -l    检查播放设备是否包含seeed-2mic-voicecard,这个是查播放设备,录音设备不会被检测出来
arecord -l  查看所有可以录音的设备
alsamixer   音频工具调整参数
arecord -f S16_LE -d 3 temp.wav    测试录音3秒,千万不要加:-D "plughw:2,0",加了就出问题
aplay temp.wav   播放录音看看效果
sudo alsactl --file=asound.state store    #保存配置
sudo cp asound.state /var/lib/alsa   #避免开机音量被重置

(4)、clone项目代码

git clone git@github.com:wzpan/wukong-robot.git
cd wukong_mepip3 install pyaudio
pip3 install pyaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

(5)、编译snowboy唤醒词模块

cd $HOME
wget https://wzpan-1253537070.cos.ap-guangzhou.myqcloud.com/misc/swig-3.0.10.tar.gz
tar xvf swig-3.0.10.tar.gz
cd swig-3.0.10
sudo apt-get -y update
sudo apt-get install -y libpcre3 libpcre3-dev
./configure --prefix=/usr --without-clisp --without-maximum-compile-warnings
make
sudo make install
sudo install -v -m755 -d /usr/share/doc/swig-3.0.10
sudo cp -v -R Doc/* /usr/share/doc/swig-3.0.10
sudo apt-get install -y libatlas-base-dev

(6)、安装一些必要的技能库

mkdir $HOME/.wukong
cd $HOME/.wukong
git clone http://github.com/wzpan/wukong-contrib.git contrib
pip3 install -r contrib/requirements.txt

3、尝试运行

python wukong.py,就能够体验到可以唤醒对话了,但是对话模块还有点问题,需要自定义成文心一言的

4、更改对话模块

class WenxinRobot(AbstractRobot):SLUG = "wenxin"def __init__(self, api_key, secret_key):"""文心一言"""super(self.__class__, self).__init__()self.api_key = api_keyself.secret_key = secret_keyself.context = []os.environ["QIANFAN_ACCESS_KEY"] = api_keyos.environ["QIANFAN_SECRET_KEY"] = secret_key@classmethoddef get_config(cls):return config.get("wenxin", {})def chat(self, texts, _):"""使用Wenxin机器人聊天Arguments:texts -- user input, typically speech, to be parsed by a module"""msg = "".join(texts)msg = utils.stripPunctuation(msg)self.context.append({"role": "user", "content": msg})print("self.context=", self.context)chat_comp = qianfan.ChatCompletion()# 指定特定模型resp = chat_comp.do(model="ERNIE-4.0-Turbo-8K", messages=self.context)print("wenxinyiyan resp = ", resp)print("result=", resp["body"]['result'])self.context.append({"role": "assistant", "content": resp["body"]['result']})return resp["body"]['result']

5、更改唤醒词从snowboy->小强

重点:使用Python3是不行的,要用python2;用树莓派的系统也不好,最好就是用ubuntu 16.04,18.04也可以

(1)、先把服务器的环境弄好

安装创建虚拟环境的包,安装python2、pip2

sudo apt-get install virtualenv -y
sudo apt install python2
sudo apt install python2-pip-whl

(2)、代码

virtualenv -p python2 venv/snowboy
source venv/snowboy/bin/activate
git clone git@github.com:seasalt-ai/snowboy.git
cd snowboy
cd examples/Python
pip install -r requirements.txt在执行pip的时候如果报错,可以按照下面的方式来试试
sudo apt install python-dev
sudo apt install portaudio19-dev
pip install -r requirements.txt

(3)、代码直接是用不了的,需要更新下两个文件

系统版本选择、绝对路径 snowboy_pmdl.py

import os
import sys
import platform
#sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib/ubuntu64/pmdl"))
sys.path.insert(0, "/home/ubuntu/snowboy/lib/ubuntu64/pmdl")from snowboy import *

snowboy_pmdl_config.py

#RES_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../resources/pmdl')
RES_DIR = '/home/ubuntu/snowboy/resources/pmdl'

如果是云服务器的ubuntu,是录不了音的,先想办法录上3个“小强”,再用下面的命令

python generate_pmdl.py -r1=record1.wav -r2=record2.wav -r3=record3.wav -lang=zn -n=hotword.pmdl

生成好hotword.pmdl后,可以测试一下,也可以直接放在前面的音箱代码中使用,如果要测试的话,还需要在目录snowboy/swig/Python下编译出来snowboydetect.py

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

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

相关文章

Springboot——SseEmitter流式输出

文章目录 前言SseEmitter 简介测试demo注意点异常一 ResponseBodyEmitter is already set complete 前言 最近做AI类的开发,看到各大AI模型的输出方式都是采取的一种EventStream的方式实现。 不是通常的等接口处理完成后,一次性返回。 而是片段式的处理…

5G学习笔记之随机接入

目录 1. 概述 2. MSG1 2.1 选择SSB 2.2 选择Preamble Index 2.3 选择发送Preamble的时频资源 2.4 确定RA-RNTI 2.5 确定发送功率 3. MSG2 4. MSG3 5. MSG4 6. 其它 6.1 切换中的随机接入 6.2 SI请求的随机接入 6.3 通过PDCCH order重新建立同步 1. 概述 随机接入…

【Linux-多线程】重谈地址空间+内存管理方式

一、背景知识 a.重谈地址空间 我们之前已经说过,CPU内部见的地址,以及我们打印出来的地址都是虚拟地址;物理内存加载到CPU,CPU内执行进程创建内核数据结构,页表等,通过页表映射到物理磁盘上;也…

Spark Optimization —— Reducing Shuffle

Spark Optimization : Reducing Shuffle “Shuffling is the only thing which Nature cannot undo.” — Arthur Eddington Shuffle Shuffle Shuffle I used to see people playing cards and using the word “Shuffle” even before I knew how to play it. Shuffling in c…

Elasticsearch——Java API 操作

Elasticsearch 软件是由Java语言开发的,所以也可以通过JavaAPI的方式对 Elasticsearch服务进行访问。 创建 Maven 项目 我们在 IDEA 开发工具中创建 Maven 项目(模块也可)ES。并修改pom文件&#xff0c;增加Maven依赖关系。 #直接复制在pom文件的<dependencies></de…

量化的8位LLM训练和推理使用bitsandbytes在AMD GPUs上

Quantized 8-bit LLM training and inference using bitsandbytes on AMD GPUs — ROCm Blogs 在这篇博客文章中&#xff0c;我们将介绍bitsandbytes的8位表示方式。正如你将看到的&#xff0c;bitsandbytes的8位表示方式显著地减少了微调和推理大语言模型&#xff08;LLMs&…

自回归(Autoregressive)模型概述

自回归&#xff08;Autoregressive&#xff09;模型概述 自回归&#xff08;Autoregressive&#xff0c;简称AR&#xff09;模型是一类基于“历史数据”来预测未来数据的模型。其核心思想是模型的输出不仅依赖于当前输入&#xff0c;还依赖于先前的输出。自回归模型通常用于时…

Win11电脑亮度无法调节以及夜间模式点击没有用失效解决方法

一、问题 最近&#xff0c;突然感觉屏幕亮度十分刺眼&#xff0c;想调整为夜间模式&#xff0c;发现点了夜间模式根本没用&#xff0c;亮度也是变成了灰色。 明明前几天还能调节的&#xff0c;这实在是太难受了&#xff01; 二、原因 这是远程控制软件向日葵的问题 在向日葵…

Linux笔记---进程:进程终止

1. 进程终止概念与分类 进程终止是指一个正在运行的进程结束其执行的操作。以下是一些常见的导致进程终止的情况&#xff1a; 一、正常终止 完成任务当进程完成了它被设计要执行的任务后&#xff0c;就会正常终止。收到特定信号在操作系统中&#xff0c;进程可能会收到来自操作…

【工具推荐】dnsx——一个快速、多用途的 DNS 查询工具

basic/基本使用方式 echo baidu.com | dnsx -recon # 查询域名所有记录echo baidu.com | dnsx -a -resp # 查询域名的a记录echo baidu.com | dnsx -txt -resp # 查询域名的TXT记录echo ip | dnsx -ptr -resp # ip反查域名 A记录查询 TXT记录查询 ip反查域名 help/帮助信息 输…

【树莓派5】移动热点获取树莓派IP并初次登录SSH

本篇文章包含的内容 1 打开系统热点2 烧录系统设置3 配置 MobaXterm4 初次启动树莓派配置选项4.1 换源4.2 更新软件包4.3 安装vim编辑器4.4 更改CPU FAN温度转速 Windows版本&#xff1a;Windows11 24H2树莓派&#xff1a;树莓派5&#xff0c;Raspberry Pi 5SSH软件&#xff1a…

【Git系列】Git 提交历史分析:深入理解`git log`命令

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

第144场双周赛:移除石头游戏、两个字符串得切换距离、零数组变换 Ⅲ、最多可收集的水果数目

Q1、[简单] 移除石头游戏 1、题目描述 Alice 和 Bob 在玩一个游戏&#xff0c;他们俩轮流从一堆石头中移除石头&#xff0c;Alice 先进行操作。 Alice 在第一次操作中移除 恰好 10 个石头。接下来的每次操作中&#xff0c;每位玩家移除的石头数 恰好 为另一位玩家上一次操作…

Python parsel库学习总结

parsel库是Python中用于解析HTML文件的库&#xff0c;其能通过CSS选择器、xpath、正则表达式来定位html中的元素。 通过css选择器定位元素 from parsel import Selectorhtml """ <html><head><a class"option1">这是一个伪html片…

【HarmonyOS学习日志(11)】计算机网络之概念,组成和功能

文章目录 计算机网络概念计算机网络&#xff0c;互连网与互联网的区别计算机网络互连网互联网&#xff08;因特网&#xff0c;Internet&#xff09; 计算机网络的组成和功能计算机网络的组成从组成部分看从工作方式看从逻辑功能看 计算机网络的功能数据通信资源共享分布式处理提…

Vue3 开源UI 框架推荐 (大全)

一 、前言 &#x1f4a5;这篇文章主要推荐了支持 Vue3 的开源 UI 框架&#xff0c;包括 web 端和移动端的多个框架&#xff0c;如 Element-Plus、Ant Design Vue 等 web 端框架&#xff0c;以及 Vant、NutUI 等移动端框架&#xff0c;并分别介绍了它们的特性和资源地址。&#…

视觉语言动作模型VLA的持续升级:从π0之参考基线Octo到OpenVLA、TinyVLA、DeeR-VLA、3D-VLA

第一部分 VLA模型π0之参考基线Octo 1.1 Octo的提出背景与其整体架构 1.1.1 Octo的提出背景与相关工作 许多研究使用从机器人收集的大量轨迹数据集来训练策略 从早期使用自主数据收集来扩展策略训练的工作[71,48,41,19-Robonet,27,30]到最近探索将现代基于transformer的策略…

k8s--pod创建、销毁流程

文章目录 一、pod创建流程二、pod销毁流程 一、pod创建流程 1、用户通过kubectl或其他api客户端提交pod spec给apiserver,然后会进行认证、鉴权、变更、校验等一系列过程2、apiserver将pod对象的相关信息最终存入etcd中,待写入操作执行完成,apiserver会返回确认信息给客户端3、…

相同的二叉树

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff1a;true示例 2&…

算法妙妙屋-------1.递归的深邃回响:全排列的奇妙组合

全排列的简要总结 全排列&#xff08;Permutation&#xff09;是数学中一个经典的问题&#xff0c;指的是从一组元素中&#xff0c;将所有元素按任意顺序排列形成的所有可能序列。 特点 输入条件&#xff1a; 给定一组互异的元素&#xff08;通常为数组或字符串&#xff09;。…