Pular para o conteúdo principal

ChatGPT - Raspberry Pi

Este projeto integra funcionalidades de entrada de voz, resposta de modelo de linguagem grande e saída de voz usando um Raspberry Pi 5. Ele utiliza o ReSpeaker Lite como dispositivo de entrada e saída de áudio, permitindo uma interação perfeita com o ChatGPT e serviços de conversão de fala em texto.

Hardware Necessário

Primeiros Passos

Consulte a documentação de primeiros passos para configurar primeiro o seu Raspberry Pi e conectar o seu Pi à rede.

nota

Certifique-se de que a sua versão do python é mais recente que python3.7.1.
Para verificar a versão:

python3 --version

Instalar Bibliotecas

sudo apt update
sudo apt install python3-pip python3-dev
sudo apt install portaudio19-dev
pip3 install pyaudio
pip3 install speechrecognition
pip3 install openai
pip3 install playsound
  • Para Raspberry Pi 5, execute o seguinte comando para configurar o ReSpeaker Lite:
pw-metadata -n settings 0 clock.force-rate 16000

Para uma alteração permanente, remova o comentário e edite a linha default.clock.rate em /etc/pipewire/pipewire.conf (copie-a primeiro de /usr/share/).

dica

Comando para ajustar o volume do ReSpeaker Lite:

alsamixer

Código

Este código Python implementa um assistente de voz simples que escuta por uma palavra de ativação, reconhece comandos de voz do usuário, os converte em texto, gera uma resposta usando GPT-4 e então converte a resposta em fala e a reproduz.

O dispositivo primeiro aguarda a palavra de ativação e depois escuta o comando do usuário. Quando o comando é recebido, o programa gera uma resposta usando o GPT-4 e a reproduz como fala. Se ele não conseguir reconhecer o comando três vezes, volta a ouvir a palavra de ativação; você precisará dizer a palavra de ativação novamente para iniciar uma nova sessão de interação por voz.

  • Passo 1: Configurar a chave de API
export OPENAI_API_KEY= 'your-api-key-here'
  • Passo 2: Crie um novo arquivo python e insira o seguinte código:
import speech_recognition as sr
from openai import OpenAI
from pathlib import Path
from pydub import AudioSegment
import os


client = OpenAI()

def text_to_speech(text):
speech_file_path = Path(__file__).parent / "speech.mp3"
response = client.audio.speech.create(
model="tts-1",
voice="alloy",
input=text
)

response.stream_to_file(speech_file_path)
audio = AudioSegment.from_mp3("speech.mp3")
audio.export("speech.wav", format="wav")
cmdline = 'aplay ' + " speech.wav"
os.system(cmdline)



# Initialize recognizer
recognizer = sr.Recognizer()
microphone = sr.Microphone()

# Define the wake word
WAKE_WORD = "hi"

def listen_for_wake_word():
with microphone as source:
recognizer.adjust_for_ambient_noise(source, duration=0.5)
print("Listening for wake word...")

while True:
audio = recognizer.listen(source)
# audio = recognizer.listen(source, timeout=5, phrase_time_limit=5)
try:
text = recognizer.recognize_google(audio).lower()
if WAKE_WORD in text:
print(f"Wake word '{WAKE_WORD}' detected.")
text_to_speech("hi,what can i do for you?")
return True
except sr.UnknownValueError:
continue
except sr.RequestError as e:
print(f"Could not request results; {e}")
continue

i=0
def listen_for_command():
global i
with microphone as source:
print("Listening for command...")
# audio = recognizer.listen(source)
audio = recognizer.listen(source, timeout=5, phrase_time_limit=5)
try:
command = recognizer.recognize_google(audio)
print(f"You said: {command}")
i=0
return command
except sr.UnknownValueError:
print("Could not understand the audio")
i = i+1
except sr.RequestError as e:
print(f"Could not request results; {e}")
i = i+1


def get_gpt_response(prompt):
completion = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "Your name is speaker, you can answer all kinds of questions for me"},
{"role": "user", "content": prompt}
]
)

content_string = completion.choices[0].message.content
paragraphs = content_string.split('\n\n')
combined_content = ' '.join(paragraphs)
return combined_content




def main():
global i
while 1:
flag = listen_for_wake_word()
while flag == True:
user_input = listen_for_command()
if i==3:
flag = False
i = 0
if user_input:
gpt_response = get_gpt_response(user_input)
print(f"GPT says: {gpt_response}")
text_to_speech(gpt_response)


if __name__ == "__main__":
main()
  • Passo 3: Execute o arquivo python.
python openai.py

Agora está tudo pronto, tente acordá-lo com Hi e conversar com ele!

Loading Comments...