yfyangd commited on
Commit
28488c6
1 Parent(s): 98caa5c

Upload FeatureExtraction.py

Browse files
Files changed (1) hide show
  1. FeatureExtraction.py +59 -0
FeatureExtraction.py ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ # coding: utf-8
3
+
4
+ # In[ ]:
5
+
6
+
7
+ import librosa
8
+ import librosa.display
9
+ import numpy as np
10
+ import pandas as pd
11
+ import scipy
12
+ from scipy.stats import skew
13
+
14
+ import matplotlib.pyplot as plt
15
+
16
+ SAMPLE_RATE = 44100
17
+ def get_mfcc(name, path):
18
+ data, _ = librosa.core.load(path + name, sr = SAMPLE_RATE)
19
+ assert _ == SAMPLE_RATE
20
+ try:
21
+ ft1 = librosa.feature.mfcc(data, sr = SAMPLE_RATE, n_mfcc=30)
22
+ ft2 = librosa.feature.zero_crossing_rate(data)[0]
23
+ ft3 = librosa.feature.spectral_rolloff(data)[0]
24
+ ft4 = librosa.feature.spectral_centroid(data)[0]
25
+ ft5 = librosa.feature.spectral_contrast(data)[0]
26
+ ft6 = librosa.feature.spectral_bandwidth(data)[0]
27
+ ft1_trunc = np.hstack((np.mean(ft1, axis=1), np.std(ft1, axis=1), skew(ft1, axis = 1), np.max(ft1, axis = 1),
28
+ np.median(ft1, axis = 1), np.min(ft1, axis = 1)))
29
+ ft2_trunc = np.hstack((np.mean(ft2), np.std(ft2), skew(ft2), np.max(ft2), np.median(ft2), np.min(ft2)))
30
+ ft3_trunc = np.hstack((np.mean(ft3), np.std(ft3), skew(ft3), np.max(ft3), np.median(ft3), np.min(ft3)))
31
+ ft4_trunc = np.hstack((np.mean(ft4), np.std(ft4), skew(ft4), np.max(ft4), np.median(ft4), np.min(ft4)))
32
+ ft5_trunc = np.hstack((np.mean(ft5), np.std(ft5), skew(ft5), np.max(ft5), np.median(ft5), np.min(ft5)))
33
+ ft6_trunc = np.hstack((np.mean(ft6), np.std(ft6), skew(ft6), np.max(ft6), np.median(ft6), np.max(ft6)))
34
+ return pd.Series(np.hstack((ft1_trunc, ft2_trunc, ft3_trunc, ft4_trunc, ft5_trunc, ft6_trunc)))
35
+ except:
36
+ print('bad file')
37
+ return pd.Series([0]*210)
38
+
39
+ def MFCC_spectrogram(y, sr):
40
+ # 提取頻域音頻資料 MFCC spectrogram feature
41
+ melspec = librosa.feature.melspectrogram(y, sr, n_fft=1024, hop_length=512, n_mels=128)
42
+ # 轉成 log scale 已呈現頻譜資料
43
+ logmelspec = librosa.power_to_db(melspec)
44
+ # 繪圖
45
+ plt.figure()
46
+ librosa.display.specshow(logmelspec, sr=sr, x_axis='time', y_axis='mel')
47
+ plt.title('Features of unknow frog by MFCC (Mel Frquency Cepstral Coefficients)')
48
+ plt.show()
49
+
50
+
51
+
52
+ def FeatureExtraction(fname):
53
+ # 創建文件檔
54
+ test= pd.DataFrame({'fname':[fname]})
55
+ # 特徵提取
56
+ test_data = test['fname'].progress_apply(get_mfcc, path='')
57
+ test_data = test_data.values
58
+ return test_data
59
+