Elanas commited on
Commit
d50cd39
·
verified ·
1 Parent(s): ee893c0

Upload app.py

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