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