树莓派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.mzph.cn/diannao/62685.shtml

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

相关文章

SAP SD学习笔记17 - 投诉处理3 - Credit/Debit Memo依赖,Credit/Debit Memo

上一章讲了 请求书(发票)的取消。 SAP SD学习笔记16 - 请求书的取消 - VF11-CSDN博客 再往上几章,讲了下图里面的返品传票: SAP SD学习笔记14 - 投诉处理1 - 返品处理(退货处理)的流程以及系统实操&#…

Linux服务器使用JupyterLab

一、JupyterLab的配置 1. conda配置 自行搜索conda安装与配置。 2. 环境创建 (1)创建环境 conda create -n jupyter python3.10(2)激活环境 conda activate jupyter(3)安装jupyter包 pip install -i…

Flutter:页面滚动

1、单一页面,没有列表没分页的,推荐使用:SingleChildScrollView() return Scaffold(backgroundColor: Color(0xffF6F6F6),body: SingleChildScrollView(child: _buildView()) );2、列表没分页,如购物车页,每个item之间…

网络安全——浅谈HTTP协议

HTTP请求 HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求。 HTTP请求由状态行、请求头、请求正文三部分组成: 状态行:包括请求方式Method、资源路径URL、协议版本Version;请求头:包括一些访问的域名、…

Maya CurveBrush 笔刷开发

Maya CurveBrush 笔刷开发 | 智伤帝的个人博客 GitHub - FXTD-ODYSSEY/Maya-CurveBrush: Maya Tweak NUBRBS Curve Brush

使用GitZip for github插件下载git仓库中的单个文件

背景:git仓库不知道抽什么疯,下载不了单个文件,点击下载没有反应,遂找寻其他方法,在这里简单记录下。 使用GitZip for github插件下载仓库中的单个文件 1、首先在浏览器安装插件,并确保为打开状态。 2、然…

Vue 集成和使用 SQLite 的完整指东

1. 引言 SQLite 是一种轻量级的关系型数据库管理系统,以其简单易用、无需服务器等特点广泛应用于嵌入式系统、移动应用和小型应用程序中。在 Web 开发中,尤其是前端应用开发中,SQLite 可以作为客户端本地存储的一种选择,为用户提…

Python Flask框架入门指南

标题:Python Flask框架入门指南 摘要 Flask是一个轻量级的Web应用框架,用Python编写。它以其简洁的设计和强大的扩展性而闻名,非常适合快速开发小型到中型的应用程序。本文将介绍Flask的基本概念、安装步骤、核心功能以及一些实用示例&…

Unet改进57:在不同位置添加SFHF

本文内容:在不同位置添加CBAM注意力机制 论文简介 由于恶劣的大气条件或独特的降解机制,自然图像会遭受各种退化现象。这种多样性使得为各种恢复任务设计一个通用框架具有挑战性。现有的图像恢复方法没有探索不同退化现象之间的共性,而是侧重于在有限的恢复先验下对网络结构…

数据结构(初阶7)---七大排序法(堆排序,快速排序,归并排序,希尔排序,冒泡排序,选择排序,插入排序)(详解)

排序 1.插入排序2.希尔排序3.冒泡排序4.选择排序(双头排序优化版)5.堆排序6.快速排序1). 双指针法2).前后指针法3).非递归法 7.归并排序1).递归版本(递归的回退就是归并)2).非递归版本(迭代版本) 计算机执行的最多的操作之一就有排序,排序是一项极其重要的技能 接下…

DataWhale—PumpkinBook(TASK07支持向量机)

课程开源地址及相关视频链接:(当然这里也希望大家支持一下正版西瓜书和南瓜书图书,支持文睿、秦州等等致力于开源生态建设的大佬✿✿ヽ(▽)ノ✿) Datawhale-学用 AI,从此开始 【吃瓜教程】《机器学习公式详解》(南瓜…

【Python数据分析五十个小案例】使用自然语言处理(NLP)技术分析 Twitter 情感

博客主页:小馒头学python 本文专栏: Python爬虫五十个小案例 专栏简介:分享五十个Python爬虫小案例 项目简介 什么是情感分析 情感分析(Sentiment Analysis)是文本分析的一部分,旨在识别文本中传递的情感信息&…

【数据结构与算法】排序算法(上)——插入排序与选择排序

文章目录 一、常见的排序算法二、插入排序2.1、直接插入排序2.2、希尔排序( 缩小增量排序 ) 三、选择排序3.1、直接选择排序3.2、堆排序3.2.1、堆排序的代码实现 一、常见的排序算法 常见排序算法中有四大排序算法,第一是插入排序,二是选择排序&#xff…

Educator头歌:离散数学 - 图论

第1关&#xff1a;图的概念 任务描述 本关任务&#xff1a;学习图的基本概念&#xff0c;完成相关练习。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;图的概念。 图的概念 1.一个图G是一个有序三元组G<V,R,ϕ>&#xff0c;其中V是非空顶点集合&am…

OD E卷 - 实现 【虚拟理财游戏】

题目 在一款虚拟游戏中生活&#xff0c;必须进行投资以增强在虚拟游戏中的资产&#xff0c;避免被淘汰&#xff0c;现在有一家Bank&#xff0c;提供理财产品M个&#xff0c;风险及投资回报不同&#xff0c;你有N(元)进行投资&#xff0c;能接受的总风险值为X。你要在可接受范围…

oracle RAC各版本集群总结和常用命令汇总

oracle RAC学习 RAC介绍 RAC&#xff1a;高可用集群&#xff0c;负载均衡集群&#xff0c;高性能计算集群 RAC是⼀种⾼可⽤&#xff0c;⾼性能&#xff0c;负载均衡的share-everything的集群 8i:内存融合雏形 内存融合雏形&#xff08;Oracle Parallel Server&#xff09;…

数据资产管理是什么?为什么重要?核心组成部分(分类分级、登记追踪、质量管理、安全合规)、实施方法、未来趋势、战略意义

文章目录 一、引言&#xff1a;数据的新时代二、什么是数据资产管理&#xff1f;2.1 定义2.2 核心功能 三、为什么数据资产管理至关重要&#xff1f;3.1 面对的数据管理挑战 四、数据资产管理的核心组成部分4.1 数据分类与分级4.2 数据资产登记与追踪4.3 数据质量管理4.4 数据安…

C++高阶算法[汇总]

&#xff08;一&#xff09;高精度算法概述 高精度算法是指能够处理超出常规数据类型表示范围的数值的算法。在 C 中&#xff0c;标准数据类型通常有固定的位数和精度限制&#xff0c;而高精度算法可以解决大数运算、金融计算和科学计算等领域的问题。 &#xff08;二&#x…

springboot365高校疫情防控web系统(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;高校疫情防控的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为…

Electron实现打开子窗口加载vue路由指定的组件页面白屏

白屏有两种情况&#xff1a; Vue项目使用的history路由的话就会显示空白&#xff0c;加载不出来路由&#xff0c;也不能跳转路由 这种情况看我上一篇文章Electron vue3 打包之后不能跳转路由-CSDN博客 Electron中已经能正常加载页面跳转路由&#xff0c;但是创建子窗口加载子页…