File size: 58,627 Bytes
4a27d1a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "8973fb4b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com, https://download.pytorch.org/whl/cu113\n",
      "Requirement already satisfied: torch in /opt/conda/lib/python3.8/site-packages (1.11.0)\n",
      "Requirement already satisfied: torchvision in /opt/conda/lib/python3.8/site-packages (0.12.0a0)\n",
      "Requirement already satisfied: torchaudio in /opt/conda/lib/python3.8/site-packages (0.11.0)\n",
      "Requirement already satisfied: typing-extensions in /opt/conda/lib/python3.8/site-packages (from torch) (4.0.1)\n",
      "Collecting torchvision\n",
      "  Downloading https://download.pytorch.org/whl/cu113/torchvision-0.12.0%2Bcu113-cp38-cp38-linux_x86_64.whl (22.3 MB)\n",
      "\u001b[K     |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 22.3 MB 1.3 MB/s eta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: pillow!=8.3.*,>=5.3.0 in /opt/conda/lib/python3.8/site-packages (from torchvision) (9.0.0)\n",
      "Requirement already satisfied: numpy in /opt/conda/lib/python3.8/site-packages (from torchvision) (1.22.2)\n",
      "Requirement already satisfied: requests in /opt/conda/lib/python3.8/site-packages (from torchvision) (2.26.0)\n",
      "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.8/site-packages (from requests->torchvision) (3.1)\n",
      "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /opt/conda/lib/python3.8/site-packages (from requests->torchvision) (1.26.7)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.8/site-packages (from requests->torchvision) (2021.10.8)\n",
      "Requirement already satisfied: charset-normalizer~=2.0.0 in /opt/conda/lib/python3.8/site-packages (from requests->torchvision) (2.0.9)\n",
      "Installing collected packages: torchvision\n",
      "  Attempting uninstall: torchvision\n",
      "    Found existing installation: torchvision 0.12.0a0\n",
      "    Uninstalling torchvision-0.12.0a0:\n",
      "      Successfully uninstalled torchvision-0.12.0a0\n",
      "Successfully installed torchvision-0.12.0+cu113\n",
      "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\n"
     ]
    }
   ],
   "source": [
    "! pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "bf7451ce",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com\n",
      "Requirement already satisfied: torchvision in /opt/conda/lib/python3.8/site-packages (0.12.0+cu113)\n",
      "Requirement already satisfied: torch==1.11.0 in /opt/conda/lib/python3.8/site-packages (from torchvision) (1.11.0)\n",
      "Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /opt/conda/lib/python3.8/site-packages (from torchvision) (9.0.0)\n",
      "Requirement already satisfied: typing-extensions in /opt/conda/lib/python3.8/site-packages (from torchvision) (4.0.1)\n",
      "Requirement already satisfied: numpy in /opt/conda/lib/python3.8/site-packages (from torchvision) (1.22.2)\n",
      "Requirement already satisfied: requests in /opt/conda/lib/python3.8/site-packages (from torchvision) (2.26.0)\n",
      "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /opt/conda/lib/python3.8/site-packages (from requests->torchvision) (1.26.7)\n",
      "Requirement already satisfied: charset-normalizer~=2.0.0 in /opt/conda/lib/python3.8/site-packages (from requests->torchvision) (2.0.9)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.8/site-packages (from requests->torchvision) (2021.10.8)\n",
      "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.8/site-packages (from requests->torchvision) (3.1)\n",
      "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\n"
     ]
    }
   ],
   "source": [
    "! pip install torchvision"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "90037405",
   "metadata": {},
   "outputs": [],
   "source": [
    "import gradio\n",
    "import torchaudio\n",
    "from fastai.vision.all import *\n",
    "from fastai.learner import load_learner\n",
    "from torchvision.utils import save_image\n",
    "from huggingface_hub import hf_hub_download"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "cf93c763",
   "metadata": {},
   "outputs": [],
   "source": [
    "base_folder = Path(\"../input/kaggle-pog-series-s01e02\")\n",
    "\n",
    "items = get_files(base_folder, extensions=\".ogg\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "93f3e24d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(#24985) [Path('../input/kaggle-pog-series-s01e02/test/000003.ogg'),Path('../input/kaggle-pog-series-s01e02/test/000006.ogg'),Path('../input/kaggle-pog-series-s01e02/test/000008.ogg'),Path('../input/kaggle-pog-series-s01e02/test/000011.ogg'),Path('../input/kaggle-pog-series-s01e02/test/000017.ogg'),Path('../input/kaggle-pog-series-s01e02/test/000023.ogg'),Path('../input/kaggle-pog-series-s01e02/test/000024.ogg'),Path('../input/kaggle-pog-series-s01e02/test/000031.ogg'),Path('../input/kaggle-pog-series-s01e02/test/000032.ogg'),Path('../input/kaggle-pog-series-s01e02/test/000036.ogg')...]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "items"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "13c68e01",
   "metadata": {},
   "outputs": [],
   "source": [
    "N_FFT = 2048\n",
    "HOP_LEN = 1024\n",
    "\n",
    "\n",
    "def create_spectrogram(filename):\n",
    "    audio, sr = torchaudio.load(filename)\n",
    "    specgram = torchaudio.transforms.MelSpectrogram(\n",
    "        sample_rate=sr,\n",
    "        n_fft=N_FFT,\n",
    "        win_length=N_FFT,\n",
    "        hop_length=HOP_LEN,\n",
    "        center=True,\n",
    "        pad_mode=\"reflect\",\n",
    "        power=2.0,\n",
    "        norm=\"slaney\",\n",
    "        onesided=True,\n",
    "        n_mels=224,\n",
    "        mel_scale=\"htk\",\n",
    "    )(audio).mean(axis=0)\n",
    "    specgram = torchaudio.transforms.AmplitudeToDB()(specgram)\n",
    "    specgram = specgram - specgram.min()\n",
    "    specgram = specgram / specgram.max()\n",
    "\n",
    "    return specgram"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "630a2a63",
   "metadata": {},
   "outputs": [],
   "source": [
    "filename = items[2]\n",
    "spec_default = create_spectrogram(filename)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "bd857529",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Path('../input/kaggle-pog-series-s01e02/test/000008.ogg')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "filename"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "1eae215f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fc61efe0550>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(spec_default)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "5a0afd6f",
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_image(filename):\n",
    "    specgram = create_spectrogram(filename)\n",
    "    dest = Path(\"input/temp.png\")\n",
    "    save_image(specgram, \"temp.png\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "c52d69d2",
   "metadata": {},
   "outputs": [],
   "source": [
    "create_image(filename)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "ad35918d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PytorchAudioInference.ipynb  music-genre-spectrogram-pogchamps\t      temp.png\n",
      "kaggle-pog-series-s01e02     music-genre-torch-melspec-generator.log\n"
     ]
    }
   ],
   "source": [
    "! ls"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "daf3215e",
   "metadata": {},
   "outputs": [],
   "source": [
    "learn = load_learner(\"music-genre-spectrogram-pogchamps/spectograms/model.pkl\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "c990969f",
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = learn.dls.vocab"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "ebfefcd3",
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict(img):\n",
    "    img = PILImage.create(img)\n",
    "    _pred, _pred_w_idx, probs = learn.predict(img)\n",
    "    labels_probs = {labels[i]: float(probs[i]) for i, _ in enumerate(labels)}\n",
    "    return labels_probs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "11b17142",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       "    /* Turns off some styling */\n",
       "    progress {\n",
       "        /* gets rid of default border in Firefox and Opera. */\n",
       "        border: none;\n",
       "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "        background-size: auto;\n",
       "    }\n",
       "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "        background: #F44336;\n",
       "    }\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "{'Ambient Electronic': 0.018784182146191597,\n",
       " 'Blues': 0.001689370721578598,\n",
       " 'Chiptune / Glitch': 0.009157774038612843,\n",
       " 'Classical': 0.0018330742605030537,\n",
       " 'Country': 0.015161271207034588,\n",
       " 'Easy Listening': 0.000761857838369906,\n",
       " 'Electronic': 0.043093256652355194,\n",
       " 'Experimental': 0.01893473044037819,\n",
       " 'Folk': 0.03622647374868393,\n",
       " 'Hip-Hop': 0.012909098528325558,\n",
       " 'Instrumental': 0.03738876059651375,\n",
       " 'International': 0.007503754459321499,\n",
       " 'Jazz': 0.002992472844198346,\n",
       " 'Old-Time / Historic': 0.0014046949800103903,\n",
       " 'Pop': 0.14049866795539856,\n",
       " 'Punk': 0.1848350614309311,\n",
       " 'Rock': 0.4632216989994049,\n",
       " 'Soul-RnB': 0.002242171438410878,\n",
       " 'Spoken': 0.0013616250362247229}"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predict(\"temp.png\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "63aa6dd6",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}