在树莓派5上本地部署端到端智能语音聊天项目
项目介绍
项目总体采用_STT模型+本地大语言模型+TTS模型_三步进行实现,为了能够实现在树莓派等算力资源有限的边缘端设备部署,并使项目延迟尽可能降低,只能选择轻量化的TTS模型与参数较少或者经过量化后的大语言模型进行实现。本项目中每一次问答的处理时间可以控制在十秒以内。
硬件及模型选择
硬件设备
Raspberry pi5(8GB内存),带声卡的扬声器,带麦克风的摄像头,显示屏(其实可以不需要)
模型选择
功能 | 模型名称 |
---|---|
语音转文字 | Paraformer-large |
大语言模型 | Qwen2.5-0.5B-Instruct |
文字转音频(TTS) | Piper-TTS |
项目具体实现步骤
模型下载与环境搭建
语音转文本模型和大语言模型可以直接在魔搭社区找到并下载到本地一个名为chat的项目文件夹下
至于TTS模型,可以进入piper/VOICES.md at master · rhasspy/piper页面,下滑到最后找到
任意选择一个声音(这里我选择medium)下载model与config,一样保存到chat文件夹中
之后进行环境的搭建,新建一个虚拟环境,输入如下指令
pip install piper-tts modelscope transformers funasr torch torchvision torchaudio soundcard accelerate pynput wave\
pygame soundfile
可能会出现没安装全部环境的情况(因为我也不太记得了),后续根据终端输出进行剩余库的安装就可以了
后面运行程序的时候可能会出现一个关于datasets库的报错(具体报的啥我也不太记得了),原因是datasets库的版本不兼容,只需要卸载原来的datasets库安装2.16.0的datasets库就可以解决
pip uninstall datasets
pip install datasets==2.16.0
_Piper_调用函数的编写
由于原github项目中没有给出_Piper_模型在python中调用的示例代码,我在查看库函数后写了一个简单的_Piper_的调用函数,并封装成_Piper_tts.py_文件
# 保存为项目中的piper_tts.py文件
import wave
from piper import PiperVoice
# audio_path为生成语音的保存路径,text为生成语音的文本
def generate_audio(audio_path, text):
# 初始化 Piper 实例
pipers = PiperVoice.load('zh_CN-huayan-medium.onnx', 'zh_zh_CN_huayan_medium_zh_CN-huayan-medium.onnx.json')
# 合成语音
output_wav_path = audio_path
with wave.open(output_wav_path, 'wb') as wav_file:
wav_file.setnchannels(1)
wav_file.setsampwidth(2)
wav_file.setframerate(pipers.config.sample_rate)
pipers.synthesize(text, wav_file=wav_file)
音频文件播放函数的编写
在保存TTS模型生成的音频文件后,我希望将它播放出来,从而形成语音问答的流程,因此借助pygame库进行音频文件播放函数的编写,并保存到项目文件下的_play_audio.py_文件
import pygame
def play_audio(audio_path):
pygame.mixer.init()
pygame.mixer.music.load(audio_path)
pygame.mixer.music.play