File size: 2,532 Bytes
de44379 0a494dc 77c34b5 de44379 77c34b5 de44379 77c34b5 0a494dc de44379 995fd34 de44379 995fd34 de44379 995fd34 5e37164 995fd34 de44379 77c34b5 de44379 77c34b5 de44379 77c34b5 de44379 77c34b5 de44379 77c34b5 de44379 77c34b5 de44379 77c34b5 de44379 3b01ecb de44379 |
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 |
import gradio as gr
import torch
import numpy as np
from transformers import Wav2Vec2Processor, Wav2Vec2ForSequenceClassification
from safetensors.torch import load_file
# Carregar o modelo e o processador salvos
model_name = "results"
processor = Wav2Vec2Processor.from_pretrained(model_name)
# Carregar o modelo do arquivo safetensors
state_dict = load_file("results/model.safetensors")
model = Wav2Vec2ForSequenceClassification.from_pretrained(model_name, state_dict=state_dict)
def classify_accent(audio):
if audio is None:
return "Error: No se recibió audio"
# Verificar o tipo de entrada de áudio
print(f"Tipo de entrada de audio: {type(audio)}")
# Verificar a estrutura do áudio
print(f"Entrada de audio recibida: {audio}")
try:
# Se o áudio vier como uma tupla, vamos lidar com isso
if isinstance(audio, tuple):
audio_array = np.array(audio[0]) # O áudio no primeiro elemento da tupla
sample_rate = audio[1] # A taxa de amostragem no segundo elemento da tupla
else:
raise ValueError("Formato de áudio inesperado.")
print(f"Forma del audio: {audio_array.shape}, Frecuencia de muestreo: {sample_rate}")
# Converter o áudio para float32
audio_array = audio_array.astype(np.float32)
# Resample para 16kHz, se necessário
if sample_rate != 16000:
import librosa
audio_array = librosa.resample(audio_array, orig_sr=sample_rate, target_sr=16000)
input_values = processor(audio_array, return_tensors="pt", sampling_rate=16000).input_values
# Inferência
with torch.no_grad():
logits = model(input_values).logits
predicted_ids = torch.argmax(logits, dim=-1).item()
# IDs de sotaque
labels = ["Español", "Otro"]
return labels[predicted_ids]
except Exception as e:
return f"Error al procesar el audio: {str(e)}"
# Interface do Gradio
description_html = """
<p>Prueba con grabación o cargando un archivo de audio. Para probar, recomiendo una palabra.</p>
<p>Ramon Mayor Martins: <a href="https://rmayormartins.github.io/" target="_blank">Website</a> | <a href="https://huggingface.co/rmayormartins" target="_blank">Spaces</a></p>
"""
# Interface do Gradio
interface = gr.Interface(
fn=classify_accent,
inputs=gr.Audio(type="numpy"),
outputs="label",
title="Clasificador de Sotaques (Español vs Otro)",
description=description_html
)
interface.launch()
|