一、简介
效果:运行起来后,可以连续对话
硬件:树莓派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