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