[Python] Librosa MFCC를 통해 음성 데이터에서 특징 추출하기


Librosa 라이브러리를 사용하여 음성 데이터에서 MFCC를 추출해보자.

MFCC는 음성 데이터를 특징벡터화해주는 알고리즘으로, 아날로그 신호인 음성 데이터를 벡터화함으로써 머신러닝에서 학습 데이터로 사용할 수 있게 된다.

파이썬의 librosa라이브러리를 통해 간단하게 MFCC를 추출할 수 있다.

📝 음성 데이터 load


파일 경로를 지정해준 뒤 librosa.load를 통해 데이터를 로드하자.

import librosa

filepath = '/content/drive/MyDrive/cut2/cuts10_anger_M_a17_1.wav'
signal, sr = librosa.load(filepath, sr=16000)

sr(sampling rate)은 음성 데이터의 형식에 따라 다른데, .wav파일의 경우 16000이다.

🔍 MFCC 추출


다음으로는 음성 데이터에서 특징 벡터를 추출해보자.

import librosa

MFCCs = librosa.feature.mfcc(signal, sr)

위의 코드를 보면 알 수 있듯이 mfcc를 추출하는 것은 상당히 간단하지만, 파라미터 설정에 따라 큰 차이를 보이므로 다루고자 하는 음성 데이터에 맞게 파라미터를 조정해주는것이 좋다.

🧪 파라미터 최적화


1) sr(sampling rate)

default 값은 22050Hz이며 앞서 데이터를 로드할 때 16000Hz로 받았으므로 sr값을 동일하게 설정해 준다.

2) n_fft

음성의 길이를 얼만큼으로 자를지(frame length를 결정)에 대한 파라미터다. 자연어 처리에서는 frame length를 25ms를 기본으로 한다. n_fft를 400으로 설정하게 되면 frame length가 0.025(n_fft/sr), 즉 25ms가 된다.

3) hop_length

hop_length는 그 길이만큼 데이터를 읽어간다. frame stride = 10ms가 default이므로, sr * frame_stride = 160를 통해 hop_length를 160으로 설정해준다.

4) n_mfcc

특징 벡터의 개수를 정해주는 파라미터로 default는 20이다. 값이 커질수록 더 많은 특징벡터를 추출하게 되는데, 대신에 시간이 매우 오래걸린다.

10부터 100까지 다양한 값들을 넣어 테스트 한 결과(실제로 svm을 돌려서 정확도를 비교해봄), 36과 50이 높게 나왔으며 둘의 차이가 크게 없어 36으로 결정했다.


위의 변경사항을 모두 합치고, cut2파일에 있는 모든 음성 파일들의 MFCC를 추출하는 코드는 다음과 같다.

from imutils import paths
import os
import librosa


def getMFCC(filepath):
  signal, sr = librosa.load(filepath, sr=16000)

  # MFCC를 통한 특징 벡터 추출 (n_mfcc=36)
  MFCCs = librosa.feature.mfcc(signal, sr, n_fft=400, hop_length=160, n_mfcc=36)
  return MFCCs

# 파일을 읽어올 폴더 경로 지정
forder = '/content/drive/MyDrive/cut2'
files = paths.list_files(forder)

for i in files:
  mfcc=getMFCC(i)

*참고한 블로그




# 카테고리