{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nimport os\nimport librosa   #for audio processing/\n\nimport IPython.display as ipd\nimport matplotlib.pyplot as plt\nimport numpy as np\nfrom scipy.io import wavfile #for audio processing\nimport warnings\nwarnings.filterwarnings(\"ignore\")","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in os.listdir('../input/synthetic-speech-commands-dataset/augmented_dataset/augmented_dataset'):\n    print(i)\ntrain_audio_path = '../input/synthetic-speech-commands-dataset/augmented_dataset/augmented_dataset/bed/1001.wav'\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_audio_path = '../input/synthetic-speech-commands-dataset/augmented_dataset/augmented_dataset/bed/1001.wav'\nsamples, sample_rate = librosa.load(train_audio_path, sr = 16000)\nprint('samples:{}'.format(samples.shape))\nprint('sample_rate:{}'.format(sample_rate))\nfig = plt.figure(figsize=(14, 8))\nax1 = fig.add_subplot(211)\nax1.set_title('Raw wave of ' + '../input/train/audio/yes/0a7c2a8d_nohash_0.wav')\nax1.set_xlabel('time')\nax1.set_ylabel('Amplitude')\nax1.plot(np.linspace(0, sample_rate/len(samples), sample_rate), samples)\n#","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"a=ipd.Audio(samples, rate=sample_rate)\nprint(a)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nplt.rcParams['figure.figsize']=(15,7)\ntrain_loc='../input/synthetic-speech-commands-dataset/augmented_dataset/augmented_dataset'\nlabels=os.listdir(train_loc)\nlabels\ncount_lis=[len(os.listdir(train_loc+'/{}'.format(i))) for i in labels]\nindex=np.arange(0,len(count_lis))\nplt.bar(index,count_lis)\nplt.xticks(index,labels,rotation=60)\nplt.show()\n\n\n\n            \n    \n    \n    ","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nduration_of_recordings=[]\nfor label in labels:\n    waves = [f for f in os.listdir(train_loc + '/'+ label) if f.endswith('.wav')]\n    for wav in waves:\n        sample_rate, samples = wavfile.read(train_loc + '/' + label + '/' + wav)\n        duration_of_recordings.append(float(len(samples)/sample_rate))\n    \nplt.hist(np.array(duration_of_recordings))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# In the data exploration part earlier, we have seen that the duration of a few recordings\n# is less than 1 second and the sampling rate is too high. So, let us read the audio waves and \n# use the below-preprocessing steps to deal with this.\n\n# Here are the two steps we’ll follow:\n\n# Resampling\n# Removing shorter commands of less than 1 second","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"all_wave = []\nall_label = []\nfor label in labels:\n    print(label)\n    waves = [f for f in os.listdir(train_loc + '/'+ label) if f.endswith('.wav')]\n    for wav in waves:\n        samples, sample_rate = librosa.load(train_loc + '/' + label + '/' + wav, sr = 8000)\n        #samples = librosa.resample(samples, sample_rate, 8000)\n        if(len(samples)== 8000) : \n            all_wave.append(samples)\n            all_label.append(label)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder\nfrom keras.utils import np_utils\n\nle=LabelEncoder()\ny=le.fit_transform(all_label)\nprint(y.shape)\nclasses=list(le.classes_)\ny1=np_utils.to_categorical(y, num_classes=len(labels))\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lab=pd.get_dummies(all_label)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lab.columns","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y1.shape","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nX_train,X_test,y_train,y_test=train_test_split(np.array(all_wave).reshape(-1,8000,1),np.array(y1),test_size=0.2,shuffle=True)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.layers import Input,Dense,Flatten,Conv1D,MaxPooling1D,Dropout\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras.callbacks import EarlyStopping,ModelCheckpoint","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"inputs=Input(shape=(8000,1))\n\n#First Conv1D layer\nconv = Conv1D(8,13, padding='valid', activation='relu', strides=1)(inputs)\nconv = MaxPooling1D(3)(conv)\nconv = Dropout(0.3)(conv)\n\n#Second Conv1D layer\nconv = Conv1D(16, 11, padding='valid', activation='relu', strides=1)(conv)\nconv = MaxPooling1D(3)(conv)\nconv = Dropout(0.3)(conv)\n\n#Third Conv1D layer\nconv = Conv1D(32, 9, padding='valid', activation='relu', strides=1)(conv)\nconv = MaxPooling1D(3)(conv)\nconv = Dropout(0.3)(conv)\n\n#Fourth Conv1D layer\nconv = Conv1D(64, 7, padding='valid', activation='relu', strides=1)(conv)\nconv = MaxPooling1D(3)(conv)\nconv = Dropout(0.3)(conv)\n\n#Flatten layer\nconv = Flatten()(conv)\n\n#Dense Layer 1\nconv = Dense(256, activation='relu')(conv)\nconv = Dropout(0.3)(conv)\n\n#Dense Layer 2\nconv = Dense(128, activation='relu')(conv)\nconv = Dropout(0.3)(conv)\n\noutputs = Dense(len(labels), activation='softmax')(conv)\n\nmodel = Model(inputs, outputs)\nmodel.summary()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=10, min_delta=0.0001) \nmc = ModelCheckpoint('best_model.hdf5', monitor='val_acc', verbose=1, save_best_only=True, mode='max')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history=model.fit(X_train, y_train ,epochs=50, callbacks=[es,mc], batch_size=32, validation_data=(X_test,y_test))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(history.history['loss'], label='train_loss') \nplt.plot(history.history['val_loss'], label='test_loss') \nplt.plot(history.history['accuracy'], label='train_acc') \nplt.plot(history.history['val_accuracy'], label='test_acc')\nplt.legend() \nplt.show()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## function to predict text\ndef predict(audio):\n    prob=model.predict(audio.reshape(1,8000,1))\n    index=np.argmax(prob[0])\n    return classes[index]\nimport random\nindex=random.randint(0,len(X_test)-1)\nsamples=X_test[index].ravel()\nprint(\"Audio:\",classes[np.argmax(y_test[index])])\na=ipd.Audio(samples, rate=8000)\na\nprint(\"Text:\",predict(samples))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## for user to record itd sound\n!pip install sounddevice\nimport sounddevice as sd\nimport soundfile as sf\n\nsamplerate = 16000  \nduration = 1 # seconds\nfilename = 'yes.wav'\nprint(\"start\")\nmydata = sd.rec(int(samplerate * duration), samplerate=samplerate,\n    channels=1, blocking=True)\nprint(\"end\")\nsd.wait()\nsf.write(filename, mydata, samplerate)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}