Elanas commited on
Commit
d7497e9
·
verified ·
1 Parent(s): 8b05378

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +133 -0
app.py ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ from filtravimas import filtruoti_audio
9
+
10
+ def gaunam_demo_failus():
11
+ folder = "demo"
12
+ if not os.path.exists(folder):
13
+ return []
14
+ return [os.path.join(folder, f) for f in os.listdir(folder) if f.endswith(".wav")]
15
+
16
+ def naudoti_demo_faila(kelias):
17
+ return kelias
18
+
19
+ def filtruoti_ir_issaugoti(wav_failas, metodas):
20
+ if wav_failas is None:
21
+ return "⚠️ Nėra failo."
22
+ if metodas != "Nefiltruoti":
23
+ print(f"🎚️ Filtruojama su: {metodas}")
24
+ filtruoti_audio(wav_failas, metodas)
25
+ return "✅ Įrašas sėkmingai išfiltruotas."
26
+ else:
27
+ print("🔎 Filtravimas praleistas – kopijuojamas originalas.")
28
+ shutil.copy(wav_failas, "/tmp/ivestis.wav")
29
+ return "✅ Įrašas nukopijuotas be filtravimo."
30
+
31
+ def analizuoti_ir_issaugoti(modelis):
32
+ failas_kandidatas = None
33
+ if os.path.exists("/tmp/ivestis.wav"):
34
+ failas_kandidatas = "/tmp/ivestis.wav"
35
+ elif os.path.exists("temp_filtered/ivestis.wav"):
36
+ failas_kandidatas = "temp_filtered/ivestis.wav"
37
+ else:
38
+ return "⚠️ Pirma įkelkite arba filtruokite įrašą."
39
+
40
+ # 📏 Failo dydžio nustatymas
41
+ dydis_baitais = os.path.getsize(failas_kandidatas)
42
+ dydis_mb = dydis_baitais / (1024 * 1024)
43
+
44
+ info = f"""🔍 Failo informacija:
45
+ 📁 Kelias: {failas_kandidatas}
46
+ 📦 Dydis: {dydis_mb:.2f} MB
47
+ """
48
+
49
+ print(info) # log'ui
50
+
51
+ tekstas_ataskaitai, _, segmentai = analizuoti_kalbetojus(modelis, failas=failas_kandidatas)
52
+
53
+ os.makedirs("rezultatai", exist_ok=True)
54
+ failas = os.path.join("rezultatai", f"{modelis.lower()}.json")
55
+ with open(failas, "w", encoding="utf-8") as f:
56
+ json.dump({
57
+ "modelis": modelis,
58
+ "segmentai": segmentai
59
+ }, f, ensure_ascii=False, indent=2)
60
+
61
+ tekstas = ""
62
+ for s in segmentai:
63
+ tekstas += f"🧑 Kalbėtojas {s['kalbetojas']} – {s['kalba']}\n"
64
+ tekstas += f"💬 '{s['tekstas']}'\n"
65
+ tekstas += f"⏱️ Trukmė: {s['trukme']} s\n\n"
66
+
67
+ tekstas += "\n" + tekstas_ataskaitai
68
+ return info + "\n" + tekstas
69
+
70
+ def gauti_filtruota_faila():
71
+ kelias = "temp_filtered/ivestis.wav"
72
+ if os.path.exists(kelias):
73
+ return kelias
74
+ elif os.path.exists("/tmp/ivestis.wav"):
75
+ return "/tmp/ivestis.wav"
76
+ else:
77
+ return None
78
+
79
+ def gauti_json_faila(modelis):
80
+ failas = os.path.join("rezultatai", f"{modelis.lower()}.json")
81
+ if os.path.exists(failas):
82
+ return failas
83
+ return None
84
+
85
+ with gr.Blocks() as demo:
86
+ gr.Markdown("## 🎤 Kalbėtojų analizė + triukšmo šalinimas + ataskaita")
87
+
88
+ with gr.Tab("1. 📦 Kalbėtojų analizė"):
89
+ with gr.Row():
90
+ demo_dropdown = gr.Dropdown(
91
+ label="📁 Pasirinkite pavyzdinį .wav failą",
92
+ choices=gaunam_demo_failus()
93
+ )
94
+ pasirinktas_failas = gr.Audio(type="filepath", label="🔊 Pasirinktas failas")
95
+ ikelti_btn = gr.Button("📥 Įkelti pasirinktą failą")
96
+ ikelti_btn.click(fn=naudoti_demo_faila, inputs=[demo_dropdown], outputs=pasirinktas_failas)
97
+
98
+ with gr.Row():
99
+ filtravimo_selector = gr.Dropdown(
100
+ label="🎚️ Filtravimo metodas",
101
+ choices=["Nefiltruoti", "Denoiser", "Wave-U-Net", "Noisereduce"],
102
+ value="Nefiltruoti"
103
+ )
104
+ filtruoti_output = gr.Textbox(label="📎 Filtravimo būsena")
105
+ filtruoti_btn = gr.Button("📀 Filtruoti įrašą")
106
+ filtruoti_btn.click(
107
+ fn=filtruoti_ir_issaugoti,
108
+ inputs=[pasirinktas_failas, filtravimo_selector],
109
+ outputs=filtruoti_output
110
+ )
111
+
112
+ with gr.Row():
113
+ model_selector = gr.Radio(["Whisper", "Wav2Vec2"], value="Whisper", label="📊 Kalbos atpažinimo modelis")
114
+ analizės_output = gr.Textbox(label="📜 Rezultatai", lines=20)
115
+ analizės_btn = gr.Button("▶️ Analizuoti kalbėtojus")
116
+ analizės_btn.click(
117
+ fn=analizuoti_ir_issaugoti,
118
+ inputs=[model_selector],
119
+ outputs=analizės_output
120
+ )
121
+
122
+ rodyti_filtruota_btn = gr.Button("📥 Parsisiųsti .wav failą")
123
+ filtruotas_failas_output = gr.File(label="⬇️ Parsisiųsti")
124
+ rodyti_filtruota_btn.click(fn=gauti_filtruota_faila, outputs=filtruotas_failas_output)
125
+
126
+ with gr.Tab("3. 📊 Ataskaita ir Atsisiuntimas"):
127
+ with gr.Row():
128
+ report_model = gr.Radio(["Whisper", "Wav2Vec2"], value="Whisper", label="📁 Pasirinkite modelį")
129
+ failas_output = gr.File(label="⬇️ Parsisiųsti JSON")
130
+ atsiuntimo_btn = gr.Button("📥 Atsisiųsti JSON")
131
+ atsiuntimo_btn.click(fn=gauti_json_faila, inputs=[report_model], outputs=failas_output)
132
+
133
+ demo.launch()