{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":70203,"databundleVersionId":8068726,"sourceType":"competition"},{"sourceId":173639983,"sourceType":"kernelVersion"}],"dockerImageVersionId":30698,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Import Libraries and Data","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport os\nimport joblib\n\nimport librosa\n\n%matplotlib inline\n\nimport warnings\nwarnings.filterwarnings('ignore')","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-04-24T05:44:11.276731Z","iopub.execute_input":"2024-04-24T05:44:11.277163Z","iopub.status.idle":"2024-04-24T05:44:12.989501Z","shell.execute_reply.started":"2024-04-24T05:44:11.277129Z","shell.execute_reply":"2024-04-24T05:44:12.988037Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Import model\nHere we import the saved model from the training notebook","metadata":{}},{"cell_type":"code","source":"clf = joblib.load('/kaggle/input/birdclef-2024-beginner-guide-model-training/clf.joblib')\n\n# Importing the sample submission file to obtain the class labels\nsample_submission = pd.read_csv('/kaggle/input/birdclef-2024/sample_submission.csv')","metadata":{"execution":{"iopub.status.busy":"2024-04-24T05:46:03.985594Z","iopub.execute_input":"2024-04-24T05:46:03.986097Z","iopub.status.idle":"2024-04-24T05:46:06.016119Z","shell.execute_reply.started":"2024-04-24T05:46:03.986061Z","shell.execute_reply":"2024-04-24T05:46:06.014648Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predicting","metadata":{}},{"cell_type":"code","source":"# Code from https://www.kaggle.com/code/myso1987/how-to-submit-to-birdclef-2024\ntest_audio_dir = '../input/birdclef-2024/test_soundscapes/'\n\nfile_list = [f for f in sorted(os.listdir(test_audio_dir))]\nfile_list = [file.split('.')[0] for file in file_list if file.endswith('.ogg')]\n\nprint('Number of test soundscapes:', len(file_list))","metadata":{"execution":{"iopub.status.busy":"2024-04-24T05:47:22.850166Z","iopub.execute_input":"2024-04-24T05:47:22.850675Z","iopub.status.idle":"2024-04-24T05:47:22.865676Z","shell.execute_reply.started":"2024-04-24T05:47:22.850635Z","shell.execute_reply":"2024-04-24T05:47:22.864176Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_coefficients(waveform, sample_rate):\n    # This function returns the MFCCs of each audio chunk\n    mfccs = librosa.feature.mfcc(y = waveform, sr = sample_rate, n_mfcc = 40)\n    scaled_mfccs = np.mean(mfccs.T, axis = 0)\n    \n    return scaled_mfccs\n\n# Storage for row_ids and predictions\nrow_ids = []\npredictions = []\n\n# Iterating over the files in the test soundscape directory\nfor afile in file_list:\n    # Full path of the audio file\n    path = test_audio_dir + afile + '.ogg'\n    \n    # Loading the audio file into librosa\n    waveform, sample_rate = librosa.load(path)\n    \n    # Splitting the 4-minute audio file into 5-second chunks\n    for i in range(48):\n        # Start and end time of each chunk\n        start_time_sec = i * 5\n        end_time_sec = start_time_sec + 5\n        \n        # Samples of each interval\n        start_samples = start_time_sec * sample_rate\n        end_samples = end_time_sec * sample_rate\n        chunk = waveform[start_samples : end_samples]\n        \n        # Getting the MFCCs of the audio chunk\n        coefficients = get_coefficients(chunk, sample_rate)\n        df_coefficients = pd.DataFrame(coefficients).T\n        \n        # Predicting\n        prediction = clf.predict_proba(df_coefficients)\n        \n        row_id = afile + '_' + str(end_time_sec)\n        \n        row_ids.append(row_id)\n        predictions.append(prediction.flatten())\n\n# Building the submission dataframe\nclass_labels = sample_submission.columns[1:]\ndf_submission = pd.DataFrame(row_ids, columns = ['row_id'])\ndf_predictions = pd.DataFrame(predictions, columns = class_labels)\ndf_submission = pd.concat([df_submission, df_predictions], axis = 1)\n\n# Converting the dataframe to csv\ndf_submission.to_csv('submission.csv', index = None)","metadata":{},"execution_count":null,"outputs":[]}]}