moghit/Audio_Classification
0
1import os
2os.environ["TF_ENABLE_ONEDNN_OPTS"] = "0"
3os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2" # Suppress TF logging
4os.environ["TF_ENABLE_CPU_OPTIMIZATION"] = "0" # Suppress CPU optimization messages
5
6import sounddevice as sd
7import numpy as np
8import librosa
9import tensorflow as tf
10import os
11
12with np.load("words.npz") as data :
13 words = data["y"]
14
15model = tf.keras.models.load_model("last_model_e20_acc78_.keras")
16
17
18duration = 1
19sr = 22050
20n_fft = 2048
21hop_length = 512
22fixed_length = 45100
23
24
25def record_audio(duration, sr):
26 print ("")
27 print("Enregistrement en cours...")
28 audio = sd.rec(int(duration * sr), samplerate=sr, channels=1, dtype=np.float32)
29 sd.wait()
30 print("Enregistrement terminé.")
31 return audio.flatten()
32
33def extract_features(signal, sr):
34 stft = librosa.stft(signal, n_fft=n_fft, hop_length=hop_length)
35 spectrogram = np.abs(stft)
36 spectrogram_flat = spectrogram.flatten()
37
38 if len(spectrogram_flat) > fixed_length:
39 spectrogram_flat = spectrogram_flat[:fixed_length]
40 else:
41 spectrogram_flat = np.pad(spectrogram_flat, (0, fixed_length - len(spectrogram_flat)))
42
43 return np.array([spectrogram_flat])
44
45def report(prediction):
46 test = []
47 values = prediction[0]
48 for i in range ( 10 ) :
49 value = np.round ( values[i] * 100 , 2 )
50 value = round(float(value) , 2 )
51 word = str(words[i])
52 test.append(( value , word ))
53 values_sorted = sorted(test , key = lambda item : item[0] * -1 )
54
55 print ("prediction from high to low probability")
56 print()
57 for i in range ( 10 ) :
58 print (f"{values_sorted[i][1]} is {values_sorted[i][0]} % ")
59
60
61 print ( "so the prediction word is " , values_sorted[0][1] )
62 return values_sorted[0][1]
63 