Как я могу распознать один тест данных, принадлежит к какому классу в Python? - PullRequest
0 голосов
/ 15 октября 2019

Я тренирую свою модель, используя керасы, и сохраняю ее. У меня 6 класс. Теперь я хочу прочитать один аудиофайл из микрофона в качестве тестовых данных, затем я говорю, что эти тестовые данные принадлежат к какому классу. ? Но я не знаю как? Мой код:

from pathlib import Path
import glob
import cv2
import numpy as np
from keras.utils import np_utils
from sklearn.metrics import classification_report
from keras.models import load_model

import sounddevice as sd
from scipy.io.wavfile import write
import time

import matplotlib.pyplot as plt
from scipy.io import wavfile


#record from mic 

time.sleep(2)
print('Startofaudio')
fs = 16000 
seconds =1.5 
myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=1)
sd.wait()  
write('S_t1_0_00.wav', fs, myrecording)
print('Endofaudio')
time.sleep(2)


#Spectrogram_rec

path = Path('/home/narges/rec/').glob('**/*.wav')
wavs = [str(wavf) for wavf in path if wavf.is_file()]
wavs.sort()

number_of_files=len(wavs)

spk_ID = [wavs[i].split('/')[-1].lower() for i in range(number_of_files)]

for i in range(number_of_files):
    samplingfrequency, signaldata = wavfile.read(wavs[i])
    pxx, freq, bins, im = plt.specgram(x=signaldata, Fs=samplingfrequency, noverlap=384, NFFT=512)
    plt.title('spec of vowel')
    plt.xlabel('time')
    plt.ylabel('freq')
    plt.savefig("spk_ID:{}.png".format(spk_ID[i]), bbox_inches='tight', dpi=300, frameon='false')


# Load Data test

path_t = Path('/home/.../rec/').glob('**/*.wav')
wavs_t = [str(wavf) for wavf in path_t if wavf.is_file()]

number_of_files_t=len(wavs_t)

# Create Speaker ID

spk_ID_t = [wavs_t[i].split('/')[-1].lower() for i in range(number_of_files_t)]


#load spectrogram_test

path_spec_test = "/home/.../rec"
spec_test = glob.glob(path_spec_test + "**/*.png") 
spec_test.sort()

X_modify_t = []
width_t = 200
height_t = 100
for spec_t in spec_test:
    specs_test = cv2.imread(spec_t)
    specs_test = cv2.cvtColor(specs_test,cv2.COLOR_BGR2GRAY)
    specs_test = cv2.resize(specs_test ,(width_t, height_t))
    specs_test = specs_test / np.max(specs_test)
    specs_test = specs_test.astype(np.float32)
    X_modify_t.append(specs_test)

X_test = np.asarray(X_modify_t,dtype=np.float32)
X_test = np.expand_dims(X_test, axis=3)


#load label_test

label_no_t = [spk_ID_t[i].split('_')[-2] for i in range(number_of_files_t)]
Y_test = np_utils.to_categorical(label_no_t)

# acc per class
model = load_model('my_model.h5')
pred = np.round(model.predict(X_test))
print(classification_report(Y_test, pred))

Я использую матрицу путаницы, которая предсказывает точность для каждого класса, но теперь я хочу узнать, какие тестовые данные принадлежат к какому классу.

...