ChatGPT 智能音箱(使用 OpenAI 和 Google 语音识别进行语音识别和文本转语音)
视频演示
使用激活词 "Jeffers" 的视频演示
带视觉功能的视频演示
设备清单:
- Raspberry Pi 4b 4GB
- VMini 外置 USB 立体声音箱
- VReSpeaker 4-Mic 阵列
- ANSMANN 10,000mAh Type-C 20W PD 移动电源
在您的 PC/Mac 上运行(使用 chat.py 或 test.py 脚本)
chat.py
和 test.py
脚本直接在您的 PC/Mac 上运行。它们都允许您使用语音识别输入提示,将提示发送到 OpenAI 生成响应,然后使用 gTTS 将响应转换为音频文件并在您的 Mac/PC 上播放音频文件。要使此脚本正常工作,您的 PC/Mac 必须有一个正常工作的默认麦克风和扬声器。请注意,这些脚本是在 Mac 上设计的,因此在 Windows 和 Linux 上可能需要额外的依赖项。它们之间的区别在于 chat.py
更快,始终处于开启状态,而 test.py
像标准的智能音箱一样工作——只在听到激活命令(当前设置为“Jeffers”)时才工作。
在 Raspberry Pi 上运行(使用 pi.py 脚本)
pi.py
脚本是一个新的、更高级的 smart_speaker.py
脚本版本,是最先进的脚本,类似于真实的智能音箱。此脚本的目的是通过 PicoVoice (https://console.picovoice.ai/
) 构建自定义模型,将唤醒词卸载到自定义模型上。这提高了效率和长期使用的可靠性。由于更高的可靠性和将定期添加的更高级功能,该脚本将成为未来开发的主脚本。
先决条件 - chat.py
- 您需要有一个有效的 OpenAI API 密钥。您可以在 https://platform.openai.com 注册一个免费的 API 密钥。
- 您需要运行 Python 版本 3.7.3 或更高。我在 Mac 上使用的是 3.11.4,在 Raspberry Pi 上使用的是 3.7.3。
- 在安装 HomeBrew 后运行
brew install portaudio
:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 您需要安装以下包:
openai
,gTTS
,pyaudio
,SpeechRecognition
,playsound
,python-dotenv
和pyobjc
(如果您使用的是 Mac)。您可以使用 pip 安装这些包,也可以使用 pipenv 来包含一个虚拟环境。 - 首先,更新您的工具:
pip install --upgrade pip setuptools
然后pip install openai pyaudio SpeechRecognition gTTS playsound python-dotenv apa102-pi gpiozero pyobjc
先决条件 - pi.py
要运行 pi.py,您需要一台 Raspberry Pi 4b(我正在使用 4GB 模型,但 2GB 应该足够),用于 Raspberry Pi 的 ReSpeaker 4-Mic 阵列和 USB 扬声器。
您还需要一个开发者帐户和 OpenAI 的 API 密钥 (https://platform.openai.com/overview
),一个 Tavily 搜索代理 API 密钥 (https://app.tavily.com/sign-in
) 和一个 PicoVoice 的访问密钥和自定义语音模型 (https://console.picovoice.ai/
和 https://console.picovoice.ai/ppn
分别。请创建您自己的语音模型并下载正确的版本以在 Raspberry Pi 上使用)
现在开始设置 Pi。让我们开始吧!
在您的 Raspberry Pi 终端上运行以下命令:
-
sudo apt update
-
sudo apt install python3-gpiozero
-
git clone https://github.com/Olney1/ChatGPT-OpenAI-Smart-Speaker
-
首先,更新您的工具:
pip install --upgrade pip setuptools
然后pip install openai pyaudio SpeechRecognition gTTS pydub python-dotenv apa102-pi gpiozero
接下来,安装依赖项,pip install -r requirements.txt
。我使用的是 Python 3.9#!/usr/bin/env python3.9
。您可以使用 pip 安装这些包,也可以使用 pipenv 来包含一个虚拟环境。 -
PyAudio 依赖于 PortAudio 作为依赖项。您可以使用以下命令安装它:
sudo apt-get install portaudio19-dev
-
Pydub 依赖项:您的系统需要安装 ffmpeg。在 Raspberry Pi 上,您可以使用以下命令安装:
sudo apt-get install ffmpeg
。如果您在找到唤醒词时遇到脚本挂起的问题,您可能还需要安装 simpleaudio,因此安装这些包以防万一:sudo apt-get install python3-dev
(用于编译的开发标头)和install simpleaudio
(用于播放 mp3 文件的不同后端)以及sudo apt-get install libasound2-dev
(必要的依赖项)。 -
如果您使用的是 RESPEAKER,请按照本指南安装所需的依赖项:(
https://wiki.seeedstudio.com/ReSpeaker_4_Mic_Array_for_Raspberry_Pi/#getting-started
)。然后安装 RESPEAKER 板上的灯光支持。您需要 APA102 LED:sudo apt install -y python3-rpi.gpio
然后sudo pip3 install apa102-pi
。 -
激活 SPI:sudo raspi-config;进入“Interface Options”;进入“SPI”;启用 SPI;同时:更改默认密码!退出工具并重新启动。
-
获取 Seeed 语音卡源代码,安装并重新启动:
git clone https://github.com/HinTak/seeed-voicecard.git
cd seeed-voicecard
sudo ./install.sh
sudo reboot now
-
最后,在 Raspberry Pi 上加载音频输出
sudo raspi-config
-选择 1 系统选项 -选择 S2 音频 -选择您偏好的音频输出设备 -选择完成
使用 - 适用于 chat.py:
- 您需要为您的Open API密钥设置环境变量。为此,请在同一目录中创建一个
.env
文件,并将您的API密钥添加到文件中,如下所示:OPENAI_API_KEY="API KEY GOES HERE"
。这比将API密钥硬编码到程序中更安全。 您不能更改变量OPENAI_API_KEY
的名称。 - 使用
python chat.py
运行脚本。 - 脚本将提示您说些什么。对着麦克风说一个句子。您可能需要允许程序在Mac上访问您的麦克风,运行程序时应该会出现提示。
- 脚本会将所说的句子发送到OpenAI,使用文本到语音模型生成响应,并将响应播放为音频文件。
使用方法——适用于pi.py
- 您需要为您的Open API密钥、PicoVoice Access Key和Tavily API密钥设置环境变量以进行代理搜索。为此,请在同一目录中创建一个
.env
文件,并将您的API密钥添加到文件中,如下所示:OPENAI_API_KEY="API KEY GOES HERE"
和ACCESS_KEY="PICOVOICE ACCESS KEY GOES HERE"
和TAVILY_API_KEY="API KEY GOES HERE"
。这比将API密钥硬编码到程序中更安全。 - 确保您将
pi.py
脚本和apa102.py
及alexa_led_pattern.py
脚本保存在同一文件夹中,如果使用ReSpeaker,请将它们保存在您的Pi上。 - 在Raspberry Pi上使用
python3 pi.py
或python3 pi.py 2> /dev/null
运行脚本。第二个选项忽略所有开发人员警告和错误,使控制台仅关注打印语句。 - 脚本会提示您说出被编程到Picovoice自定义唤醒词模型中的唤醒词“Jeffers”。您可以将其更改为任何名字。一旦检测到唤醒词,灯会亮蓝灯。它现在准备好让您提出问题。当您提出问题或当麦克风捕捉到并处理噪音时,灯会旋转为蓝色,这意味着您的录音样本/问题正在发送到OpenAI。
- 脚本会使用文本到语音模型生成响应,并将响应播放为音频文件。
自定义
- 您可以通过修改
model_engine
的值来更改OpenAI模型引擎。例如,要使用“gpt-3.5-turbo”模型以获得更便宜且更快的响应但知识截止到2021年9月,请设置model_engine = "gpt-3.5-turbo"
。 - 您可以通过修改
language
的值来更改生成的音频文件的语言。例如,要生成法语音频,请设置language = 'fr'
。 - 您可以调整以下行中的
temperature
参数来控制生成响应的随机性:
response = client.chat.completions.create(
model=model_engine,
messages=[{"role": "system", "content": "You are a helpful smart speaker called Jeffers!"}, # 在这里添加更多上下文内容。
{"role": "user", "content": prompt}],
max_tokens=1024,
n=1,
temperature=0.7,
)
return response
较高的temperature
值会产生更多样化和随机的响应,而较低的值则会产生更确定性的响应。
Raspberry Pi安装的重要说明
如果您使用的视频中的相同USB扬声器,则需要运行sudo apt-get install pulseaudio
来安装其支持。这可能还需要您设置一个命令以在每次启动时启动pulseaudio:pulseaudio --start
。
在启动时添加启动命令
打开终端并输入:sudo nano /etc/rc.local
在重要的网络/启动命令之后添加:su -l pi -c '/usr/bin/python3 /home/pi/ChatGPT-OpenAI-Smart-Speaker/ && pulseaudio --start && python3 pi.py 2> /dev/null’
确保在最后保留exit 0这一行,然后保存文件并退出。在nano中,按Ctrl-x,然后Y退出。
ReSpeaker
如果您想使用ReSpeaker灯,您可以从大多数销售Raspberry Pi的主要在线商店购买。 这是在线指南:https://wiki.seeedstudio.com/ReSpeaker_4_Mic_Array_for_Raspberry_Pi/
要测试您的麦克风和扬声器,请在Raspberry Pi上安装Audacity:
sudo apt update
sudo apt install audacity
audacity
其他可能的问题
在Raspberry Pi上,您可能会遇到关于安装flac
的错误。
您需要的文件将在此处找到:https://archive.raspbian.org/raspbian/pool/main/f/flac/ 请注意以下链接可能已更改或更新,因此请参考上述链接以获取最新文件名,然后更新您的命令。
sudo apt-get install libogg0
$ wget https://archive.raspbian.org/raspbian/pool/main/f/flac/libflac8_1.3.2-3+deb10u3_armhf.deb
$ wget https://archive.raspbian.org/raspbian/pool/main/f/flac/flac_1.3.2-3+deb10u3_armhf.deb
$ sudo dpkg -i libflac8_1.3.2-3+deb10u3_armhf.deb
$ sudo dpkg -i flac_1.3.2-3+deb10u3_armhf.deb
$ which flac
/usr/bin/flac
sudo reboot
$ flac --version
flac 1.3.2
您可能需要安装GStreamer,如果遇到有关Gst的错误。
安装GStreamer:打开终端并运行以下命令以安装GStreamer及其基本插件:
sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good
这将安装GStreamer核心和一组基本和高质量的插件。
接下来,您需要安装GStreamer的Python绑定。使用此命令:
sudo apt-get install python3-gst-1.0
此命令安装GStreamer的Python 3绑定。
安装其他GStreamer插件(如果需要):根据您需要处理的音频格式,您可能需要其他GStreamer插件。例如,要安装MP3播放的插件,请使用:
sudo apt-get install gstreamer1.0-plugins-ugly
在启动时从Pi退出运行中的脚本:ALT + PrtScSysRq(或Print按钮)+ K
感谢:
https://github.com/tinue/apa102-pi 及 Seeed Technology Limited 提供的补充代码。
阅读更多关于该项目的最新进展
https://medium.com/@ben_olney/openai-smart-speaker-with-raspberry-pi-5e284d21a53e