Spaces:
Running
Running
File size: 4,988 Bytes
d7497e9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
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()
|