-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbreath.py
64 lines (49 loc) · 2.19 KB
/
breath.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import joblib
import sklearn
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
import librosa, librosa.display
import numpy as np
import matplotlib.pyplot as plt
############ Without Silence #############
def load_file(file_path):
test_features = []
signal, sr = librosa.load(file_path, sr = 22050)
n_fft = 2048
n_mfcc = 13
hop_length = 512
num_segments = 1
SAMPLE_RATE = 22050
DURATION = 4 # measured in seconds.
SAMPLES_PER_TRACK = SAMPLE_RATE * DURATION
num_samples_per_segment = int(SAMPLES_PER_TRACK / num_segments)
for s in range(num_segments):
start_sample = num_samples_per_segment * s # if s= 0 -> then start_sample = 0
finish_sample = start_sample + num_samples_per_segment
# features
zc = librosa.feature.chroma_stft(y=signal[start_sample: finish_sample],
sr=sr,n_chroma=12, n_fft=4096)
mfcc = librosa.feature.mfcc(signal[start_sample: finish_sample],
sr =sr,
n_fft = 2048,
n_mfcc = 13,
hop_length = 512
)
chroma_cq = librosa.feature.chroma_cqt(y=signal[start_sample: finish_sample], sr=sr)
pitches, magnitudes = librosa.piptrack(y=signal[start_sample: finish_sample], sr=sr)
rolloff = librosa.feature.spectral_rolloff(y=signal[start_sample: finish_sample], sr=sr, roll_percent=0.1)
# Combining all the features
features = np.concatenate((zc, mfcc, chroma_cq, pitches, rolloff), axis = 0)
test_features.append(features)
test_feat = np.array(test_features)
model_features = test_feat.reshape(test_feat.shape[0], (test_feat.shape[1]*test_feat.shape[2]))
return model_features
def predict(cough_fp, saved_model_fp):
loaded_model = joblib.load(saved_model_fp)
breath_features = load_file(cough_fp)
y_pred = loaded_model.predict_proba(breath_features)
k = np.argmax(y_pred)
if k == 1:
return y_pred[0][1]
elif k == 0:
return 0