archivartaunik's picture
Update app.py
7d1b493 verified
# app.py
import os, time, torch, gradio as gr, spaces
from transformers import pipeline
# ── Аптымізацыя CPU ──────────────────────────────────────────────
num_cpu_cores = os.cpu_count() or 1
torch.set_num_threads(num_cpu_cores)
print(f"✅ PyTorch настроены на {num_cpu_cores} ядраў CPU.")
# ── Пайплайн ─────────────────────────────────────────────────────
pipe = pipeline(
"audio-classification",
model="MIT/ast-finetuned-audioset-10-10-0.448"
)
_model_on_gpu = False # каб перанесці мадэль на GPU толькі адзін раз
@spaces.GPU(duration=90) # ZeroGPU выдае GPU на час працы функцыі
def classify_audio(audio_path: str):
"""
Вяртае:
1) dict label→score (топ-3),
2) радок з часам інферэнсу ў секундах.
"""
global _model_on_gpu
if audio_path is None:
return {"⚠️": "Загрузіце файл"}, "—"
# адзін раз пераносім мадэль на GPU
if torch.cuda.is_available() and not _model_on_gpu:
pipe.model.to("cuda")
_model_on_gpu = True
start = time.perf_counter()
preds = pipe(audio_path) # інферэнс
elapsed = time.perf_counter() - start
top3 = {p["label"]: p["score"] for p in preds[:3]}
return top3, f"{elapsed:.2f} сек"
# ── Gradio-інтэрфейс ─────────────────────────────────────────────
app = gr.Interface(
fn=classify_audio,
inputs=gr.Audio(type="filepath", label="Upload Audio File"),
outputs=[
gr.Label(num_top_classes=3, label="Predictions"),
gr.Textbox(label="⏱️ Inference time")
],
title="Audio Classification (MIT/AST) · ZeroGPU",
description="Загрузіце аўдыя-файл – атрымаеце 3 лепшыя катэгорыі гуку і час інферэнсу.",
cache_examples=False,
)
if __name__ == "__main__":
app.launch()