harshit345/xlsr-wav2vec-speech-emotion-recognition
~~~
requirement packages
!pip install git+https://github.com/huggingface/datasets.git !pip install git+https://github.com/huggingface/transformers.git !pip install torchaudio !pip install librosa
~~~
prediction
~~~ import torch import torch.nn as nn import torch.nn.functional as F import torchaudio from transformers import AutoConfig, Wav2Vec2FeatureExtractor import librosa import IPython.display as ipd import numpy as np import pandas as pd ~~~ ~~~ device = torch.device("cuda" if torch.cuda.isavailable() else "cpu") modelnameorpath = "harshit345/xlsr-wav2vec-speech-emotion-recognition" config = AutoConfig.frompretrained(modelnameorpath) featureextractor = Wav2Vec2FeatureExtractor.frompretrained(modelnameorpath) samplingrate = featureextractor.samplingrate model = Wav2Vec2ForSpeechClassification.frompretrained(modelnameorpath).to(device) ~~~ ~~~ def speechfiletoarrayfn(path, samplingrate): speecharray, samplingrate = torchaudio.load(path) resampler = torchaudio.transforms.Resample(samplingrate) speech = resampler(speecharray).squeeze().numpy() return speech def predict(path, samplingrate): speech = speechfiletoarrayfn(path, samplingrate) inputs = featureextractor(speech, samplingrate=samplingrate, returntensors="pt", padding=True) inputs = {key: inputs[key].to(device) for key in inputs} with torch.nograd(): logits = model(*inputs).logits scores = F.softmax(logits, dim=1).detach().cpu().numpy()[0] outputs = [{"Emotion": config.id2label[i], "Score": f"{round(score 100, 3):.1f}%"} for i, score in enumerate(scores)] return outputs ~~~
prediction
~~~
path for a sample
path = '/data/jtesv1.1/wav/f01/ang/f01ang01.wav' outputs = predict(path, samplingrate) ~~~ ~~~ [{'Emotion': 'anger', 'Score': '78.3%'}, {'Emotion': 'disgust', 'Score': '11.7%'}, {'Emotion': 'fear', 'Score': '5.4%'}, {'Emotion': 'happiness', 'Score': '4.1%'}, {'Emotion': 'sadness', 'Score': '0.5%'}] ~~~
## Evaluation The following tables summarize the scores obtained by model overall and per each class.
Colab Notebook https://colab.research.google.com/drive/1aPPb_ZVS5dlFVZySly8Q80a44La1XjJu?usp=sharing
