{"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":"from python_speech_features import mfcc\nfrom python_speech_features import logfbank\nimport scipy.io.wavfile as wav\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom hmmlearn import hmm\nfrom sklearn.metrics import classification_report\nimport pandas as pd\nimport os\n\nvalidation_files = open(\"./tensorflow-speech-recognition-challenge/train/train/validation_list.txt\", \"r\")\ntesting_files = open(\"./tensorflow-speech-recognition-challenge/train/train/testing_list.txt\", \"r\")\n\nvalidation_files=validation_files.readlines()\nvalidation_files=[line.rstrip('\\n') for line in validation_files]\n\n\ntrain_fpaths = []\ntrain_labels = []\ntrain_spoken = []\n\nval_fpaths = []\nval_labels = []\nval_spoken = []\n#data_subset=['yes', 'no', 'up', 'down', 'left', 'right', 'on', 'off', 'stop', 'go']\ndata_subset=['yes', 'right', 'up', 'go', 'left', 'no',\n             'on', 'stop', 'cat','eight','one','sheila','three','zero', 'bed', 'dog', \n             'five', 'happy', 'marvin', 'six', 'tree', 'wow', 'bird', 'four', 'house', 'nine', \n             'seven', 'two', 'off', 'down']\n\nfor f in os.listdir('./tensorflow-speech-recognition-challenge/train/train/audio'):\n    if f in data_subset:\n        for w in os.listdir('./tensorflow-speech-recognition-challenge/train/train/audio/' + f):\n            if f + '/' + w not in validation_files:\n                train_fpaths.append('./tensorflow-speech-recognition-challenge/train/train/audio/' + f + '/' + w)\n                train_labels.append(f)\n                if f not in train_spoken:\n                    train_spoken.append(f)\n            else:\n                val_fpaths.append('./tensorflow-speech-recognition-challenge/train/train/audio/' + f + '/' + w)\n                val_labels.append(f)\n                if f not in val_spoken:\n                    val_spoken.append(f)\nprint('Training Words spoken:', train_spoken)\nprint('Validation Words spoken:', train_spoken)\n\ndef gen_features_labels(fpaths,labels,num_features=13,win_size=0.01):\n    features={label:list() for label in np.unique(labels)}\n    lengths={label:list() for label in np.unique(labels)}\n    for path,label in zip(fpaths,labels):\n        (rate,sig) = wav.read(path)\n        mfcc_feat = mfcc(sig,rate,numcep=num_features,winstep=win_size)\n        features[label].append(mfcc_feat)\n        lengths[label].append(mfcc_feat.shape[0])\n    return features,lengths\n\ndef gen_models(features,labels,lengths,n_components=4,covariance_type='diag'):\n    total_features={label:np.concatenate(features[label]) for label in np.unique(labels)}\n    models={label:hmm.GaussianHMM(n_components=n_components, covariance_type=covariance_type) \n            for label in np.unique(labels)}\n    for label in np.unique(labels):\n        data_sample=total_features[label]\n        models[label].fit(data_sample,lengths=lengths[label])\n        print('labels : {0}, score : {1:.2f}'.format(label,models[label].score(data_sample)))\n    return models\n\ndef test_class(models,features):\n    num_samples=len(features)\n    predicted_classes=list()\n    scores={label:list() for label in models.keys()}\n    for i in range(num_samples):\n        for label,model in models.items():\n            scores[label].append(model.score(features[i]))\n    return scores\n\n\ndef predict_class(models,features,spoken):\n    total_labels=list()\n    total_preds=list()\n    for word in features.keys():\n        phi=test_class(models,features[word])\n        df=pd.DataFrame(phi)\n        y_pred=np.argmax(df.to_numpy(),axis=1)\n        labels=np.repeat(spoken.index(word),len(features[word]))\n        total_labels.append(labels)\n        total_preds.append(y_pred)\n    return np.concatenate(total_labels),np.concatenate(total_preds)\n\nnum_features=13\nwin_size=0.1\nn_components=4\n\ncovariance_type='diag'\n\ntrain_features,train_lengths=gen_features_labels(train_fpaths,train_labels,num_features=26,win_size=0.01)\nval_features,val_lengths=gen_features_labels(val_fpaths,val_labels,num_features=26,win_size=0.01)\nmodels=gen_models(train_features,train_labels,train_lengths,n_components=n_components,covariance_type=covariance_type)\ny_pred,y_true=predict_class(models,train_features,train_spoken)\nprint('Entrenamiento')\nprint(classification_report(y_true, y_pred, target_names=train_spoken))\ny_pred,y_true=predict_class(models,val_features,val_spoken)\nprint('Test')\nprint(classification_report(y_true, y_pred, target_names=val_spoken))\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-10-22T02:37:30.971556Z","iopub.execute_input":"2021-10-22T02:37:30.971893Z","iopub.status.idle":"2021-10-22T03:09:00.586482Z","shell.execute_reply.started":"2021-10-22T02:37:30.971858Z","shell.execute_reply":"2021-10-22T03:09:00.584818Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from py7zr import unpack_7zarchive\nimport shutil\n\nshutil.register_unpack_format('7zip', ['.7z'], unpack_7zarchive)\nshutil.unpack_archive('/kaggle/input/tensorflow-speech-recognition-challenge/train.7z', '/kaggle/working/tensorflow-speech-recognition-challenge/train/')","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:05:52.69379Z","iopub.execute_input":"2021-10-22T02:05:52.694074Z","iopub.status.idle":"2021-10-22T02:08:18.670669Z","shell.execute_reply.started":"2021-10-22T02:05:52.694047Z","shell.execute_reply":"2021-10-22T02:08:18.669966Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:04:33.585392Z","iopub.execute_input":"2021-10-22T02:04:33.585744Z","iopub.status.idle":"2021-10-22T02:04:33.617223Z","shell.execute_reply.started":"2021-10-22T02:04:33.58565Z","shell.execute_reply":"2021-10-22T02:04:33.616495Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"shutil.register_unpack_format('7zip', ['.7z'], unpack_7zarchive)\nshutil.unpack_archive('/kaggle/input/tensorflow-speech-recognition-challenge/train.7z', '/kaggle/working/tensorflow-speech-recognition-challenge/train/')","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:09:02.997231Z","iopub.execute_input":"2021-10-22T02:09:02.997497Z","iopub.status.idle":"2021-10-22T02:09:03.022652Z","shell.execute_reply.started":"2021-10-22T02:09:02.997466Z","shell.execute_reply":"2021-10-22T02:09:03.02176Z"},"trusted":true},"execution_count":null,"outputs":[]}]}