{"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"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":70203,"databundleVersionId":8068726,"sourceType":"competition"}],"dockerImageVersionId":30684,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import librosa\nimport matplotlib.cm as cm\nfrom PIL import Image, ImageOps\nimport os\nfrom pkg_resources import parse_version\nimport numpy as np\n\n# Check PIL version for ANTIALIAS\nfrom PIL import Image as pil\nif parse_version(pil.__version__) >= parse_version('10.0.0'):\n    antialias_method = Image.LANCZOS\nelse:\n    antialias_method = Image.ANTIALIAS\n\nbase_folder = '/kaggle/input/birdclef-2024/train_audio/'\noutput_folder = '/kaggle/working/'\n\n# Create the main directory for new train images if it does not exist\nif not os.path.exists(output_folder):\n    os.makedirs(output_folder)\n\nfor dir_name in os.listdir(base_folder):\n    dir_path = os.path.join(base_folder, dir_name)\n    output_dir_path = os.path.join(output_folder, dir_name)\n    \n    # Create a sub-directory in train_images_new for each directory in train_audio\n    if not os.path.exists(output_dir_path):\n        os.makedirs(output_dir_path)\n    \n    for file in os.listdir(dir_path):\n        file_path = os.path.join(dir_path, file)\n        \n        # Load audio file\n        audio, sr = librosa.load(file_path)\n        duration = librosa.get_duration(path=file_path)\n        \n        for i in range(int(duration // 5)):\n            audio_segment = audio[i*sr:(i+5)*sr]\n            \n            # Extract Mel Spectrogram features\n            S = librosa.feature.melspectrogram(y=audio_segment, sr=sr)\n            log_S = librosa.power_to_db(S, ref=np.max)\n            log_S = (log_S - log_S.min()) / (log_S.max() - log_S.min())\n\n            spectrogram_image = cm.magma(log_S)[:, :, :3]\n            spectrogram_image = (spectrogram_image * 255).astype(np.uint8)\n            spectrogram_image = Image.fromarray(spectrogram_image)\n            spectrogram_image = spectrogram_image.resize((224, 224), antialias_method)\n            spectrogram_image = ImageOps.flip(spectrogram_image)\n            \n            image_name = f\"{file.replace('.ogg', '')}_{i+1}.png\"\n            path_to_save = os.path.join(output_dir_path, image_name)\n            \n            # Save the image\n            spectrogram_image.save(path_to_save)\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]}]}