vad-marblenet / app.py
Yehor's picture
A fix
16b04a0
raw
history blame
1.84 kB
import os
from os.path import basename
from zipfile import ZipFile, ZIP_DEFLATED
from shutil import rmtree
import sentry_sdk
import sphn
import gradio as gr
from inference import inference_file
if os.environ["SENTRY_DSN"]:
sentry_sdk.init(
dsn=os.environ["SENTRY_DSN"],
send_default_pii=True,
)
print("Sentry SDK is activated")
def extract_chunks(file, min_sec, max_sec):
archive_name = "tmp.zip"
n_files = 0
duration_secs = 0
with ZipFile(
archive_name, "w", compression=ZIP_DEFLATED, allowZip64=True, compresslevel=9
) as zip_file:
results = inference_file(file)
filenames = [it["filename"] for it in results]
durations = sphn.durations(filenames)
for idx, result in enumerate(results):
duration = durations[idx]
print(result, duration)
if duration <= min_sec or duration >= max_sec:
print("Skipping...")
continue
arc_name = basename(result["filename"])
zip_file.write(result["filename"], arc_name)
duration_secs += duration
n_files += 1
# Remove files
rmtree("chunks")
mins = round(duration_secs / 60, 4)
gr.Success(
f"VAD model identified {n_files} files in interval [{min_sec}:{max_sec}], total duration = {mins} min."
)
return archive_name
demo = gr.Interface(
title="MarbleNet",
fn=extract_chunks,
inputs=[
gr.File(label="WAV file to process", file_count="single", file_types=[".wav"]),
gr.Number(label="Minimum seconds", value=0.1, minimum=0.01, maximum=59.99),
gr.Number(label="Maximum seconds", value=30, minimum=0.02, maximum=60),
],
outputs=[gr.File(label="ZIP file with voice chunks")],
submit_btn="Inference",
)
demo.launch()