Sipeed矽速科技
直播中

裸奔小耗子

6年用户 67经验值
擅长:嵌入式技术 处理器/DSP 控制/MCU
私信 关注

【Longan Pi 3H 开发板试用连载体验】给ChatGPT装上眼睛,并且还可以语音对话:5,音频采集

音频采集

实现项目的第一步,就是音频采集。但在查阅官方wiki后,并没有看到音频相关部分;在板子上使用arecord -l he aplay -l查看也都没有发现相关设备。
image.png

因此,音频的实现思路是先在pc上运行唤醒词识别,识别到后开始录音,录音结束后进行语音识别。

当pc端完成语音识别后,建立在Longan Pi上的FastAPI服务器将识别到的文本发送至Longan Pi,由Longan Pi完成后续一系列的步骤。

最后,GPT返回的文本经由TTS转化为语音后,再通过FastAPI返回给发起request的PC,PC接收到返回的音频后进行播放,完成整个对话流程。

先来看PC部分,如果要使用python播放或录制音频,我们需要使用到ffmpeg。先从官方GitHub下载编译好的weindows build压缩包,shared和非shared都可以,这两个版本的区别就是非shared将dll都编译在了可执行文件中。

image.png

下载完成后,解压出来,然后最关键的一部来了,ffmpeg的可执行文件都在bin中,需要手动将bin文件夹加入环境变量中。

image.png

添加好后,还需要在python中安装相应的包,我是用的python版本是 Python 3.11

pip install SpeechRecognition
pip install pydub
pip install pyaudio

首先,要根据环境噪音校准一下麦克风阈值,接下来开始采集。当音量超过阈值后还是录音,音量低于阈值一段时间后结束录音。随后将得到的音频传入语音识别模型转为文字,这里我使用的是google的模型:

import speech_recognition as sr

r = sr.Recognizer()
with sr.Microphone() as source:
    r.adjust_for_ambient_noise(source)
    print(">说点什么:")
    audio_in = r.listen(source)
    print("Processing...")
try:
    text_input = r.recognize_google(audio_in, language="cmn-Hans-CN")
    print("You said: " + text_input)
except sr.UnknownValueError as error:
    print("Google could not understand audio")
    print(error)
    text_input = None
except sr.RequestError as error:
    print("Could not request results from Google")
    print(error)
    text_input = None

运行一下,当terminal中出现“>说点什么:”后开始说话,随后就可以看到说话内容打印在terminal中。
image.png

当然了,大多数情况下,这个命令是无法执行的,原因是默认的google服务并没法直接连接。具体的解决方法在下一篇中我们会来详细聊聊。

在上面代码中使用r.adjust_for_ambient_noise(source)是为了根据环境情况自动设置阈值。当然,我们也可以自行进行设置,可以将其替换为下面的代码:

r.dynamic_energy_threshold = False
r.energy_threshold = 10000000
r.pause_threshold = 1.2

这三行代码的作用分别是关闭自动阈值调整,设置阈值,与设置音量低于阈值多少秒后触发停止说话。

而具体的阈值大小,可以通过energy = audioop.rms(buffer, source.SAMPLE_WIDTH)来得到。

更多回帖

发帖
×
20
完善资料,
赚取积分