EddyGiusepe's picture
Ussando Whisper da OpenAI 🤗
0429034
Raw
History Blame Contribute Delete
7.71 kB
"""
Data Scientist.: Dr.Eddy Giusepe Chirinos Isidro
Usando a API de Whisper
=======================
Este primeiro exemplo mostra como usar Whisper para realizar uma transcrição de um
áudio gravado em INGLÊS. A trasncrição foi para o PORTUGUÊS 🤗.
NOTA: Você pode primeiro gravar um áudio com o script main.py e depois usar esse áudio
neste script para fazer a transcrição.
Link de estudo:
* https://platform.openai.com/docs/guides/speech-to-text
"""
from docx import Document
import logging
logging.basicConfig(level=logging.INFO)
# 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']
# Primeira forma:
#audio_file= open("output.wav", "rb")
#transcript = openai.Audio.transcribe("whisper-1", audio_file, language="pt")
#print(transcript["text"])
# Segunda forma:
def transcribe_audio(audio_file_path: str):
with open(audio_file_path, "rb") as audio_file:
transcription = openai.Audio.transcribe("whisper-1", audio_file, language="pt")
return transcription['text']
"""🔊 Funções que usaremos mais para frente 🔊"""
# Extração de resumo: https://platform.openai.com/docs/tutorials/meeting-minutes/summary-extraction
def abstract_summary_extraction(transcription):
response = openai.ChatCompletion.create(
model="gpt-4",
temperature=0,
messages=[
{
"role": "system",
"content": "Você é uma IA altamente qualificada, treinada em compreensão e resumo de idiomas. \
Gostaria que você lesse o texto a seguir e o resumisse em um parágrafo abstrato conciso. \
Procure reter os pontos mais importantes, fornecendo um resumo coerente e legível que \
possa ajudar a pessoa a compreender os principais pontos da discussão sem a necessidade \
de ler o texto inteiro. Evite detalhes desnecessários ou pontos tangenciais."
},
{
"role": "user",
"content": transcription
}
]
)
return response['choices'][0]['message']['content']
# Extração de pontos-chave: https://platform.openai.com/docs/tutorials/meeting-minutes/key-points-extraction
def key_points_extraction(transcription):
response = openai.ChatCompletion.create(
model="gpt-4",
temperature=0,
messages=[
{
"role": "system",
"content": "Você é uma IA proficiente com especialidade em destilar informações em pontos-chave. \
Com base no texto a seguir, identifique e liste os principais pontos que foram discutidos \
ou levantados. Estas devem ser as ideias, descobertas ou tópicos mais importantes que \
são cruciais para a essência da discussão. Seu objetivo é fornecer uma lista que alguém \
possa ler para entender rapidamente o que foi falado."
},
{
"role": "user",
"content": transcription
}
]
)
return response['choices'][0]['message']['content']
# Extração de itens de ação: https://platform.openai.com/docs/tutorials/meeting-minutes/action-item-extraction
def action_item_extraction(transcription):
response = openai.ChatCompletion.create(
model="gpt-4",
temperature=0,
messages=[
{
"role": "system",
"content": "Você é um especialista em IA na análise de conversas e na extração de itens de ação. \
Por favor, revise o texto e identifique quaisquer tarefas, atribuições ou ações que \
foram acordadas ou mencionadas como necessárias. Podem ser tarefas atribuídas a \
indivíduos específicos ou ações gerais que o grupo decidiu realizar. Liste esses itens \
de ação de forma clara e concisa."
},
{
"role": "user",
"content": transcription
}
]
)
return response['choices'][0]['message']['content']
# Análise de sentimentos: https://platform.openai.com/docs/tutorials/meeting-minutes/sentiment-analysis
def sentiment_analysis(transcription):
response = openai.ChatCompletion.create(
model="gpt-4",
temperature=0,
messages=[
{
"role": "system",
"content": "Como uma IA com experiência em análise de linguagem e emoções, sua tarefa é analisar \
o sentimento do texto a seguir. Por favor, considere o tom geral da discussão, a emoção \
transmitida pela linguagem utilizada e o contexto em que as palavras e frases são usadas. \
Indique se o sentimento é geralmente positivo, negativo ou neutro e forneça breves explicações \
para a sua análise sempre que possível."
},
{
"role": "user",
"content": transcription
}
]
)
return response['choices'][0]['message']['content']
# Exportando atas de reunião: https://platform.openai.com/docs/tutorials/meeting-minutes/exporting-meeting-minutes
def save_as_docx(minutes, filename):
doc = Document()
for key, value in minutes.items():
# Substitua os sublinhados por espaços e coloque cada palavra do título em maiúscula:
heading = ' '.join(word.capitalize() for word in key.split('_'))
doc.add_heading(heading, level=1)
doc.add_paragraph(value)
# Add a line break between sections
doc.add_paragraph()
doc.save(filename)
# Summarizing and analyzing the transcript with GPT-4
def meeting_minutes(transcription):
logging.info(f"*** Realizando o Resumo Abstrato ✍🏻 ... ***")
abstract_summary = abstract_summary_extraction(transcription)
logging.info(f"*** Realizando a extração de Pontos Chaves 🔑 ... ***")
key_points = key_points_extraction(transcription)
logging.info(f"*** Realizando a extração de Itens de Ação ✅ ... ***")
action_items = action_item_extraction(transcription)
logging.info(f"*** Realizando a Análise de Sentimento 🫀 ... ***")
sentiment = sentiment_analysis(transcription)
return {
'Resumo Abstrato': abstract_summary,
'Pontos Chave': key_points,
'Itens de Ação': action_items,
'Sentimento': sentiment
}
if __name__ == "__main__":
logging.info(f"*** Transcrevendo o áudio: Inglês para Português ... ***")
translate_en_pt = transcribe_audio("/home/eddygiusepe/1_Eddy_Giusepe/6_REPO_HuggingFace/9_Using_Whisper_API_Speech-to-Text_with_OpenAI/output.wav")
print("🔊🔊🔊 -->", translate_en_pt)
print("")
audio_file_path = "/home/eddygiusepe/1_Eddy_Giusepe/6_REPO_HuggingFace/9_Using_Whisper_API_Speech-to-Text_with_OpenAI/output.wav"
transcription = transcribe_audio(audio_file_path)
minutes = meeting_minutes(transcription)
logging.info(f"*** Printando nosso resultado 🤗 ... ***")
print(minutes)
save_as_docx(minutes, 'Doc_description.docx')