{"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"}],"dockerImageVersionId":30673,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"Code modified from [STEFAN KAHL](https://www.kaggle.com/stefankahl)'s [How to submit to BirdCLEF 2023](https://www.kaggle.com/code/stefankahl/how-to-submit-to-birdclef-2023). ","metadata":{}},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nimport librosa\n\n# First, load list of audio files by parsing the test_soundscape folder.\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-06T00:08:12.419473Z","iopub.execute_input":"2024-04-06T00:08:12.420117Z","iopub.status.idle":"2024-04-06T00:08:13.644145Z","shell.execute_reply.started":"2024-04-06T00:08:12.420083Z","shell.execute_reply":"2024-04-06T00:08:13.643216Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# This is where we will store our results\npred = {'row_id': []}\ntrain_audio_dir = '../input/birdclef-2024/train_audio/'\nspecies_list = sorted(os.listdir(train_audio_dir))\nfor species_code in species_list:\n    pred[species_code] = []\n\n# Process audio files and make predictions\nfor afile in file_list:\n    \n    # Complete file path\n    path = test_audio_dir + afile + '.ogg'\n    \n    # Open file with librosa and split signal into 5-second chunks\n    sig, rate = librosa.load(path, sr=32000)\n    # ...\n    \n    # Let's assume we have a list of 48 audio chunks (4min / 5s == 48 segments)\n    chunks = [[] for i in range(48)]\n    \n    # Make prediction for each chunk\n    # Each bird gets a random value in our case\n    # since we don't actually have a model\n    for i in range(len(chunks)):        \n        chunk_end_time = (i + 1) * 5\n        \n        # Assign the row_id which we need to do for each chunk\n        row_id = afile + '_' + str(chunk_end_time)\n        pred['row_id'].append(row_id)\n        \n        for bird in species_list:\n            \n            # This is our random prediction score for this bird\n            score = np.random.uniform()     \n            \n            # Put the result into our prediction dict            \n            pred[bird].append(score)","metadata":{"execution":{"iopub.status.busy":"2024-04-06T00:08:13.646313Z","iopub.execute_input":"2024-04-06T00:08:13.647153Z","iopub.status.idle":"2024-04-06T00:08:13.675298Z","shell.execute_reply.started":"2024-04-06T00:08:13.647110Z","shell.execute_reply":"2024-04-06T00:08:13.674334Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Make a new data frame and look at some results        \nresults = pd.DataFrame(pred, columns = ['row_id'] + species_list)\n\n# Quick sanity check\nprint(results.head()) \n    \n# Convert our results to csv\nresults.to_csv(\"submission.csv\", index=False)    ","metadata":{"execution":{"iopub.status.busy":"2024-04-06T00:08:13.676980Z","iopub.execute_input":"2024-04-06T00:08:13.677692Z","iopub.status.idle":"2024-04-06T00:08:13.701793Z","shell.execute_reply.started":"2024-04-06T00:08:13.677649Z","shell.execute_reply":"2024-04-06T00:08:13.700618Z"},"trusted":true},"execution_count":null,"outputs":[]}]}