Spaces:
Running
Running
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() | |