{"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}],"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"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-13T07:53:25.421594Z","iopub.execute_input":"2024-05-13T07:53:25.422463Z","iopub.status.idle":"2024-05-13T07:53:46.160651Z","shell.execute_reply.started":"2024-05-13T07:53:25.422423Z","shell.execute_reply":"2024-05-13T07:53:46.159163Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pipe = 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\ncolumn_names = pipe.model.config.id2label.values()\n# Convert dict_values to a list\nvalues_list = list(column_names)","metadata":{"execution":{"iopub.status.busy":"2024-05-13T07:53:46.162808Z","iopub.execute_input":"2024-05-13T07:53:46.163453Z","iopub.status.idle":"2024-05-13T07:53:48.153985Z","shell.execute_reply.started":"2024-05-13T07:53:46.163420Z","shell.execute_reply":"2024-05-13T07:53:48.152829Z"},"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-13T07:53:48.155249Z","iopub.execute_input":"2024-05-13T07:53:48.155599Z","iopub.status.idle":"2024-05-13T07:53:48.162099Z","shell.execute_reply.started":"2024-05-13T07:53:48.155571Z","shell.execute_reply":"2024-05-13T07:53:48.160953Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds = np.empty(shape=(0, 182), dtype=np.float32)\nids = []\nogg_dosyalari = glob.glob(os.path.join('/kaggle/input/birdclef-2024/test_soundscapes', '*.ogg'))\n# Her dosya için işlem yapın\nnum_files = len(ogg_dosyalari)\nfor input_file in ogg_dosyalari[:1]:\n    print(input_file)\n    audio = AudioSegment.from_file(input_file, format=\"ogg\")\n    segment_length_ms = 5000  # 5 saniye (5000 milisaniye)\n    num_segments = math.ceil(len(audio) / segment_length_ms)-1\n    # Dosyanın uzantısız adını al\n    file_name = input_file.replace('.ogg','')\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        # 'label' özelliklerine göre alfabetik sıraya göre alt listeyi sıralama\n        sorted_sublist = sorted(predict, key=lambda x: x['label'])\n        scores = [item['score'] for item in sorted_sublist]\n        # Listeyi numpy array'e dönüştürelim\n        my_array = np.array(scores, dtype=np.float32)\n        # Şimdi array'in boyutunu değiştirelim\n        reshaped_array = my_array.reshape(1, 182)\n        preds = np.concatenate([preds, reshaped_array], axis=0)\n        id = f\"{file_name}_{end_time // 1000}\"\n        ids.append(id),\n    num_files -= 1 \n    print(f\"{num_files} file left.\")","metadata":{"execution":{"iopub.status.busy":"2024-05-13T08:04:34.898458Z","iopub.execute_input":"2024-05-13T08:04:34.899166Z","iopub.status.idle":"2024-05-13T08:10:45.380386Z","shell.execute_reply.started":"2024-05-13T08:04:34.899130Z","shell.execute_reply":"2024-05-13T08:10:45.378161Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"CLASSES = {\n    \"asbfly\": 0,\n    \"ashdro1\": 1,\n    \"ashpri1\": 2,\n    \"ashwoo2\": 3,\n    \"asikoe2\": 4,\n    \"asiope1\": 5,\n    \"aspfly1\": 6,\n    \"aspswi1\": 7,\n    \"barfly1\": 8,\n    \"barswa\": 9,\n    \"bcnher\": 10,\n    \"bkcbul1\": 11,\n    \"bkrfla1\": 12,\n    \"bkskit1\": 13,\n    \"bkwsti\": 14,\n    \"bladro1\": 15,\n    \"blaeag1\": 16,\n    \"blakit1\": 17,\n    \"blhori1\": 18,\n    \"blnmon1\": 19,\n    \"blrwar1\": 20,\n    \"bncwoo3\": 21,\n    \"brakit1\": 22,\n    \"brasta1\": 23,\n    \"brcful1\": 24,\n    \"brfowl1\": 25,\n    \"brnhao1\": 26,\n    \"brnshr\": 27,\n    \"brodro1\": 28,\n    \"brwjac1\": 29,\n    \"brwowl1\": 30,\n    \"btbeat1\": 31,\n    \"bwfshr1\": 32,\n    \"categr\": 33,\n    \"chbeat1\": 34,\n    \"cohcuc1\": 35,\n    \"comfla1\": 36,\n    \"comgre\": 37,\n    \"comior1\": 38,\n    \"comkin1\": 39,\n    \"commoo3\": 40,\n    \"commyn\": 41,\n    \"compea\": 42,\n    \"comros\": 43,\n    \"comsan\": 44,\n    \"comtai1\": 45,\n    \"copbar1\": 46,\n    \"crbsun2\": 47,\n    \"cregos1\": 48,\n    \"crfbar1\": 49,\n    \"crseag1\": 50,\n    \"dafbab1\": 51,\n    \"darter2\": 52,\n    \"eaywag1\": 53,\n    \"emedov2\": 54,\n    \"eucdov\": 55,\n    \"eurbla2\": 56,\n    \"eurcoo\": 57,\n    \"forwag1\": 58,\n    \"gargan\": 59,\n    \"gloibi\": 60,\n    \"goflea1\": 61,\n    \"graher1\": 62,\n    \"grbeat1\": 63,\n    \"grecou1\": 64,\n    \"greegr\": 65,\n    \"grefla1\": 66,\n    \"grehor1\": 67,\n    \"grejun2\": 68,\n    \"grenig1\": 69,\n    \"grewar3\": 70,\n    \"grnsan\": 71,\n    \"grnwar1\": 72,\n    \"grtdro1\": 73,\n    \"gryfra\": 74,\n    \"grynig2\": 75,\n    \"grywag\": 76,\n    \"gybpri1\": 77,\n    \"gyhcaf1\": 78,\n    \"heswoo1\": 79,\n    \"hoopoe\": 80,\n    \"houcro1\": 81,\n    \"houspa\": 82,\n    \"inbrob1\": 83,\n    \"indpit1\": 84,\n    \"indrob1\": 85,\n    \"indrol2\": 86,\n    \"indtit1\": 87,\n    \"ingori1\": 88,\n    \"inpher1\": 89,\n    \"insbab1\": 90,\n    \"insowl1\": 91,\n    \"integr\": 92,\n    \"isbduc1\": 93,\n    \"jerbus2\": 94,\n    \"junbab2\": 95,\n    \"junmyn1\": 96,\n    \"junowl1\": 97,\n    \"kenplo1\": 98,\n    \"kerlau2\": 99,\n    \"labcro1\": 100,\n    \"laudov1\": 101,\n    \"lblwar1\": 102,\n    \"lesyel1\": 103,\n    \"lewduc1\": 104,\n    \"lirplo\": 105,\n    \"litegr\": 106,\n    \"litgre1\": 107,\n    \"litspi1\": 108,\n    \"litswi1\": 109,\n    \"lobsun2\": 110,\n    \"maghor2\": 111,\n    \"malpar1\": 112,\n    \"maltro1\": 113,\n    \"malwoo1\": 114,\n    \"marsan\": 115,\n    \"mawthr1\": 116,\n    \"moipig1\": 117,\n    \"nilfly2\": 118,\n    \"niwpig1\": 119,\n    \"nutman\": 120,\n    \"orihob2\": 121,\n    \"oripip1\": 122,\n    \"pabflo1\": 123,\n    \"paisto1\": 124,\n    \"piebus1\": 125,\n    \"piekin1\": 126,\n    \"placuc3\": 127,\n    \"plaflo1\": 128,\n    \"plapri1\": 129,\n    \"plhpar1\": 130,\n    \"pomgrp2\": 131,\n    \"purher1\": 132,\n    \"pursun3\": 133,\n    \"pursun4\": 134,\n    \"purswa3\": 135,\n    \"putbab1\": 136,\n    \"redspu1\": 137,\n    \"rerswa1\": 138,\n    \"revbul\": 139,\n    \"rewbul\": 140,\n    \"rewlap1\": 141,\n    \"rocpig\": 142,\n    \"rorpar\": 143,\n    \"rossta2\": 144,\n    \"rufbab3\": 145,\n    \"ruftre2\": 146,\n    \"rufwoo2\": 147,\n    \"rutfly6\": 148,\n    \"sbeowl1\": 149,\n    \"scamin3\": 150,\n    \"shikra1\": 151,\n    \"smamin1\": 152,\n    \"sohmyn1\": 153,\n    \"spepic1\": 154,\n    \"spodov\": 155,\n    \"spoowl1\": 156,\n    \"sqtbul1\": 157,\n    \"stbkin1\": 158,\n    \"sttwoo1\": 159,\n    \"thbwar1\": 160,\n    \"tibfly3\": 161,\n    \"tilwar1\": 162,\n    \"vefnut1\": 163,\n    \"vehpar1\": 164,\n    \"wbbfly1\": 165,\n    \"wemhar1\": 166,\n    \"whbbul2\": 167,\n    \"whbsho3\": 168,\n    \"whbtre1\": 169,\n    \"whbwag1\": 170,\n    \"whbwat1\": 171,\n    \"whbwoo2\": 172,\n    \"whcbar1\": 173,\n    \"whiter2\": 174,\n    \"whrmun\": 175,\n    \"whtkin2\": 176,\n    \"woosan\": 177,\n    \"wynlau1\": 178,\n    \"yebbab1\": 179,\n    \"yebbul3\": 180,\n    \"zitcis1\": 181,\n}","metadata":{"execution":{"iopub.status.busy":"2024-05-13T07:55:36.624403Z","iopub.execute_input":"2024-05-13T07:55:36.624778Z","iopub.status.idle":"2024-05-13T07:55:36.649858Z","shell.execute_reply.started":"2024-05-13T07:55:36.624748Z","shell.execute_reply":"2024-05-13T07:55:36.648767Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pred_df = pd.DataFrame(ids, columns=['row_id'])\npred_df.loc[:, CLASSES.keys()] = preds\npred_df.to_csv('submission.csv',index=False)\npred_df.head()","metadata":{"execution":{"iopub.status.busy":"2024-05-13T07:55:41.475393Z","iopub.execute_input":"2024-05-13T07:55:41.476273Z","iopub.status.idle":"2024-05-13T07:55:41.701351Z","shell.execute_reply.started":"2024-05-13T07:55:41.476223Z","shell.execute_reply":"2024-05-13T07:55:41.700062Z"},"trusted":true},"execution_count":null,"outputs":[]}]}