File size: 3,727 Bytes
fb51c9c
ae27bcb
fb51c9c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import assemblyai as aai
from transformers import T5Tokenizer, T5ForConditionalGeneration
from deep_translator import GoogleTranslator
import spacy
import gradio as gr
from pydub import AudioSegment
import os

# Step 1: Set AssemblyAI API Key
aai.settings.api_key = "00f66859f24e4cefa15c9beefa13e4ce"
transcriber = aai.Transcriber()

def transcribe_audio(audio_file_path):
    transcript = transcriber.transcribe(audio_file_path)
    transcription = transcript.text
    return transcription

# Step 2: Language Translation (English and Urdu) with chunking
def translate_text(text, target_language):
    translator = GoogleTranslator(source='auto', target=target_language)
    chunk_size = 5000
    translated_chunks = []
    for i in range(0, len(text), chunk_size):
        chunk = text[i:i + chunk_size]
        translated_chunk = translator.translate(chunk)
        translated_chunks.append(translated_chunk)
    translated_text = " ".join(translated_chunks)
    return translated_text

# Step 3: Summarization with T5 Model
tokenizer = T5Tokenizer.from_pretrained('t5-base')
model_t5 = T5ForConditionalGeneration.from_pretrained('t5-base')

def summarize_text(text, source_language, target_language):
    if source_language == 'urdu':
        text = translate_text(text, 'en')  # Translate to English for summarization
    inputs = tokenizer.encode("summarize: " + text, return_tensors="pt", max_length=512, truncation=True)
    summary_ids = model_t5.generate(inputs, max_length=150, min_length=30, length_penalty=2.0, num_beams=4, early_stopping=True)
    summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
    if source_language == 'urdu':
        summary = translate_text(summary, target_language)  # Translate back to Urdu
    return summary

# Step 4: Key Points Extraction with spaCy
nlp = spacy.load("en_core_web_sm")

def extract_key_points(text):
    doc = nlp(text)
    tasks = []
    for ent in doc.ents:
        if ent.label_ in ["TASK", "DATE", "PERSON", "ORG"]:
            tasks.append(ent.text)
    return tasks

# Ensure the directory exists
output_dir = "/content/"
os.makedirs(output_dir, exist_ok=True)

# Step 5: Gradio Interface Setup
def process_meeting(file, language):
    file_path = file.name
    audio_path = os.path.join(output_dir, "uploaded_audio.wav")

    # Convert video to audio if necessary
    if file_path.endswith(('.mp4', '.avi', '.mov', '.mkv')):
        video = AudioSegment.from_file(file_path)
        video.export(audio_path, format="wav")
    else:
        audio_path = file_path

    transcription = transcribe_audio(audio_path)

    # Step 2: Translation based on user-selected language
    if language == "urdu":
        translated_text = translate_text(transcription, 'ur')
    else:  # default to English
        translated_text = transcription

    # Step 3: Summarization and Key Points Extraction
    summary = summarize_text(translated_text, language, 'ur')
    key_points = extract_key_points(translated_text)

    return transcription, translated_text, key_points, summary

# Step 6: Launch Gradio Interface
iface = gr.Interface(
    fn=process_meeting,
    inputs=[
        gr.File(label="Upload Meeting Recording"),
        gr.Radio(["english", "urdu"], label="Select Summary Language")
    ],
    outputs=[
        gr.Textbox(label="Transcription"),
        gr.Textbox(label="Translated Text"),
        gr.Textbox(label="Key Points"),
        gr.Textbox(label="Summary")
    ],
    title="Smart AI Meeting Assistant",
    description="""
    <div style='text-align: center;'>by Ayesha Ameen & Sana Sadiq</div>
    <br>Upload your meeting recording and choose summary language (English or Urdu).
    """,
)

iface.launch(share=True, debug=True)