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()