{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom glob import glob\nimport random\nimport os\nimport time\nimport torch\nimport torchaudio\nimport librosa","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Sample Submission\n\nThis notebook without model. It will help for making submission without Exception (jump start)","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"# Custom Dataset for Check Phase\n\nI am feeling secondhand embarrassment for our competition hosts... I think they [forgot about how should work with hidden test in code competition](https://www.kaggle.com/c/birdsong-recognition/discussion/158987#892424). So, I have created [custom dataset](https://www.kaggle.com/shonenkov/birdcall-check) for making check phase. It is hardcode, but it will help you avoid many bugs without button \"submission\". \n\n","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"BASE_TEST_DIR = '../input/birdsong-recognition' if os.path.exists('../input/birdsong-recognition/test_audio') else '../input/birdcall-check'","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"df_test = pd.read_csv(f'{BASE_TEST_DIR}/test.csv')\ndf_train = pd.read_csv('../input/birdsong-recognition/train.csv')\nall_birds = df_train['ebird_code'].unique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def random_predict():\n    birds = random.choices(all_birds, k=random.randint(0,2)) or ['nocall']\n    return ' '.join(birds)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sub_test_12 = df_test[df_test.site.isin(['site_1', 'site_2'])]\nsub_test_3 = df_test[df_test.site.isin(['site_3'])]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"TEST_FOLDER = f'{BASE_TEST_DIR}/test_audio'\n\ndef custom_read_audio(audio_path, sr=44100):\n    \"\"\"\n    author: @shonenkov \n    \n    Super fast method, without exceptions. \n    return waveform <torch.tensor>, sample_rate <number>\n    \"\"\"\n    try:\n        waveform, sample_rate = torchaudio.load(audio_path, normalization=True)\n        if sample_rate != sr:\n            waveform = torchaudio.transforms.Resample(sample_rate, sr)(waveform)\n            sample_rate = sr\n    except RuntimeError:\n        waveform, sample_rate = librosa.load(audio_path, sr=sr, mono=False)\n        waveform = torch.from_numpy(waveform)\n        if waveform.shape[0] not in [1, 2]:\n            waveform = waveform.unsqueeze(0)\n    return waveform, sample_rate","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission = {'row_id': [], 'birds': []}\n\nfor audio_id, data in sub_test_12.groupby('audio_id'):\n    waveform, sample_rate = custom_read_audio(f'{TEST_FOLDER}/{audio_id}.mp3')\n    submission['row_id'].extend(data['row_id'].values)\n    submission['birds'].extend([random_predict() for i in range(data.shape[0])])\n\nfor _, row in sub_test_3.iterrows():\n    row_id, audio_id = row['row_id'], row['audio_id']\n    waveform, sample_rate = custom_read_audio(f'{TEST_FOLDER}/{audio_id}.mp3')\n    submission['row_id'].append(row_id)\n    submission['birds'].append(random_predict())\n\nsubmission = pd.DataFrame(submission)\nsubmission.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}