Elanas commited on
Commit
83c1253
·
verified ·
1 Parent(s): 839e0a3

Upload app.py

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