Skip to main content

ChatGPT - Raspberry Pi

Este proyecto integra entrada de voz, respuesta mediante un modelo de lenguaje, y salida de voz usando una Raspberry Pi 5. Utiliza el ReSpeaker Lite como dispositivo de entrada y salida de audio, lo que permite una interacción fluida con ChatGPT y servicios de conversión de voz a texto.

Hardware Requerido

Primeros Pasos

Consulta la documentación oficial de instalación para configurar tu Raspberry Pi. Asegúrate de conectarla a una red.

note

Asegúrate de que tu versión de Python sea superior a Python 3.7.1.
Para verificar la versión:

python3 --version

Instalar Librerías

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 la Raspberry Pi 5, ejecuta el siguiente comando para configurar ReSpeaker Lite:
pw-metadata -n settings 0 clock.force-rate 16000

Para que el cambio sea permanente, descomenta y edita la línea default.clock.rate en /etc/pipewire/pipewire.conf (Primero cópialo desde /usr/share/).

tip

Comando para ajustar el volumen de ReSpeaker Lite:

alsamixer

Código

Este código en Python implementa un asistente de voz que escucha una palabra clave, reconoce comandos de voz del usuario, los convierte en texto, genera una respuesta usando GPT-4 y reproduce esa respuesta por voz.

El dispositivo espera primero la palabra clave. Después de detectarla, escucha el comando del usuario. Una vez recibido, se genera una respuesta mediante GPT-4 y se convierte en voz.
Si no se reconoce el comando después de 3 intentos, el sistema volverá a esperar la palabra clave. Tendrás que decir la palabra clave de nuevo para iniciar una nueva sesión de interacción por voz.

  • Paso 1: Configura tu clave API.
export OPENAI_API_KEY= 'your-api-key-here'
  • Paso 2: Crea un archivo nuevo en Python e introduce el siguiente 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()
  • Paso 3: Ejecuta el archivo Python.
python openai.py

¡Todo listo!
Prueba decir Hi para activarlo y comienza a hablar con él.

Loading Comments...