import gradio as gr import json import os import shutil from kalbetojai_analize import analizuoti_kalbetojus from kalbos_nustatymas import transcribe_text, transcribe_text_wav2vec from ataskaita import sugeneruoti_ataskaita from filtravimas import filtruoti_audio def gaunam_demo_failus(): folder = "demo" if not os.path.exists(folder): return [] return [os.path.join(folder, f) for f in os.listdir(folder) if f.endswith(".wav")] def naudoti_demo_faila(kelias): return kelias def filtruoti_ir_issaugoti(wav_failas, metodas): if wav_failas is None: return "⚠️ Nėra failo." if metodas != "Nefiltruoti": print(f"🎚️ Filtruojama su: {metodas}") filtruoti_audio(wav_failas, metodas) return "✅ Įrašas sėkmingai išfiltruotas." else: print("🔎 Filtravimas praleistas – kopijuojamas originalas.") shutil.copy(wav_failas, "/tmp/ivestis.wav") return "✅ Įrašas nukopijuotas be filtravimo." def analizuoti_ir_issaugoti(modelis): failas_kandidatas = None if os.path.exists("/tmp/ivestis.wav"): failas_kandidatas = "/tmp/ivestis.wav" elif os.path.exists("temp_filtered/ivestis.wav"): failas_kandidatas = "temp_filtered/ivestis.wav" else: return "⚠️ Pirma įkelkite arba filtruokite įrašą." # 📏 Failo dydžio nustatymas dydis_baitais = os.path.getsize(failas_kandidatas) dydis_mb = dydis_baitais / (1024 * 1024) info = f"""🔍 Failo informacija: 📁 Kelias: {failas_kandidatas} 📦 Dydis: {dydis_mb:.2f} MB """ print(info) # log'ui tekstas_ataskaitai, _, segmentai = analizuoti_kalbetojus(modelis, failas=failas_kandidatas) os.makedirs("rezultatai", exist_ok=True) failas = os.path.join("rezultatai", f"{modelis.lower()}.json") with open(failas, "w", encoding="utf-8") as f: json.dump({ "modelis": modelis, "segmentai": segmentai }, f, ensure_ascii=False, indent=2) tekstas = "" for s in segmentai: tekstas += f"🧑 Kalbėtojas {s['kalbetojas']} – {s['kalba']}\n" tekstas += f"💬 '{s['tekstas']}'\n" tekstas += f"⏱️ Trukmė: {s['trukme']} s\n\n" tekstas += "\n" + tekstas_ataskaitai return info + "\n" + tekstas def gauti_filtruota_faila(): kelias = "temp_filtered/ivestis.wav" if os.path.exists(kelias): return kelias elif os.path.exists("/tmp/ivestis.wav"): return "/tmp/ivestis.wav" else: return None def gauti_json_faila(modelis): failas = os.path.join("rezultatai", f"{modelis.lower()}.json") if os.path.exists(failas): return failas return None with gr.Blocks() as demo: gr.Markdown("## 🎤 Kalbėtojų analizė + triukšmo šalinimas + ataskaita") with gr.Tab("1. 📦 Kalbėtojų analizė"): with gr.Row(): demo_dropdown = gr.Dropdown( label="📁 Pasirinkite pavyzdinį .wav failą", choices=gaunam_demo_failus() ) pasirinktas_failas = gr.Audio(type="filepath", label="🔊 Pasirinktas failas") ikelti_btn = gr.Button("📥 Įkelti pasirinktą failą") ikelti_btn.click(fn=naudoti_demo_faila, inputs=[demo_dropdown], outputs=pasirinktas_failas) with gr.Row(): filtravimo_selector = gr.Dropdown( label="🎚️ Filtravimo metodas", choices=["Nefiltruoti", "Denoiser", "Wave-U-Net", "Noisereduce"], value="Nefiltruoti" ) filtruoti_output = gr.Textbox(label="📎 Filtravimo būsena") filtruoti_btn = gr.Button("📀 Filtruoti įrašą") filtruoti_btn.click( fn=filtruoti_ir_issaugoti, inputs=[pasirinktas_failas, filtravimo_selector], outputs=filtruoti_output ) with gr.Row(): model_selector = gr.Radio(["Whisper", "Wav2Vec2"], value="Whisper", label="📊 Kalbos atpažinimo modelis") analizės_output = gr.Textbox(label="📜 Rezultatai", lines=20) analizės_btn = gr.Button("▶️ Analizuoti kalbėtojus") analizės_btn.click( fn=analizuoti_ir_issaugoti, inputs=[model_selector], outputs=analizės_output ) rodyti_filtruota_btn = gr.Button("📥 Parsisiųsti .wav failą") filtruotas_failas_output = gr.File(label="⬇️ Parsisiųsti") rodyti_filtruota_btn.click(fn=gauti_filtruota_faila, outputs=filtruotas_failas_output) with gr.Tab("3. 📊 Ataskaita ir Atsisiuntimas"): with gr.Row(): report_model = gr.Radio(["Whisper", "Wav2Vec2"], value="Whisper", label="📁 Pasirinkite modelį") failas_output = gr.File(label="⬇️ Parsisiųsti JSON") atsiuntimo_btn = gr.Button("📥 Atsisiųsti JSON") atsiuntimo_btn.click(fn=gauti_json_faila, inputs=[report_model], outputs=failas_output) demo.launch()