Automatic Meeting Notes Generator

import speech_recognition as sr

from transformers import pipeline

from fpdf import FPDF


# -------------------------

# 1. Record or load audio

# -------------------------

def transcribe_audio(audio_file=None, duration=30):

    recognizer = sr.Recognizer()

    if audio_file:

        with sr.AudioFile(audio_file) as source:

            audio = recognizer.record(source)

    else:

        with sr.Microphone() as source:

            print("🎙️ Recording meeting... Speak now.")

            audio = recognizer.listen(source, phrase_time_limit=duration)

    

    try:

        print("🔎 Transcribing...")

        return recognizer.recognize_google(audio)

    except sr.UnknownValueError:

        return "Could not understand audio."

    except sr.RequestError:

        return "API unavailable."


# -------------------------

# 2. Summarize transcript

# -------------------------

def summarize_text(text):

    summarizer = pipeline("summarization", model="facebook/bart-large-cnn")

    summary = summarizer(text, max_length=150, min_length=50, do_sample=False)

    return summary[0]['summary_text']


# -------------------------

# 3. Save notes to PDF

# -------------------------

def save_to_pdf(transcript, summary, filename="meeting_notes.pdf"):

    pdf = FPDF()

    pdf.add_page()

    pdf.set_font("Arial", size=12)


    pdf.multi_cell(0, 10, " Meeting Transcript:\n" + transcript + "\n\n")

    pdf.multi_cell(0, 10, " Meeting Summary:\n" + summary)


    pdf.output(filename)

    print(f"✅ Notes saved as {filename}")


# -------------------------

# Main

# -------------------------

if __name__ == "__main__":

    # Record live OR use existing audio file (WAV recommended)

    transcript = transcribe_audio(audio_file=None, duration=20)

    print("\n Transcript:\n", transcript)


    if transcript and len(transcript) > 50:

        summary = summarize_text(transcript)

        print("\n Summary:\n", summary)

        save_to_pdf(transcript, summary)

    else:

        print(" Transcript too short to summarize.")


No comments: