{
  "id": 309365,
  "title": "Test data pre convert method in inference",
  "url": "/competitions/birdclef-2022/discussion/309365",
  "author_name": "imori",
  "post_date": "2022-02-23T05:10:28.801000",
  "votes": 6,
  "comment_count": 0,
  "views": 0,
  "content": "<p>This is method to convert test audio file to npy.</p>\n<p>You can load npy in inference. This may help the case using many models infernece like ensemble.</p>\n<p>Below is clipping 5 seconds for prediction interval.</p>\n<pre><code># Preconvert data\n\nTEST_DIR = './test_imgs'\nSR = 32_000\nDURATION = 5\nSEQLEN = SR * DURATION\n\nos.makedirs(TEST_DIR, exist_ok=True)\n\ntest_audios = pathlib.Path('../input/birdclef-2022/test_soundscapes')).glob('*.ogg')\n\ntest_fnames = []\n\ndef convert_audio(audio_name):\n    ogg_fpath = os.path.join('../input/birdclef-2022/test_soundscapes', audio_name)\n\n    if not os.path.exists(ogg_fpath):\n        return []\n\n    audio, _ = librosa.load(ogg_fpath, sr=SR)\n\n    new_names = []\n\n    for start in range(0, len(audio), 5 * SR):\n        end = start + SEQLEN\n\n        if start &gt;= 60 * SR:\n            break\n\n        crop = audio[start : end].copy()\n\n        # padding 0\n        if len(crop) &lt; SEQLEN:\n            crop = np.concatenate([crop, np.zeros(SEQLEN - len(crop))])\n\n        mel = librosa.feature.melspectrogram(y=crop, sr=SR)\n        mel = librosa.power_to_db(mel)\n        x = mono_to_color(mel)\n\n        fname = audio_name.replace('.ogg', '') + f'_{start // SR + 5}'\n        np.save(os.path.join(TEST_DIR, fname + '.npy'), x)\n\n        new_names.append(fname)\n\n    return new_names\n\n\nresult = joblib.Parallel(n_jobs=-1, verbose=1)(joblib.delayed(convert_audio)(test_audio.name) for test_audio in test_audios)\n\ntest_fnames = np.concatenate(result)\n</code></pre>\n<p>Result npy file example</p>\n<h2>var test_fnames</h2>\n<pre><code>soundscape_453028782_5\nsoundscape_453028782_10\nsoundscape_453028782_15\nsoundscape_453028782_20\nsoundscape_453028782_25\n</code></pre>\n<h2>directory test_imgs</h2>\n<pre><code>soundscape_453028782_5.npy\nsoundscape_453028782_10.npy\nsoundscape_453028782_15.npy\nsoundscape_453028782_20.npy\nsoundscape_453028782_25.npy\n</code></pre>",
  "messages": [
    {
      "id": 1701834,
      "postDate": "2022-02-23T05:10:28.803Z",
      "content": "<p>This is method to convert test audio file to npy.</p>\n<p>You can load npy in inference. This may help the case using many models infernece like ensemble.</p>\n<p>Below is clipping 5 seconds for prediction interval.</p>\n<pre><code># Preconvert data\n\nTEST_DIR = './test_imgs'\nSR = 32_000\nDURATION = 5\nSEQLEN = SR * DURATION\n\nos.makedirs(TEST_DIR, exist_ok=True)\n\ntest_audios = pathlib.Path('../input/birdclef-2022/test_soundscapes')).glob('*.ogg')\n\ntest_fnames = []\n\ndef convert_audio(audio_name):\n    ogg_fpath = os.path.join('../input/birdclef-2022/test_soundscapes', audio_name)\n\n    if not os.path.exists(ogg_fpath):\n        return []\n\n    audio, _ = librosa.load(ogg_fpath, sr=SR)\n\n    new_names = []\n\n    for start in range(0, len(audio), 5 * SR):\n        end = start + SEQLEN\n\n        if start &gt;= 60 * SR:\n            break\n\n        crop = audio[start : end].copy()\n\n        # padding 0\n        if len(crop) &lt; SEQLEN:\n            crop = np.concatenate([crop, np.zeros(SEQLEN - len(crop))])\n\n        mel = librosa.feature.melspectrogram(y=crop, sr=SR)\n        mel = librosa.power_to_db(mel)\n        x = mono_to_color(mel)\n\n        fname = audio_name.replace('.ogg', '') + f'_{start // SR + 5}'\n        np.save(os.path.join(TEST_DIR, fname + '.npy'), x)\n\n        new_names.append(fname)\n\n    return new_names\n\n\nresult = joblib.Parallel(n_jobs=-1, verbose=1)(joblib.delayed(convert_audio)(test_audio.name) for test_audio in test_audios)\n\ntest_fnames = np.concatenate(result)\n</code></pre>\n<p>Result npy file example</p>\n<h2>var test_fnames</h2>\n<pre><code>soundscape_453028782_5\nsoundscape_453028782_10\nsoundscape_453028782_15\nsoundscape_453028782_20\nsoundscape_453028782_25\n</code></pre>\n<h2>directory test_imgs</h2>\n<pre><code>soundscape_453028782_5.npy\nsoundscape_453028782_10.npy\nsoundscape_453028782_15.npy\nsoundscape_453028782_20.npy\nsoundscape_453028782_25.npy\n</code></pre>",
      "rawMarkdown": "This is method to convert test audio file to npy.\n\nYou can load npy in inference. This may help the case using many models infernece like ensemble.\n\nBelow is clipping 5 seconds for prediction interval.\n\n\n```\n# Preconvert data\n\nTEST_DIR = './test_imgs'\nSR = 32_000\nDURATION = 5\nSEQLEN = SR * DURATION\n\nos.makedirs(TEST_DIR, exist_ok=True)\n\ntest_audios = pathlib.Path('../input/birdclef-2022/test_soundscapes')).glob('*.ogg')\n\ntest_fnames = []\n\ndef convert_audio(audio_name):\n    ogg_fpath = os.path.join('../input/birdclef-2022/test_soundscapes', audio_name)\n    \n    if not os.path.exists(ogg_fpath):\n        return []\n    \n    audio, _ = librosa.load(ogg_fpath, sr=SR)\n    \n    new_names = []\n        \n    for start in range(0, len(audio), 5 * SR):\n        end = start + SEQLEN\n        \n        if start >= 60 * SR:\n            break\n        \n        crop = audio[start : end].copy()\n\n        # padding 0\n        if len(crop) < SEQLEN:\n            crop = np.concatenate([crop, np.zeros(SEQLEN - len(crop))])\n\n        mel = librosa.feature.melspectrogram(y=crop, sr=SR)\n        mel = librosa.power_to_db(mel)\n        x = mono_to_color(mel)\n\n        fname = audio_name.replace('.ogg', '') + f'_{start // SR + 5}'\n        np.save(os.path.join(TEST_DIR, fname + '.npy'), x)\n        \n        new_names.append(fname)\n        \n    return new_names\n\n\nresult = joblib.Parallel(n_jobs=-1, verbose=1)(joblib.delayed(convert_audio)(test_audio.name) for test_audio in test_audios)\n\ntest_fnames = np.concatenate(result)\n```\n\n\nResult npy file example\n\n## var test_fnames\n\n```\nsoundscape_453028782_5\nsoundscape_453028782_10\nsoundscape_453028782_15\nsoundscape_453028782_20\nsoundscape_453028782_25\n```\n\n## directory test_imgs\n\n```\nsoundscape_453028782_5.npy\nsoundscape_453028782_10.npy\nsoundscape_453028782_15.npy\nsoundscape_453028782_20.npy\nsoundscape_453028782_25.npy\n```",
      "votes": 6
    }
  ],
  "comments": [],
  "raw_markdown_by_id": {
    "1701834": "This is method to convert test audio file to npy.\n\nYou can load npy in inference. This may help the case using many models infernece like ensemble.\n\nBelow is clipping 5 seconds for prediction interval.\n\n\n```\n# Preconvert data\n\nTEST_DIR = './test_imgs'\nSR = 32_000\nDURATION = 5\nSEQLEN = SR * DURATION\n\nos.makedirs(TEST_DIR, exist_ok=True)\n\ntest_audios = pathlib.Path('../input/birdclef-2022/test_soundscapes')).glob('*.ogg')\n\ntest_fnames = []\n\ndef convert_audio(audio_name):\n    ogg_fpath = os.path.join('../input/birdclef-2022/test_soundscapes', audio_name)\n    \n    if not os.path.exists(ogg_fpath):\n        return []\n    \n    audio, _ = librosa.load(ogg_fpath, sr=SR)\n    \n    new_names = []\n        \n    for start in range(0, len(audio), 5 * SR):\n        end = start + SEQLEN\n        \n        if start >= 60 * SR:\n            break\n        \n        crop = audio[start : end].copy()\n\n        # padding 0\n        if len(crop) < SEQLEN:\n            crop = np.concatenate([crop, np.zeros(SEQLEN - len(crop))])\n\n        mel = librosa.feature.melspectrogram(y=crop, sr=SR)\n        mel = librosa.power_to_db(mel)\n        x = mono_to_color(mel)\n\n        fname = audio_name.replace('.ogg', '') + f'_{start // SR + 5}'\n        np.save(os.path.join(TEST_DIR, fname + '.npy'), x)\n        \n        new_names.append(fname)\n        \n    return new_names\n\n\nresult = joblib.Parallel(n_jobs=-1, verbose=1)(joblib.delayed(convert_audio)(test_audio.name) for test_audio in test_audios)\n\ntest_fnames = np.concatenate(result)\n```\n\n\nResult npy file example\n\n## var test_fnames\n\n```\nsoundscape_453028782_5\nsoundscape_453028782_10\nsoundscape_453028782_15\nsoundscape_453028782_20\nsoundscape_453028782_25\n```\n\n## directory test_imgs\n\n```\nsoundscape_453028782_5.npy\nsoundscape_453028782_10.npy\nsoundscape_453028782_15.npy\nsoundscape_453028782_20.npy\nsoundscape_453028782_25.npy\n```"
  }
}