AudioSep / app.py
BroDvd's picture
Update app.py
eb836ff verified
raw
history blame
2.9 kB
da pathlib importa Percorso
da threading importa Thread
importa gdown
importa gradio come gr
importare librosa
importa numpy come np
importare torcia
da gradio_examples importa ESEMPI
da pipeline importa build_audiosep
CHECKPOINTS_DIR = Percorso("punto di controllo")
DISPOSITIVO = torch.device("cuda" se torch.cuda.is_available() altrimenti "cpu")
# Il modello verrà caricato in futuro
MODEL_NAME = CHECKPOINTS_DIR / "audiosep_base_4M_steps.ckpt"
MODELLO = build_audiosep(
config_yaml="config/audiosep_base.yaml",
checkpoint_path=NOME_MODELLO,
dispositivo=DISPOSITIVO,
)
descrizione = """
# AudioSep: Separa tutto ciò che descrivi
[[Pagina del progetto]](https://audio-agi.github.io/Separate-Anything-You-Describe) [[Documento]](https://audio-agi.github.io/Separate-Anything-You-Describe/AudioSep_arXiv.pdf) [[Codice]](https://github.com/Audio-AGI/AudioSep)
AudioSep è un modello fondamentale per la separazione dei suoni in dominio aperto mediante query in linguaggio naturale.
AudioSep dimostra una forte prestazione di separazione e un'impressionante capacità di generalizzazione zero-shot su
numerosi compiti quali la separazione degli eventi audio, la separazione degli strumenti musicali e il miglioramento della voce.
"""
def inference(percorso_file_audio: str, testo: str):
print(f"Separa l'audio da [{audio_file_path}] con query testuale [{text}]")
miscela, _ = librosa.load(percorso_file_audio, sr=32000, mono=True)
con torch.no_grad():
testo = [testo]
condizioni = MODELLO.query_encoder.get_query_embed(
modalità="testo", testo=testo, dispositivo=DISPOSITIVO
)
input_dict = {
"miscela": torch.Tensor(miscela)[Nessuno, Nessuno, :].to(DISPOSITIVO),
"condizione": condizioni,
}
sep_segment = MODELLO.ss_model(input_dict)["forma d'onda"]
sep_segment = sep_segment.squeeze(0).squeeze(0).data.cpu().numpy()
restituisci 32000, np.round(sep_segment * 32767).astype(np.int16)
con gr.Blocks(title="AudioSep") come demo:
gr.Markdown(descrizione)
con gr.Row():
con gr.Column():
input_audio = gr.Audio(label="Mixture", type="filepath")
testo = gr.Textbox(label="Query di testo")
con gr.Column():
con gr.Column():
output_audio = gr.Audio(label="Risultato di separazione", scale=10)
pulsante = gr.Pulsante(
"Separato",
variante="primario",
scala=2,
dimensione="lg",
interattivo=Vero,
)
pulsante.clicca(
fn=inferenza, input=[input_audio, testo], output=[output_audio]
)
gr.Markdown("## Esempi")
gr.Examples(esempi=ESEMPI, input=[input_audio, testo])
demo.queue().launch(condividi=True)