Spaces:
No application file
No application file
| """ | |
| 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') | |