树莓派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之间…

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

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

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…

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;但是创建子窗口加载子页…

智能探针技术:实现可视、可知、可诊的主动网络运维策略

网络维护的重要性 网络运维是确保网络系统稳定、高效、安全运行的关键活动。在当今这个高度依赖信息技术的时代&#xff0c;网络运维的重要性不仅体现在技术层面&#xff0c;更关乎到企业运营的方方面面。网络运维具有保障网络的稳定性、提升网络运维性能、降低企业运营成本等…

泷羽sec-shell脚本(全) 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

鸿蒙学习使用模拟器运行应用(开发篇)

文章目录 1、系统类型和运行环境要求2、创建模拟器3、启动和关闭模拟器4、安装应用程序包和上传文件QA:在Windows电脑上启动模拟器&#xff0c;提示未开启Hyper-V 1、系统类型和运行环境要求 Windows 10 企业版、专业版或教育版及以上&#xff0c;且操作系统版本不低于10.0.18…

MySQL 利用JSON特性完成复杂数据存储和查询

情景描述 下面一个应用场景&#xff0c;是数据库需要存储文库类的信息。文库分多个种类&#xff0c;比如图书类、论文类等多个类别&#xff0c;每个类别有不同的字段信息。 常规处理方法 要在单张表中去存储不同种类的文库数据&#xff0c;表就会变成这样的结构&#xff1a; …

【数据结构】哈希 ---万字详解

unordered系列关联式容器 在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时效率可达到log_2 N&#xff0c;即最差情况下需要比较红黑树的高度次&#xff0c;当树中的节点非常多时&#xff0c;查询效率也不理想。最好 的查询是&#xff0c…