import gradio as gr import json import os from kalbetojai_analize import analizuoti_kalbetojus from kalbos_nustatymas import transcribe_text, transcribe_text_wav2vec # ⚖️ Demo failų keliai DEMO_KALBETOJAI_PATH = "demo/demo_3kalbetojai.wav" DEMO_SLAPTAZODIS_PATH = "demo/slaptazodis.wav" # 🔐 Funkcija kalbėtojų analizei ir segmentų atvaizdavimui def analizuoti_ir_issaugoti(wav_failas, modelis): if wav_failas is None: return "⚠️ Prašome įkelti pagrindinį .wav failą." laikinas_kelias = "ivestis.wav" os.rename(wav_failas, laikinas_kelias) _, _, segmentai = analizuoti_kalbetojus(modelis, failas=laikinas_kelias) os.makedirs("rezultatai", exist_ok=True) failas = os.path.join("rezultatai", f"{modelis.lower()}.json") json.dump({ "modelis": modelis, "segmentai": segmentai }, open(failas, "w", encoding="utf-8"), 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" return tekstas # 🔐 Funkcija slaptažodžiui tikrinti iš įkelto WAV def tikrinti_slaptazodi(audio, slaptazodis, modelis): if audio is None or not slaptazodis: return "⚠️ Prašome įkelti slaptažodžio įrašą ir įvesti tekstą." slaptazodis = slaptazodis.strip().lower() if modelis == "Whisper": tekstas = transcribe_text(audio).lower().strip() elif modelis == "Wav2Vec2": tekstas = transcribe_text_wav2vec(audio, kalba="lt").lower().strip() else: return "❌ Nepalaikomas modelis." if slaptazodis in tekstas: return f"✅ Slaptažodis atpažintas! ({tekstas})" else: return f"❌ Slaptažodis neatpažintas. Gauta: ({tekstas})" # 🚀 Mygtukų funkcijos demo failams def naudoti_demo_kalbetojai(): return DEMO_KALBETOJAI_PATH def naudoti_demo_slaptazodis(): return DEMO_SLAPTAZODIS_PATH # 💻 GUI komponentai with gr.Blocks() as demo: gr.Markdown("## 🎤 Kalbėtojų analizė + slaptažodžio tikrinimas") with gr.Tab("1. 📦 Kalbėtojų analizė"): with gr.Row(): kalbetojai_audio = gr.Audio(type="filepath", label="🔊 Įkelkite .wav su 3 kalbėtojais") model_selector1 = gr.Radio(["Whisper", "Wav2Vec2"], value="Whisper", label="📊 Modelis") demo_kalb_btn = gr.Button("🎧 Naudoti pavyzdinį kalbėtojų failą") analizės_output = gr.Textbox(label="📜 Rezultatai", lines=20) analizės_btn = gr.Button("▶️ Analizuoti kalbėtojus") demo_kalb_btn.click(fn=naudoti_demo_kalbetojai, outputs=kalbetojai_audio) analizės_btn.click(fn=analizuoti_ir_issaugoti, inputs=[kalbetojai_audio, model_selector1], outputs=analizės_output) with gr.Tab("2. 🔐 Slaptažodžio tikrinimas"): with gr.Row(): slapt_audio = gr.Audio(type="filepath", label="🔊 Įkelkite .wav su išsakytu slaptažodžiu") slapt_input = gr.Textbox(label="🔐 Įveskite slaptažodį") model_selector2 = gr.Radio(["Whisper", "Wav2Vec2"], value="Whisper", label="📊 Modelis") demo_slapt_btn = gr.Button("🔹 Naudoti pavyzdinį slaptažodžio failą") slapt_output = gr.Textbox(label="📋 Tikrinimo rezultatas", lines=4) slapt_btn = gr.Button("✅ Tikrinti slaptažodį") demo_slapt_btn.click(fn=naudoti_demo_slaptazodis, outputs=slapt_audio) slapt_btn.click(fn=tikrinti_slaptazodi, inputs=[slapt_audio, slapt_input, model_selector2], outputs=slapt_output) demo.launch()