Leia as informações introdutórias deste post em Transcrição automática de mensagens de voz no Telegram.
Nuvem da OpenAI
Usar a nuvem da OpenAI para a transcrição de áudios, apesar de paga, pode ser uma ótima alternativa quando avaliada a relação custo x benefício. Atualmente, em maio de 2024, a transcrição, utilizando o modelo Whisper, custa aproximadamente US$ 0,006 por minuto, arredondado para o segundo mais próximo do tempo do áudio. Tal custo, dependendo do uso, pode ser inferior ao gasto mensal com a energia elétrica para se manter um computador em funcionamento, pricipalmente quando comparado ao uso de máquinas com placas de vídeo de alto desempenho. Veja os preços atualizados da nuvem da OpenAI no site oficial.
Para meu uso pessoal, as principais vantages de usar a nuvem são:
- Menor gasto mensal, pois meu computador faz minha conta de energia elétrica aumentar aproximadamente R$ 100,00/mês, sendo o uso da nuvem inferior a US$ 2,00/mês;
- O servidor do script tem menores requisitos computacionais uma vez que não faz nenhum processamento importante.
- Excelente qualidade na transcrição.
Mudanças no código
A mudança no código é pequena. Em resumo, basta alterar a função voice_to_text
:
1
2
3
4
5
6
7
8
9
10
11
12
13
def voice_to_text(voice_file, i=0):
if i == 5:
return False
audio_file = open(voice_file, 'rb')
try:
result = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file
).text
except:
time.sleep(3)
result = voice_to_text(voice_file, i+1)
return result
E criar um client
antes de a função ser executada:
1
client = OpenAI(api_key='ab-cdefghijklmnopqrstuvxz')
A API_KEY
deve ser obtida cadastrando-se em platform.openai.com/api-keys.
O código completo da solução é:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from pyrogram import Client, filters, enums
import telebot
import time
import os
from openai import OpenAI
api_id = 123456789
api_hash = "1a2b3c4d5e6f7g8h9i0j"
app = Client("Voice2Text", api_id=api_id, api_hash=api_hash)
client = OpenAI(api_key='ab-cdefghijklmnopqrstuvxz')
def remove_file(voice_file):
os.remove(voice_file)
def voice_to_text(voice_file, i=0):
if i == 5:
return False
audio_file = open(voice_file, 'rb')
try:
result = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file
).text
except:
time.sleep(3)
result = voice_to_text(voice_file, i+1)
return result
def download_voice(message):
return app.download_media(message)
def edit_message(client, msg, message, transcription):
text = (
f'<b>🎙 Transcrição automática:</b>'
f'\n<i>{transcription}</i>'
)
client.edit_message_text(
chat_id=message.chat.id,
message_id=msg.id,
text=text,
parse_mode=enums.ParseMode.HTML
)
def send_message(client, message):
msg = app.send_message(
chat_id=message.chat.id,
text='📝 Transcrição iniciada...',
parse_mode=enums.ParseMode.HTML,
reply_to_message_id=message.id
)
return msg
def delete_message(client, msg):
app.delete_messages(
chat_id=msg.chat.id,
message_ids=msg.id
)
@app.on_message(filters.private & (filters.voice | filters.video_note))
def receive_voice(client, message):
msg = send_message(client, message)
app.send_chat_action(message.chat.id, enums.ChatAction.TYPING)
voice_file = download_voice(message)
transcription = voice_to_text(voice_file)
if not transcription:
delete_message(client, msg)
return
print(f'{message.chat.id} disse: {transcription}')
edit_message(client, msg, message, transcription)
remove_file(voice_file)
app.run()
E pronto! Deixando esse script em execução, as transcrições das mensagens de voz enviadas ou recebidas acontecerá automaticamente.
Leia mais em Como manter um processo rodando para sempre.