Skip to content

Modelo transcrição áudio

O presente código visa implementar uma solução que permite aos usuários realizar consultas ao chat GPT-4 utilizando comandos de voz. Essa funcionalidade é obtida ao integrar uma solução existente de gravação e transcrição de áudio para texto (ver referências na seção de bibliografia). Para alcançar esse objetivo, a linguagem de programação escolhida é o Python, amplamente reconhecida por sua versatilidade e facilidade de uso. Essa funcionalidade faz uso dos modelos avançados de inteligência artificial Whisper e GPT-4, divulgados e disponibilizados pela OpenAI.

Para a utilização dessa funcionalidade é preciso rodar os seguintes comandos para uso das bibliotecas:

pip install openai
pip install os
pip install pyaudio
pip install wave
pip install load_dotenv
pip install requests
pip install json

Inicialmente, é necessário importar as bibliotecas instaladas e em seguida definir a chave de API do OpenAI na variável OPENAI_API_KEY, que é armazenada de forma segura em um arquivo de ambiente (.env). Essa chave é utilizada para autenticar as solicitações à API do OpenAI.

import openai
import os
import pyaudio
import wave
from dotenv import load_dotenv
import requests
import json

load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
openai.api_key = OPENAI_API_KEY

A função record_audio é responsável por gravar o áudio do dispositivo por um determinado período de tempo, utilizando a biblioteca "PyAudio". Os parâmetros como formato de áudio, número de canais, taxa de amostragem e tamanho do "buffer" são configurados nessa função. Veja que o valor padrão para a duração, caso não informada na chamada da função, é 5 segundos.

def record_audio(filename, duration=5):
    FORMAT = pyaudio.paInt16
    CHANNELS = 1
    RATE = 16000
    CHUNK = 1024

    audio = pyaudio.PyAudio()
    stream = audio.open(format=FORMAT, channels=CHANNELS,
                        rate=RATE, input=True,
                        frames_per_buffer=CHUNK)

    print("Recording...")

    frames = []

    for _ in range(0, int(RATE / CHUNK * duration)):
        data = stream.read(CHUNK)
        frames.append(data)

    print("Finished recording")

    stream.stop_stream()
    stream.close()
    audio.terminate()

    with wave.open(filename, 'wb') as wf:
        wf.setnchannels(CHANNELS)
        wf.setsampwidth(audio.get_sample_size(FORMAT))
        wf.setframerate(RATE)
        wf.writeframes(b''.join(frames))

Após a gravação do áudio, a função transcribe_audio realiza a transcrição do arquivo de áudio gravado utilizando o modelo de inteligência artificial Whisper da OpenAI. A transcrição resultante é retornada como texto.

def transcribe_audio(filename):
    with open(filename, "rb") as audio_file:
        transcript = openai.Audio.transcribe("whisper-1", audio_file)
        return transcript["text"]

Em seguida, a função generate_response é utilizada para gerar a resposta do chat GPT-4 com base na pergunta ou comando do usuário. É realizada uma solicitação HTTP POST para a API do OpenAI, fornecendo o modelo GPT-4 e a mensagem do usuário. A resposta obtida é processada e a mensagem de saída é retornada.

def generate_response(question):
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {OPENAI_API_KEY}"
    }

    data = {
        "model": "gpt-4",
        "messages": [{"role": "user", "content": f"{question}"}],
        "temperature": 0.7
    }

    response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=data)

    result = response.json()

    return result["choices"][0]["message"]["content"]

A função principal main coordena a execução do código. Primeiro, o áudio é gravado e salvo em um arquivo chamado "recorded_audio.wav". Em seguida, o áudio é transcrito e impresso na tela para verificação. Posteriormente, a função generate_response é chamada, passando a transcrição como entrada, e a resposta do chat GPT-4 é impressa na tela.

def main():
    audio_filename = "recorded_audio.wav"
    record_audio(audio_filename)
    transcription = transcribe_audio(audio_filename)
    print("Transcription:", transcription)
    response = generate_response(transcription)
    print(response)
if __name__ == "__main__":
    main()

Ao executar o código, é possível interagir com o chat GPT-4 através de comandos de voz, fornecendo perguntas ou instruções. O assistente virtual processará o áudio, converterá em texto, enviará a consulta para o modelo GPT-4 e retornará a resposta gerada.

Para mais informações consulte a documentação da OpenAI.

Bibliografia

SEBASTIAN. Voice to Text Made Easy: Implementing a Python App with OpenAI’s Whisper Speech-to-Text API. Medium. Disponível em: https://medium.com/codingthesmartway-com-blog/voice-to-text-made-easy-implementing-a-python-app-with-openais-whisper-speech-to-text-api-e8f415a5f737. Acesso em: 20 jul. 2023.