File size: 1,989 Bytes
745fe01
 
 
 
 
0f1a690
745fe01
 
 
 
 
 
 
 
 
 
 
0f1a690
745fe01
 
 
0f1a690
 
745fe01
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0f1a690
 
745fe01
 
 
 
 
0f1a690
3338e2e
82203f6
3338e2e
 
 
0f1a690
6ca9d11
 
 
 
3338e2e
 
6ca9d11
3338e2e
745fe01
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
import gradio as gr
import torch
import numpy as np
from transformers import Wav2Vec2Processor, Wav2Vec2ForSequenceClassification

# modelo e o processador
model_name = "results"
processor = Wav2Vec2Processor.from_pretrained(model_name)
model = Wav2Vec2ForSequenceClassification.from_pretrained(model_name)

def classify_accent(audio):
    if audio is None:
        return "Erro: Nenhum áudio recebido"

    # entrada
    print(f"Tipo de entrada de áudio: {type(audio)}")

    # áudio
    print(f"Received audio input: {audio}")

    try:
        audio_array = audio[1]  # O áudio no segundo da tupla
        sample_rate = audio[0]  # A taxa de amostragem no primeiro da tupla

        print(f"Shape do áudio: {audio_array.shape}, Taxa de amostragem: {sample_rate}")

        # 
        audio_array = audio_array.astype(np.float32)

        # taxa de amostragem
        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
        # Inf
        with torch.no_grad():
            logits = model(input_values).logits
        predicted_ids = torch.argmax(logits, dim=-1).item()

        # Mapeamento
        labels = ["Brazilian", "Other"]
        return labels[predicted_ids]

    except Exception as e:
        return f"Erro ao processar o áudio: {str(e)}"

# 
description_html = """
<p>Test with recording or uploading an audio file. To test, I recommend short sentences.</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 = gr.Interface(
    fn=classify_accent, 
    inputs=gr.Audio(type="numpy"), 
    outputs="label",
    title="Speech Accent Classifier (Portuguese-Brazilian) v1.3",
    description=description_html
)

interface.launch()