Sesin Öznitelik Çıkarımı — Librosa
Bu yazımızda ses sınıflandırma, ses tanıma vb. yolunda temel oluşturabilecek bir Python kütüphanesine değineceğiz. Bu yazıyla birlikte sesi modellerimizde kullanabilecek hale getirmek için öznitelik çıkarımı yapacağız ve bu çıkarımların ne olduğunu inceleyeceğiz.
Librosa Nedir?
Librosa müzik ve ses analizi için kullanılan bir Python paketidir.
Librosa Kütüphanesinin Yüklenmesi
!pip install librosa
Ses Dosyasının Yüklenmesi
import librosa
ses = "ses_dosyası.wav"
x,sr = librosa.load(ses)print("x type:",type(x),"sr type",type(sr))
x type: <class 'numpy.ndarray'> sr type: <class 'int'>print(x.shape,sr)
(110250,) 22050
x → ses zaman serisi
sr →ses frekansı(Hz)
Aynı zamanda sesi yüklerken ses frekansını değiştirerek yükleyebilirsiniz.
x,sr = librosa.load(ses,sr=11025)print(x.shape,sr)
(110250,) 22050
Sesin Oynatılması
Sesi oynatmak için IPython kütüphanesinden yararlanıyoruz.
import IPython.display as ipd
ipd.Audio(ses)ipd.Audio(x,rate=sr) #Bu şekilde de oynatılabiliyor.
Kodu çalıştırdıktan sonra bu şekilde bir arayüz geliyor ve sesimizi dinleyebiliyoruz.
Sesi Kaydetme
Librosa sesi okumamızı sağladığı gibi sesi kaydetmemize de olanak sağlıyor.
x, sr = librosa.load(librosa.util.example_audio_file())librosa.output.write_wav('ses_kayit.wav', x, sr)
Sesi Görüntüleme
import matplotlib.pyplot as plt
import librosa.displayplt.figure(figsize=(10,2))
librosa.display.waveplot(x,sr=sr)
Spektrogram
Spektrogram, belirli bir dalga formunda bulunan çeşitli frekanslarda bir sinyalin sinyal gücünü veya yüksekliğini temsil eden görseldir. Aynı zamanda enerji seviyelerini zaman içinde nasıl değiştiğini de gösterir.
Short Time Fourier Transform: Ses sinyali işlemek için güçlü bir araçtır. Sinyaller için zamana ve frekansa göre karmaşık genliği belirten zaman frekansı dağılımını tanımlar.
Spektogram için Eğlenceli Bir Site
X=librosa.stft(x) #stft -> Short-time Fourier transform
Xdb=librosa.amplitude_to_db(abs(X)) #Genlikten Desibel değerineplt.figure(figsize=(20,8))
librosa.display.specshow(Xdb,sr=sr,x_axis="time",y_axis="hz")
plt.colorbar()
Feature Extraction — Öznitelik Çıkarımı
Mel-Frekans Kepstral Katsayıları (Mel-Frequency Cepstral Coefficients)
Mel frekans ölçeği, insan kulağının ses frekanslarındaki değişimi algılayışını gösteren bir ölçektir. MFCC(Mel-Frequency Cepstral Coefficients), ses sinyalinin kısa zamanlı güç spektrumunun Mel ölçeği üzerindeki ifadesidir.
Frekanstan Mel ölçeğine dönüşüm formülü;
M ═ 1125 × ln(1+(f÷700))
M → Mel ölçeği
f → Frekans(Hz)
mfkk=librosa.feature.mfcc(x,sr=sr)
print(mfkk.shape)
(20, 216)plt.figure(figsize=(15,6))
librosa.display.specshow(mfkk,x_axis="s")
plt.colorbar()
Zero Crossing Rate
Zero crossing rate bir sinyalin sıfır çizgisinden geçişi yani işaret değişiminin oranıdır.
zero_crossing=librosa.zero_crossings(x)
print(sum(zero_crossing)) #Toplam sıfır geçişi sayısı
1908plt.plot(x[5000:5100])
plt.grid()
Spectral Centroid
Spektrumun kütle merkezinin nerede olduğunu gösterir.
spec_cent=librosa.feature.spectral_centroid(x)
print(spec_cent.shape)
(1, 216)plt.semilogy(spec_cent.T)
plt.ylabel("Hz")
Spectral Rolloff
Sinyal şeklinin ölçüsü. Toplam spektral enerjisinin belli bir yüzdesini temsil eder.
spec_roll=librosa.feature.spectral_rolloff(x,sr=sr)
print(spec_roll.shape)
(1, 216)plt.semilogy(spec_roll.T,"r")
plt.ylabel("Hz")
librosa.feature.spectral_rolloff
Chroma Frekansı
Spektrum müzikal oktavının 12 farklı yarı tonunu(chroma) temsil eden 12 parçanın belirtildiği ses için güçlü bir sunumudur.
chroma=librosa.feature.chroma_stft(x,sr=sr)
print(chroma.shape)
(12, 216)librosa.display.specshow(chroma,y_axis="chroma",x_axis="time")
plt.colorbar()
Spektral Bant Genişliği
Ses sinyalinin dalga genişliğinin maksimum tepe noktasının yarısını tanımlar.
spec_band=librosa.feature.spectral_bandwidth(x,sr=sr)print(spec_band,spec_band.shape)
[[3485.33953975 1440.92475081 1564.93918585 ... 4094.54535891
4112.77024258 4179.68287521]]
(1, 2647)
librosa.feature.spectral_bandwidth
Böylece bu yazımızda da modellerimizde kullanmak için sesin öznitelik çıkarımı yaptık. Kodun tamamına buradan ulaşabilirsiniz.
Bir sonraki yazıda görüşmek üzere. Başarılar.
Kaynakça:
2- THE SHORT-TIME FOURIER TRANSFORM
3- Zero crossing rate and Energy of the Speech Signal of Devanagari Script— D.S.Shete, Prof. S.B. Patil, Prof. S.B. Patil