{"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":44550,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":37428}],"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":"from transformers import pipeline\nfrom PIL import Image\nimport os\nfrom pydub import AudioSegment\nimport math\nimport numpy as np\nimport librosa\nfrom matplotlib import pyplot as plt\nimport io\nimport pandas as pd\nimport glob","metadata":{"execution":{"iopub.status.busy":"2024-05-14T04:21:09.111374Z","iopub.execute_input":"2024-05-14T04:21:09.111725Z","iopub.status.idle":"2024-05-14T04:21:31.121514Z","shell.execute_reply.started":"2024-05-14T04:21:09.111696Z","shell.execute_reply":"2024-05-14T04:21:31.120637Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def audiosegment_to_librosawav(audio):    \n    # Pydub AudioSegment'i numpy dizisine dönüştür\n    samples = np.array(audio.get_array_of_samples())\n\n    # Orjinal örnekleme frekansını al\n    sample_rate = audio.frame_rate\n\n    samples_librosa = librosa.resample(samples.astype(float), orig_sr=sample_rate, target_sr=sample_rate)\n\n    return samples_librosa, sample_rate","metadata":{"execution":{"iopub.status.busy":"2024-05-14T04:21:31.122921Z","iopub.execute_input":"2024-05-14T04:21:31.123668Z","iopub.status.idle":"2024-05-14T04:21:31.129791Z","shell.execute_reply.started":"2024-05-14T04:21:31.123638Z","shell.execute_reply":"2024-05-14T04:21:31.128516Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nimport librosa\npipe = pipeline(\"image-classification\", \"/kaggle/input/convnextv2-tiny-1k-224-finetuned-birdclef-2024/other/model/1/convnextv2-tiny-1k-224-finetuned-birdclef-2024\", top_k=182)\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-05-14T04:21:31.138510Z","iopub.execute_input":"2024-05-14T04:21:31.138857Z","iopub.status.idle":"2024-05-14T04:21:32.742879Z","shell.execute_reply.started":"2024-05-14T04:21:31.138831Z","shell.execute_reply":"2024-05-14T04:21:32.741769Z"},"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[:130]:\n    path = test_audio_dir + afile + '.ogg'\n    audio = AudioSegment.from_file(path, format=\"ogg\")\n    segment_length_ms = 5000  # 5 saniye (5000 milisaniye)\n    num_segments = math.ceil(len(audio) / segment_length_ms)-1\n    for i in range(num_segments):\n        start_time = i * segment_length_ms\n        end_time = min((i + 1) * segment_length_ms, len(audio))\n        \n        segment = audio[start_time:end_time]\n        audio_data, sample_rate = audiosegment_to_librosawav(segment)\n        # Spektrogramu oluştur\n        spectrogram = librosa.feature.melspectrogram(y=audio_data, sr=sample_rate)\n        log_spectrogram = librosa.power_to_db(spectrogram, ref=np.max)\n\n        # Spektrogramu kaydet\n        plt.figure(figsize=(10, 4))\n        librosa.display.specshow(log_spectrogram, sr=sample_rate, x_axis='time', y_axis='mel')\n        # Save the plot to a BytesIO buffer\n        buffer = io.BytesIO()\n        plt.savefig(buffer, format='png')\n        buffer.seek(0)  # Reset the buffer position to the start\n        # Create a PIL Image from the buffer\n        image = Image.open(buffer)\n        plt.close()\n        predict = pipe(image)\n        sorted_sublist = sorted(predict, key=lambda x: x['label'])\n        row_id = afile + '_' + str(end_time // 1000)\n        pred['row_id'].append(row_id)\n        for prd in sorted_sublist:          \n            pred[prd['label']].append(prd['score'])","metadata":{"execution":{"iopub.status.busy":"2024-05-14T04:21:32.744267Z","iopub.execute_input":"2024-05-14T04:21:32.745364Z","iopub.status.idle":"2024-05-14T04:22:07.753279Z","shell.execute_reply.started":"2024-05-14T04:21:32.745327Z","shell.execute_reply":"2024-05-14T04:22:07.752039Z"},"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-05-14T04:22:07.754363Z","iopub.execute_input":"2024-05-14T04:22:07.754947Z","iopub.status.idle":"2024-05-14T04:22:07.810313Z","shell.execute_reply.started":"2024-05-14T04:22:07.754919Z","shell.execute_reply":"2024-05-14T04:22:07.809146Z"},"trusted":true},"execution_count":null,"outputs":[]}]}