EddyGiusepe's picture
Ussando Whisper da OpenAI 🤗
0429034
Raw
History Blame Contribute Delete
4.13 kB
"""
Data Scientist.: Dr.Eddy Giusepe Chirinos Isidro
Speech-to-Text
==============
Este script (main.py) Grava sua fala e depois a transcreve.
Para Gravar pressiono 'r' e 'q' para terminar a gravação e
juntar os trechos de áudios.
OBS: Eu só consegui executar este script como usuário root devido à biblioteca keyboard. ---> ImportError: You must be root to use this library on linux.
====
Link de estudo:
* https://platform.openai.com/docs/guides/speech-to-text
"""
import pyaudio
import openai
import wave
import keyboard
import os
# Substitua sua chave de API OpenAI:
import openai
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # read local .env file
openai.api_key = os.environ['OPENAI_API_KEY']
# Configurar parâmetros de gravação de áudio:
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
CHUNK = 1024
RECORD_SECONDS = 5
# Inicializar PyAudio:
audio = pyaudio.PyAudio()
# Iniciar contador de gravação:
recording_counter = 1
# Definir função de retorno de chamada (callback) para lidar com stream de áudio:
def callback(in_data, frame_count, time_info, status):
"""
The callback function to handle the audio stream.
:parâmetro in_data: dados de áudio.
:parâmetro frame_count: O número de Frames.
:parâmetro time_info: a dictionary of time information.
:parâmetro status: the status of the stream.
:return: a tuple of the audio data and a flag to indicate whether to continue the stream.
"""
frames.append(in_data)
return (in_data, pyaudio.paContinue)
# criar ouvinte de evento de teclado:
def on_press(event):
"""
The function to handle the keyboard events.
:param event: the keyboard event.
"""
global recording, frames, stream, WAVE_OUTPUT_FILENAME, recording_counter
if event.name == 'r':
if not recording:
# Iniciar a Gravação:
recording = True
frames = []
WAVE_OUTPUT_FILENAME = f"output_{recording_counter}.wav"
recording_counter += 1
stream = audio.open(format=FORMAT, channels=CHANNELS,
rate=RATE, input=True,
frames_per_buffer=CHUNK,
stream_callback=callback)
stream.start_stream()
print("A gravação começou")
else:
# pare de gravar e salve o arquivo de áudio:
recording = False
stream.stop_stream()
stream.close()
waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
waveFile.setnchannels(CHANNELS)
waveFile.setsampwidth(audio.get_sample_size(FORMAT))
waveFile.setframerate(RATE)
waveFile.writeframes(b''.join(frames))
waveFile.close()
print("A Gravação terminou")
# inicializar flag de gravação e transmitir:
recording = False
stream = None
frames = None
# start keyboard event listener:
keyboard.on_press(on_press)
# mantenha o programa em execução até que o usuário pressione a tecla "q" para sair:
while True:
if keyboard.is_pressed('q'):
# Combinar todos os arquivos de áudio em um:
print("Combining audio files...")
with wave.open("output.wav", "wb") as outfile:
for i in range(1, recording_counter):
with wave.open(f"output_{i}.wav", "rb") as infile:
if i == 1:
outfile.setparams(infile.getparams())
outfile.writeframes(infile.readframes(infile.getnframes()))
# Transcrever o áudio usando OpenAI API:
audio_file= open("output.wav", "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file, language="pt")
print(transcript["text"])
break
# Lançar recursos PyAudio:
audio.terminate()
# Deletar arquivos de áudio individuais:
for i in range(1, recording_counter):
os.remove(f"output_{i}.wav")