File size: 2,765 Bytes
dc025f0
 
 
9595e74
dc025f0
 
 
 
 
 
 
 
 
 
 
 
 
9595e74
 
dc025f0
9595e74
dc025f0
 
9595e74
dc025f0
9595e74
 
dc025f0
9595e74
dc025f0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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

import gradio as gr
import whisper
from transformers import AutoTokenizer, AutoModelForCausalLM
from transformers import MT5Tokenizer, AutoModelForSeq2SeqLM
from transformers import AutoTokenizer, AutoModelWithLMHead
import graphviz
import torch

# تحويل الصوت إلى نص
model_whisper = whisper.load_model("base")

# تلخيص النص
tokenizer = MT5Tokenizer.from_pretrained("csebuetnlp/mT5_multilingual_XLSum")
model_summarizer = AutoModelForSeq2SeqLM.from_pretrained("csebuetnlp/mT5_multilingual_XLSum")

# تحميل نموذج AraGPT2 العربي الخفيف


aragpt_tokenizer = AutoTokenizer.from_pretrained("aubmindlab/aragpt2-base")
aragpt_model = AutoModelForCausalLM.from_pretrained("aubmindlab/aragpt2-base")
aragpt_model.eval()


def generate_arabic_explanation(prompt):
    inputs = aragpt_tokenizer(prompt, return_tensors="pt", truncation=True, max_length=512)
    outputs = aragpt_model.generate(**inputs, max_new_tokens=100, do_sample=True, temperature=0.8)
    return aragpt_tokenizer.decode(outputs[0], skip_special_tokens=True)
    
def transcribe_summarize_answer(audio_path):
    result = model_whisper.transcribe(audio_path)
    text = result["text"]

    inputs = tokenizer("summarize: " + text, return_tensors="pt", max_length=512, truncation=True)
    summary_ids = model_summarizer.generate(inputs["input_ids"], max_length=150, min_length=40, length_penalty=2.0, num_beams=4)
    summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)

    dot = graphviz.Digraph(comment="Mind Map", format='png')
    dot.node('central', '🧠 فكرة الدرس')
    for i, sentence in enumerate(summary.split(".")):
        if sentence.strip():
            node_id = f"n{i}"
            dot.node(node_id, sentence.strip())
            dot.edge('central', node_id)
    mindmap_path = "/tmp/mindmap"
    dot.render(mindmap_path, cleanup=True)

    prompt = summary + "\n\nاشرح هذه الأفكار بشكل مبسط:"
    answer = generate_arabic_explanation(prompt)

    return text, summary, mindmap_path + ".png", answer

gr.Interface(
    fn=transcribe_summarize_answer,
    inputs=gr.Audio(source="upload", type="filepath", label="🎙️ ارفع ملف صوتي للدرس"),
    outputs=[
        gr.Textbox(label="📜 النص الكامل"),
        gr.Textbox(label="✂️ الملخص"),
        gr.Image(label="🧠 الخريطة الذهنية المرئية"),
        gr.Textbox(label="🤖 شرح AraGPT2 باللغة العربية")
    ],
    title="SmartLessonMap + AraGPT2 🤖🧠",
    description="تطبيق ذكي يحول الدروس الصوتية إلى نص، ملخص، خريطة ذهنية، وشرح باللغة العربية باستخدام نموذج خفيف."
).launch()