Elanas's picture
Upload app.py
d50cd39 verified
raw
history blame
3.67 kB
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()