Elanas commited on
Commit
81c0686
·
verified ·
1 Parent(s): 068bb17

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +108 -0
app.py ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import json
3
+ import os
4
+ import shutil
5
+ from kalbetojai_analize import analizuoti_kalbetojus
6
+ from kalbos_nustatymas import transcribe_text, transcribe_text_wav2vec
7
+ from ataskaita import sugeneruoti_ataskaita
8
+
9
+ # ⚖️ Demo failų keliai
10
+ DEMO_KALBETOJAI_PATH = "demo/demo_3kalbetojai.wav"
11
+ DEMO_SLAPTAZODIS_PATH = "demo/slaptazodis.wav"
12
+
13
+ # 🔐 Funkcija kalbėtojų analizei ir segmentų atvaizdavimui
14
+ def analizuoti_ir_issaugoti(wav_failas, modelis):
15
+ if wav_failas is None:
16
+ return "⚠️ Prašome įkelti pagrindinį .wav failą."
17
+
18
+ laikinas_kelias = "/tmp/ivestis.wav" # ❗ Garso failą saugom į /tmp/
19
+ shutil.copy(wav_failas, laikinas_kelias)
20
+
21
+ _, _, segmentai = analizuoti_kalbetojus(modelis, failas=laikinas_kelias)
22
+
23
+ os.makedirs("rezultatai", exist_ok=True)
24
+ failas = os.path.join("rezultatai", f"{modelis.lower()}.json")
25
+ json.dump({
26
+ "modelis": modelis,
27
+ "segmentai": segmentai
28
+ }, open(failas, "w", encoding="utf-8"), ensure_ascii=False, indent=2)
29
+
30
+ tekstas = ""
31
+ for s in segmentai:
32
+ tekstas += f"🧑 Kalbėtojas {s['kalbetojas']} – {s['kalba']}\n"
33
+ tekstas += f"💬 '{s['tekstas']}'\n"
34
+ tekstas += f"⏱️ Trukmė: {s['trukme']} s\n\n"
35
+
36
+ return tekstas
37
+
38
+ # 🔐 Funkcija slaptažodžiui tikrinti iš įkelto WAV
39
+ def tikrinti_slaptazodi(audio, slaptazodis, modelis):
40
+ if audio is None or not slaptazodis:
41
+ return "⚠️ Prašome įkelti slaptažodžio įrašą ir įvesti tekstą."
42
+
43
+ slaptazodis = slaptazodis.strip().lower()
44
+ if modelis == "Whisper":
45
+ tekstas = transcribe_text(audio).lower().strip()
46
+ elif modelis == "Wav2Vec2":
47
+ tekstas = transcribe_text_wav2vec(audio, kalba="lt").lower().strip()
48
+ else:
49
+ return "❌ Nepalaikomas modelis."
50
+
51
+ if slaptazodis in tekstas:
52
+ return f"✅ Slaptažodis atpažintas! ({tekstas})"
53
+ else:
54
+ return f"❌ Slaptažodis neatpažintas. Gauta: ({tekstas})"
55
+
56
+ # 🚀 Mygtukų funkcijos demo failams
57
+ def naudoti_demo_kalbetojai():
58
+ return DEMO_KALBETOJAI_PATH
59
+
60
+ def naudoti_demo_slaptazodis():
61
+ return DEMO_SLAPTAZODIS_PATH
62
+
63
+ # 📥 Nauja funkcija: grąžinti json failą parsisiuntimui
64
+ def gauti_json_faila(modelis):
65
+ failo_kelias = os.path.join("rezultatai", f"{modelis.lower()}.json")
66
+ if os.path.exists(failo_kelias):
67
+ return failo_kelias
68
+ else:
69
+ return None
70
+
71
+ # 💻 GUI komponentai
72
+ with gr.Blocks() as demo:
73
+ gr.Markdown("## 🎤 Kalbėtojų analizė + slaptažodžio tikrinimas + ataskaita")
74
+
75
+ with gr.Tab("1. 📦 Kalbėtojų analizė"):
76
+ with gr.Row():
77
+ kalbetojai_audio = gr.Audio(type="filepath", label="🔊 Įkelkite .wav su 3 kalbėtojais")
78
+ model_selector1 = gr.Radio(["Whisper", "Wav2Vec2"], value="Whisper", label="📊 Modelis")
79
+ demo_kalb_btn = gr.Button("🎧 Naudoti pavyzdinį kalbėtojų failą")
80
+ analizės_output = gr.Textbox(label="📜 Rezultatai", lines=20)
81
+ analizės_btn = gr.Button("▶️ Analizuoti kalbėtojus")
82
+ demo_kalb_btn.click(fn=naudoti_demo_kalbetojai, outputs=kalbetojai_audio)
83
+ analizės_btn.click(fn=analizuoti_ir_issaugoti, inputs=[kalbetojai_audio, model_selector1], outputs=analizės_output)
84
+
85
+ with gr.Tab("2. 🔐 Slaptažodžio tikrinimas"):
86
+ with gr.Row():
87
+ slapt_audio = gr.Audio(type="filepath", label="🔊 Įkelkite .wav su išsakytu slaptažodžiu")
88
+ slapt_input = gr.Textbox(label="🔐 Įveskite slaptažodį")
89
+ model_selector2 = gr.Radio(["Whisper", "Wav2Vec2"], value="Whisper", label="📊 Modelis")
90
+ demo_slapt_btn = gr.Button("🔹 Naudoti pavyzdinį slaptažodžio failą")
91
+ slapt_output = gr.Textbox(label="📋 Tikrinimo rezultatas", lines=4)
92
+ slapt_btn = gr.Button("✅ Tikrinti slaptažodį")
93
+ demo_slapt_btn.click(fn=naudoti_demo_slaptazodis, outputs=slapt_audio)
94
+ slapt_btn.click(fn=tikrinti_slaptazodi, inputs=[slapt_audio, slapt_input, model_selector2], outputs=slapt_output)
95
+
96
+ with gr.Tab("3. 📊 Ataskaita ir Atsisiuntimas"):
97
+ with gr.Row():
98
+ report_output = gr.Textbox(label="📈 Bendra ataskaita", lines=30)
99
+ report_btn = gr.Button("📊 Peržiūrėti ataskaitą")
100
+ report_btn.click(fn=sugeneruoti_ataskaita, outputs=report_output)
101
+
102
+ with gr.Row():
103
+ atsisiusti_modeli = gr.Radio(["Whisper", "Wav2Vec2"], value="Whisper", label="📁 Pasirinkite modelį JSON atsisiuntimui")
104
+ atsisiuntimo_btn = gr.Button("📥 Atsisiųsti JSON")
105
+ failas_output = gr.File(label="⬇️ Parsisiųsti JSON failą")
106
+ atsisiuntimo_btn.click(fn=gauti_json_faila, inputs=[atsisiusti_modeli], outputs=failas_output)
107
+
108
+ demo.launch()