Turkcell / backend /utils /feature_extractor.py
huseyinemretech's picture
Lite Deploy: Clean start without large files
9f48b33
Raw History Blame Contribute Delete
1.86 kB
import librosa
import numpy as np
def extract_features(file_path, num_mfcc=13, n_mels=40):
"""
Ses dosyasından MFCC özniteliklerini çıkarır.
Args:
file_path (str): Ses dosyasının yolu.
num_mfcc (int): Çıkarılacak MFCC sayısı.
n_mels (int): Mel bankası sayısı.
Returns:
numpy.ndarray: Çıkarılan MFCC öznitelikleri.
Eğer dosya okuma hatası oluşursa None döner.
"""
try:
# Ses dosyasını librosa ile yükle
audio, sr = librosa.load(file_path, sr=None)
# Log-Mel spektrogramını oluştur
S = librosa.feature.melspectrogram(y=audio, sr=sr, n_mels=n_mels)
log_S = librosa.power_to_db(S, ref=np.max)
# MFCC'leri log-mel spektrogramından çıkar
mfccs = librosa.feature.mfcc(S=log_S, sr=sr, n_mfcc=num_mfcc)
# Ortalama ve standart sapmasını alarak vektör haline getir
mfccs_mean = np.mean(mfccs.T, axis=0)
mfccs_std = np.std(mfccs.T, axis=0)
# Her iki vektörü birleştir
features = np.concatenate((mfccs_mean, mfccs_std))
except Exception as e:
print(f"Hata: {file_path} dosyası işlenirken bir sorun oluştu. Hata: {e}")
return None
return features
if __name__ == '__main__':
# Bu dosya tek başına çalıştırıldığında test etmek için
sample_file_path = "ornek_ses_dosyasi.wav"
# Varsayılan MFCC parametreleri ile öznitelikleri çıkar
extracted_features = extract_features(sample_file_path)
if extracted_features is not None:
print("Öznitelikler başarıyla çıkarıldı.")
print("Vektör boyutu:", extracted_features.shape)
# print("Öznitelikler:", extracted_features)
else:
print("Öznitelik çıkarma işlemi başarısız oldu.")