""" 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')