Spaces:
Runtime error
Runtime error
Upload 3 files
Browse files
nbs/nbs_AudioCNNDemo.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|
nbs/nbs_AudioClassificationgradio.ipynb
ADDED
@@ -0,0 +1,682 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"nbformat": 4,
|
3 |
+
"nbformat_minor": 0,
|
4 |
+
"metadata": {
|
5 |
+
"colab": {
|
6 |
+
"name": "AudioClassificationgradio.ipynb",
|
7 |
+
"provenance": [],
|
8 |
+
"collapsed_sections": []
|
9 |
+
},
|
10 |
+
"kernelspec": {
|
11 |
+
"name": "python3",
|
12 |
+
"display_name": "Python 3"
|
13 |
+
},
|
14 |
+
"language_info": {
|
15 |
+
"name": "python"
|
16 |
+
},
|
17 |
+
"widgets": {
|
18 |
+
"application/vnd.jupyter.widget-state+json": {
|
19 |
+
"8e25e79ba0c34ac2a39504d2bdb23a44": {
|
20 |
+
"model_module": "@jupyter-widgets/controls",
|
21 |
+
"model_name": "HBoxModel",
|
22 |
+
"model_module_version": "1.5.0",
|
23 |
+
"state": {
|
24 |
+
"_dom_classes": [],
|
25 |
+
"_model_module": "@jupyter-widgets/controls",
|
26 |
+
"_model_module_version": "1.5.0",
|
27 |
+
"_model_name": "HBoxModel",
|
28 |
+
"_view_count": null,
|
29 |
+
"_view_module": "@jupyter-widgets/controls",
|
30 |
+
"_view_module_version": "1.5.0",
|
31 |
+
"_view_name": "HBoxView",
|
32 |
+
"box_style": "",
|
33 |
+
"children": [
|
34 |
+
"IPY_MODEL_c326c94972544c0cafd0aec1424d3d66",
|
35 |
+
"IPY_MODEL_a5ded79eb6274a2693d4f6f46dbdaae6",
|
36 |
+
"IPY_MODEL_9165407f88a44866a6372082c5a1bdd1"
|
37 |
+
],
|
38 |
+
"layout": "IPY_MODEL_cd13120cc6f345ff958b3438a51d9caf"
|
39 |
+
}
|
40 |
+
},
|
41 |
+
"c326c94972544c0cafd0aec1424d3d66": {
|
42 |
+
"model_module": "@jupyter-widgets/controls",
|
43 |
+
"model_name": "HTMLModel",
|
44 |
+
"model_module_version": "1.5.0",
|
45 |
+
"state": {
|
46 |
+
"_dom_classes": [],
|
47 |
+
"_model_module": "@jupyter-widgets/controls",
|
48 |
+
"_model_module_version": "1.5.0",
|
49 |
+
"_model_name": "HTMLModel",
|
50 |
+
"_view_count": null,
|
51 |
+
"_view_module": "@jupyter-widgets/controls",
|
52 |
+
"_view_module_version": "1.5.0",
|
53 |
+
"_view_name": "HTMLView",
|
54 |
+
"description": "",
|
55 |
+
"description_tooltip": null,
|
56 |
+
"layout": "IPY_MODEL_358da8bada514630b9078cd49fb2b2dc",
|
57 |
+
"placeholder": "",
|
58 |
+
"style": "IPY_MODEL_53a416f6a7e9499ea6a88e44f2087c0d",
|
59 |
+
"value": "Downloading: 100%"
|
60 |
+
}
|
61 |
+
},
|
62 |
+
"a5ded79eb6274a2693d4f6f46dbdaae6": {
|
63 |
+
"model_module": "@jupyter-widgets/controls",
|
64 |
+
"model_name": "FloatProgressModel",
|
65 |
+
"model_module_version": "1.5.0",
|
66 |
+
"state": {
|
67 |
+
"_dom_classes": [],
|
68 |
+
"_model_module": "@jupyter-widgets/controls",
|
69 |
+
"_model_module_version": "1.5.0",
|
70 |
+
"_model_name": "FloatProgressModel",
|
71 |
+
"_view_count": null,
|
72 |
+
"_view_module": "@jupyter-widgets/controls",
|
73 |
+
"_view_module_version": "1.5.0",
|
74 |
+
"_view_name": "ProgressView",
|
75 |
+
"bar_style": "success",
|
76 |
+
"description": "",
|
77 |
+
"description_tooltip": null,
|
78 |
+
"layout": "IPY_MODEL_74ce31440c4c497cb1ff10748a39c9e0",
|
79 |
+
"max": 103192469,
|
80 |
+
"min": 0,
|
81 |
+
"orientation": "horizontal",
|
82 |
+
"style": "IPY_MODEL_908199f1d2244909bd58c3bc46e6a47f",
|
83 |
+
"value": 103192469
|
84 |
+
}
|
85 |
+
},
|
86 |
+
"9165407f88a44866a6372082c5a1bdd1": {
|
87 |
+
"model_module": "@jupyter-widgets/controls",
|
88 |
+
"model_name": "HTMLModel",
|
89 |
+
"model_module_version": "1.5.0",
|
90 |
+
"state": {
|
91 |
+
"_dom_classes": [],
|
92 |
+
"_model_module": "@jupyter-widgets/controls",
|
93 |
+
"_model_module_version": "1.5.0",
|
94 |
+
"_model_name": "HTMLModel",
|
95 |
+
"_view_count": null,
|
96 |
+
"_view_module": "@jupyter-widgets/controls",
|
97 |
+
"_view_module_version": "1.5.0",
|
98 |
+
"_view_name": "HTMLView",
|
99 |
+
"description": "",
|
100 |
+
"description_tooltip": null,
|
101 |
+
"layout": "IPY_MODEL_3efa06b0aafd4f2ea01ebfc0a7d6abe6",
|
102 |
+
"placeholder": "",
|
103 |
+
"style": "IPY_MODEL_10ed9d0b19814111b80a281ea80f60d9",
|
104 |
+
"value": " 103M/103M [00:02<00:00, 51.8MB/s]"
|
105 |
+
}
|
106 |
+
},
|
107 |
+
"cd13120cc6f345ff958b3438a51d9caf": {
|
108 |
+
"model_module": "@jupyter-widgets/base",
|
109 |
+
"model_name": "LayoutModel",
|
110 |
+
"model_module_version": "1.2.0",
|
111 |
+
"state": {
|
112 |
+
"_model_module": "@jupyter-widgets/base",
|
113 |
+
"_model_module_version": "1.2.0",
|
114 |
+
"_model_name": "LayoutModel",
|
115 |
+
"_view_count": null,
|
116 |
+
"_view_module": "@jupyter-widgets/base",
|
117 |
+
"_view_module_version": "1.2.0",
|
118 |
+
"_view_name": "LayoutView",
|
119 |
+
"align_content": null,
|
120 |
+
"align_items": null,
|
121 |
+
"align_self": null,
|
122 |
+
"border": null,
|
123 |
+
"bottom": null,
|
124 |
+
"display": null,
|
125 |
+
"flex": null,
|
126 |
+
"flex_flow": null,
|
127 |
+
"grid_area": null,
|
128 |
+
"grid_auto_columns": null,
|
129 |
+
"grid_auto_flow": null,
|
130 |
+
"grid_auto_rows": null,
|
131 |
+
"grid_column": null,
|
132 |
+
"grid_gap": null,
|
133 |
+
"grid_row": null,
|
134 |
+
"grid_template_areas": null,
|
135 |
+
"grid_template_columns": null,
|
136 |
+
"grid_template_rows": null,
|
137 |
+
"height": null,
|
138 |
+
"justify_content": null,
|
139 |
+
"justify_items": null,
|
140 |
+
"left": null,
|
141 |
+
"margin": null,
|
142 |
+
"max_height": null,
|
143 |
+
"max_width": null,
|
144 |
+
"min_height": null,
|
145 |
+
"min_width": null,
|
146 |
+
"object_fit": null,
|
147 |
+
"object_position": null,
|
148 |
+
"order": null,
|
149 |
+
"overflow": null,
|
150 |
+
"overflow_x": null,
|
151 |
+
"overflow_y": null,
|
152 |
+
"padding": null,
|
153 |
+
"right": null,
|
154 |
+
"top": null,
|
155 |
+
"visibility": null,
|
156 |
+
"width": null
|
157 |
+
}
|
158 |
+
},
|
159 |
+
"358da8bada514630b9078cd49fb2b2dc": {
|
160 |
+
"model_module": "@jupyter-widgets/base",
|
161 |
+
"model_name": "LayoutModel",
|
162 |
+
"model_module_version": "1.2.0",
|
163 |
+
"state": {
|
164 |
+
"_model_module": "@jupyter-widgets/base",
|
165 |
+
"_model_module_version": "1.2.0",
|
166 |
+
"_model_name": "LayoutModel",
|
167 |
+
"_view_count": null,
|
168 |
+
"_view_module": "@jupyter-widgets/base",
|
169 |
+
"_view_module_version": "1.2.0",
|
170 |
+
"_view_name": "LayoutView",
|
171 |
+
"align_content": null,
|
172 |
+
"align_items": null,
|
173 |
+
"align_self": null,
|
174 |
+
"border": null,
|
175 |
+
"bottom": null,
|
176 |
+
"display": null,
|
177 |
+
"flex": null,
|
178 |
+
"flex_flow": null,
|
179 |
+
"grid_area": null,
|
180 |
+
"grid_auto_columns": null,
|
181 |
+
"grid_auto_flow": null,
|
182 |
+
"grid_auto_rows": null,
|
183 |
+
"grid_column": null,
|
184 |
+
"grid_gap": null,
|
185 |
+
"grid_row": null,
|
186 |
+
"grid_template_areas": null,
|
187 |
+
"grid_template_columns": null,
|
188 |
+
"grid_template_rows": null,
|
189 |
+
"height": null,
|
190 |
+
"justify_content": null,
|
191 |
+
"justify_items": null,
|
192 |
+
"left": null,
|
193 |
+
"margin": null,
|
194 |
+
"max_height": null,
|
195 |
+
"max_width": null,
|
196 |
+
"min_height": null,
|
197 |
+
"min_width": null,
|
198 |
+
"object_fit": null,
|
199 |
+
"object_position": null,
|
200 |
+
"order": null,
|
201 |
+
"overflow": null,
|
202 |
+
"overflow_x": null,
|
203 |
+
"overflow_y": null,
|
204 |
+
"padding": null,
|
205 |
+
"right": null,
|
206 |
+
"top": null,
|
207 |
+
"visibility": null,
|
208 |
+
"width": null
|
209 |
+
}
|
210 |
+
},
|
211 |
+
"53a416f6a7e9499ea6a88e44f2087c0d": {
|
212 |
+
"model_module": "@jupyter-widgets/controls",
|
213 |
+
"model_name": "DescriptionStyleModel",
|
214 |
+
"model_module_version": "1.5.0",
|
215 |
+
"state": {
|
216 |
+
"_model_module": "@jupyter-widgets/controls",
|
217 |
+
"_model_module_version": "1.5.0",
|
218 |
+
"_model_name": "DescriptionStyleModel",
|
219 |
+
"_view_count": null,
|
220 |
+
"_view_module": "@jupyter-widgets/base",
|
221 |
+
"_view_module_version": "1.2.0",
|
222 |
+
"_view_name": "StyleView",
|
223 |
+
"description_width": ""
|
224 |
+
}
|
225 |
+
},
|
226 |
+
"74ce31440c4c497cb1ff10748a39c9e0": {
|
227 |
+
"model_module": "@jupyter-widgets/base",
|
228 |
+
"model_name": "LayoutModel",
|
229 |
+
"model_module_version": "1.2.0",
|
230 |
+
"state": {
|
231 |
+
"_model_module": "@jupyter-widgets/base",
|
232 |
+
"_model_module_version": "1.2.0",
|
233 |
+
"_model_name": "LayoutModel",
|
234 |
+
"_view_count": null,
|
235 |
+
"_view_module": "@jupyter-widgets/base",
|
236 |
+
"_view_module_version": "1.2.0",
|
237 |
+
"_view_name": "LayoutView",
|
238 |
+
"align_content": null,
|
239 |
+
"align_items": null,
|
240 |
+
"align_self": null,
|
241 |
+
"border": null,
|
242 |
+
"bottom": null,
|
243 |
+
"display": null,
|
244 |
+
"flex": null,
|
245 |
+
"flex_flow": null,
|
246 |
+
"grid_area": null,
|
247 |
+
"grid_auto_columns": null,
|
248 |
+
"grid_auto_flow": null,
|
249 |
+
"grid_auto_rows": null,
|
250 |
+
"grid_column": null,
|
251 |
+
"grid_gap": null,
|
252 |
+
"grid_row": null,
|
253 |
+
"grid_template_areas": null,
|
254 |
+
"grid_template_columns": null,
|
255 |
+
"grid_template_rows": null,
|
256 |
+
"height": null,
|
257 |
+
"justify_content": null,
|
258 |
+
"justify_items": null,
|
259 |
+
"left": null,
|
260 |
+
"margin": null,
|
261 |
+
"max_height": null,
|
262 |
+
"max_width": null,
|
263 |
+
"min_height": null,
|
264 |
+
"min_width": null,
|
265 |
+
"object_fit": null,
|
266 |
+
"object_position": null,
|
267 |
+
"order": null,
|
268 |
+
"overflow": null,
|
269 |
+
"overflow_x": null,
|
270 |
+
"overflow_y": null,
|
271 |
+
"padding": null,
|
272 |
+
"right": null,
|
273 |
+
"top": null,
|
274 |
+
"visibility": null,
|
275 |
+
"width": null
|
276 |
+
}
|
277 |
+
},
|
278 |
+
"908199f1d2244909bd58c3bc46e6a47f": {
|
279 |
+
"model_module": "@jupyter-widgets/controls",
|
280 |
+
"model_name": "ProgressStyleModel",
|
281 |
+
"model_module_version": "1.5.0",
|
282 |
+
"state": {
|
283 |
+
"_model_module": "@jupyter-widgets/controls",
|
284 |
+
"_model_module_version": "1.5.0",
|
285 |
+
"_model_name": "ProgressStyleModel",
|
286 |
+
"_view_count": null,
|
287 |
+
"_view_module": "@jupyter-widgets/base",
|
288 |
+
"_view_module_version": "1.2.0",
|
289 |
+
"_view_name": "StyleView",
|
290 |
+
"bar_color": null,
|
291 |
+
"description_width": ""
|
292 |
+
}
|
293 |
+
},
|
294 |
+
"3efa06b0aafd4f2ea01ebfc0a7d6abe6": {
|
295 |
+
"model_module": "@jupyter-widgets/base",
|
296 |
+
"model_name": "LayoutModel",
|
297 |
+
"model_module_version": "1.2.0",
|
298 |
+
"state": {
|
299 |
+
"_model_module": "@jupyter-widgets/base",
|
300 |
+
"_model_module_version": "1.2.0",
|
301 |
+
"_model_name": "LayoutModel",
|
302 |
+
"_view_count": null,
|
303 |
+
"_view_module": "@jupyter-widgets/base",
|
304 |
+
"_view_module_version": "1.2.0",
|
305 |
+
"_view_name": "LayoutView",
|
306 |
+
"align_content": null,
|
307 |
+
"align_items": null,
|
308 |
+
"align_self": null,
|
309 |
+
"border": null,
|
310 |
+
"bottom": null,
|
311 |
+
"display": null,
|
312 |
+
"flex": null,
|
313 |
+
"flex_flow": null,
|
314 |
+
"grid_area": null,
|
315 |
+
"grid_auto_columns": null,
|
316 |
+
"grid_auto_flow": null,
|
317 |
+
"grid_auto_rows": null,
|
318 |
+
"grid_column": null,
|
319 |
+
"grid_gap": null,
|
320 |
+
"grid_row": null,
|
321 |
+
"grid_template_areas": null,
|
322 |
+
"grid_template_columns": null,
|
323 |
+
"grid_template_rows": null,
|
324 |
+
"height": null,
|
325 |
+
"justify_content": null,
|
326 |
+
"justify_items": null,
|
327 |
+
"left": null,
|
328 |
+
"margin": null,
|
329 |
+
"max_height": null,
|
330 |
+
"max_width": null,
|
331 |
+
"min_height": null,
|
332 |
+
"min_width": null,
|
333 |
+
"object_fit": null,
|
334 |
+
"object_position": null,
|
335 |
+
"order": null,
|
336 |
+
"overflow": null,
|
337 |
+
"overflow_x": null,
|
338 |
+
"overflow_y": null,
|
339 |
+
"padding": null,
|
340 |
+
"right": null,
|
341 |
+
"top": null,
|
342 |
+
"visibility": null,
|
343 |
+
"width": null
|
344 |
+
}
|
345 |
+
},
|
346 |
+
"10ed9d0b19814111b80a281ea80f60d9": {
|
347 |
+
"model_module": "@jupyter-widgets/controls",
|
348 |
+
"model_name": "DescriptionStyleModel",
|
349 |
+
"model_module_version": "1.5.0",
|
350 |
+
"state": {
|
351 |
+
"_model_module": "@jupyter-widgets/controls",
|
352 |
+
"_model_module_version": "1.5.0",
|
353 |
+
"_model_name": "DescriptionStyleModel",
|
354 |
+
"_view_count": null,
|
355 |
+
"_view_module": "@jupyter-widgets/base",
|
356 |
+
"_view_module_version": "1.2.0",
|
357 |
+
"_view_name": "StyleView",
|
358 |
+
"description_width": ""
|
359 |
+
}
|
360 |
+
}
|
361 |
+
}
|
362 |
+
}
|
363 |
+
},
|
364 |
+
"cells": [
|
365 |
+
{
|
366 |
+
"cell_type": "code",
|
367 |
+
"execution_count": 1,
|
368 |
+
"metadata": {
|
369 |
+
"colab": {
|
370 |
+
"base_uri": "https://localhost:8080/"
|
371 |
+
},
|
372 |
+
"id": "tj_BVh5omaoQ",
|
373 |
+
"outputId": "413b2cf4-f8da-4bb3-a0a3-1c58cd89cfa0"
|
374 |
+
},
|
375 |
+
"outputs": [
|
376 |
+
{
|
377 |
+
"output_type": "stream",
|
378 |
+
"name": "stdout",
|
379 |
+
"text": [
|
380 |
+
"\u001b[K |████████████████████████████████| 197 kB 24.3 MB/s \n",
|
381 |
+
"\u001b[K |████████████████████████████████| 2.9 MB 52.4 MB/s \n",
|
382 |
+
"\u001b[K |████████████████████████████████| 77 kB 5.4 MB/s \n",
|
383 |
+
"\u001b[K |████████████████████████████████| 60 kB 6.1 MB/s \n",
|
384 |
+
"\u001b[K |████████████████████████████████| 84 kB 3.1 MB/s \n",
|
385 |
+
"\u001b[K |████████████████████████████████| 54 kB 2.7 MB/s \n",
|
386 |
+
"\u001b[K |████████████████████████████████| 1.1 MB 40.9 MB/s \n",
|
387 |
+
"\u001b[K |████████████████████████████████| 2.0 MB 42.1 MB/s \n",
|
388 |
+
"\u001b[K |████████████████████████████████| 253 kB 54.9 MB/s \n",
|
389 |
+
"\u001b[K |████████████████████████████████| 53 kB 2.1 MB/s \n",
|
390 |
+
"\u001b[K |████████████████████████████████| 212 kB 44.2 MB/s \n",
|
391 |
+
"\u001b[K |████████████████████████████████| 271 kB 64.4 MB/s \n",
|
392 |
+
"\u001b[K |████████████████████████████████| 144 kB 45.5 MB/s \n",
|
393 |
+
"\u001b[K |████████████████████████████████| 94 kB 3.1 MB/s \n",
|
394 |
+
"\u001b[K |████████████████████████████████| 58 kB 6.2 MB/s \n",
|
395 |
+
"\u001b[K |████████████████████████████████| 10.9 MB 53.7 MB/s \n",
|
396 |
+
"\u001b[K |████████████████████████████████| 79 kB 7.1 MB/s \n",
|
397 |
+
"\u001b[K |████████████████████████████████| 43 kB 1.8 MB/s \n",
|
398 |
+
"\u001b[K |████████████████████████████████| 62 kB 953 kB/s \n",
|
399 |
+
"\u001b[K |████████████████████████████████| 856 kB 47.5 MB/s \n",
|
400 |
+
"\u001b[K |████████████████████████████████| 4.0 MB 58.7 MB/s \n",
|
401 |
+
"\u001b[K |████████████████████████████████| 58 kB 6.0 MB/s \n",
|
402 |
+
"\u001b[?25h Building wheel for ffmpy (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
|
403 |
+
" Building wheel for python-multipart (setup.py) ... \u001b[?25l\u001b[?25hdone\n"
|
404 |
+
]
|
405 |
+
}
|
406 |
+
],
|
407 |
+
"source": [
|
408 |
+
"! pip install -Uqq fastai gradio torchaudio torchvision huggingface_hub"
|
409 |
+
]
|
410 |
+
},
|
411 |
+
{
|
412 |
+
"cell_type": "code",
|
413 |
+
"source": [
|
414 |
+
"import gradio\n",
|
415 |
+
"import torchaudio\n",
|
416 |
+
"from fastai.vision.all import *\n",
|
417 |
+
"from fastai.learner import load_learner\n",
|
418 |
+
"from torchvision.utils import save_image\n",
|
419 |
+
"from huggingface_hub import hf_hub_download"
|
420 |
+
],
|
421 |
+
"metadata": {
|
422 |
+
"colab": {
|
423 |
+
"base_uri": "https://localhost:8080/"
|
424 |
+
},
|
425 |
+
"id": "xIM_o4w-ms2J",
|
426 |
+
"outputId": "936b730f-2d52-4cc2-fd7a-afbf86d05687"
|
427 |
+
},
|
428 |
+
"execution_count": 2,
|
429 |
+
"outputs": [
|
430 |
+
{
|
431 |
+
"output_type": "stream",
|
432 |
+
"name": "stderr",
|
433 |
+
"text": [
|
434 |
+
"/usr/local/lib/python3.7/dist-packages/paramiko/transport.py:236: CryptographyDeprecationWarning: Blowfish has been deprecated\n",
|
435 |
+
" \"class\": algorithms.Blowfish,\n"
|
436 |
+
]
|
437 |
+
}
|
438 |
+
]
|
439 |
+
},
|
440 |
+
{
|
441 |
+
"cell_type": "code",
|
442 |
+
"source": [
|
443 |
+
"model = load_learner(\n",
|
444 |
+
" hf_hub_download(\"kurianbenoy/music_genre_classification_baseline\", \"model.pkl\")\n",
|
445 |
+
")\n",
|
446 |
+
"\n",
|
447 |
+
"labels = model.dls.vocab"
|
448 |
+
],
|
449 |
+
"metadata": {
|
450 |
+
"colab": {
|
451 |
+
"base_uri": "https://localhost:8080/",
|
452 |
+
"height": 49,
|
453 |
+
"referenced_widgets": [
|
454 |
+
"8e25e79ba0c34ac2a39504d2bdb23a44",
|
455 |
+
"c326c94972544c0cafd0aec1424d3d66",
|
456 |
+
"a5ded79eb6274a2693d4f6f46dbdaae6",
|
457 |
+
"9165407f88a44866a6372082c5a1bdd1",
|
458 |
+
"cd13120cc6f345ff958b3438a51d9caf",
|
459 |
+
"358da8bada514630b9078cd49fb2b2dc",
|
460 |
+
"53a416f6a7e9499ea6a88e44f2087c0d",
|
461 |
+
"74ce31440c4c497cb1ff10748a39c9e0",
|
462 |
+
"908199f1d2244909bd58c3bc46e6a47f",
|
463 |
+
"3efa06b0aafd4f2ea01ebfc0a7d6abe6",
|
464 |
+
"10ed9d0b19814111b80a281ea80f60d9"
|
465 |
+
]
|
466 |
+
},
|
467 |
+
"id": "MJxNnlsYmwsJ",
|
468 |
+
"outputId": "3ba1eca7-1986-4f29-a549-b51bb79a4c88"
|
469 |
+
},
|
470 |
+
"execution_count": 3,
|
471 |
+
"outputs": [
|
472 |
+
{
|
473 |
+
"output_type": "display_data",
|
474 |
+
"data": {
|
475 |
+
"text/plain": [
|
476 |
+
"Downloading: 0%| | 0.00/103M [00:00<?, ?B/s]"
|
477 |
+
],
|
478 |
+
"application/vnd.jupyter.widget-view+json": {
|
479 |
+
"version_major": 2,
|
480 |
+
"version_minor": 0,
|
481 |
+
"model_id": "8e25e79ba0c34ac2a39504d2bdb23a44"
|
482 |
+
}
|
483 |
+
},
|
484 |
+
"metadata": {}
|
485 |
+
}
|
486 |
+
]
|
487 |
+
},
|
488 |
+
{
|
489 |
+
"cell_type": "code",
|
490 |
+
"source": [
|
491 |
+
"N_FFT = 2048\n",
|
492 |
+
"HOP_LEN = 1024\n",
|
493 |
+
"\n",
|
494 |
+
"\n",
|
495 |
+
"def create_spectrogram(filename):\n",
|
496 |
+
" audio, sr = torchaudio.load(filename)\n",
|
497 |
+
" specgram = torchaudio.transforms.MelSpectrogram(\n",
|
498 |
+
" sample_rate=sr,\n",
|
499 |
+
" n_fft=N_FFT,\n",
|
500 |
+
" win_length=N_FFT,\n",
|
501 |
+
" hop_length=HOP_LEN,\n",
|
502 |
+
" center=True,\n",
|
503 |
+
" pad_mode=\"reflect\",\n",
|
504 |
+
" power=2.0,\n",
|
505 |
+
" norm=\"slaney\",\n",
|
506 |
+
" onesided=True,\n",
|
507 |
+
" n_mels=224,\n",
|
508 |
+
" mel_scale=\"htk\",\n",
|
509 |
+
" )(audio).mean(axis=0)\n",
|
510 |
+
" specgram = torchaudio.transforms.AmplitudeToDB()(specgram)\n",
|
511 |
+
" specgram = specgram - specgram.min()\n",
|
512 |
+
" specgram = specgram / specgram.max()\n",
|
513 |
+
"\n",
|
514 |
+
" return specgram"
|
515 |
+
],
|
516 |
+
"metadata": {
|
517 |
+
"id": "J1Goh5DHnm59"
|
518 |
+
},
|
519 |
+
"execution_count": 8,
|
520 |
+
"outputs": []
|
521 |
+
},
|
522 |
+
{
|
523 |
+
"cell_type": "code",
|
524 |
+
"source": [
|
525 |
+
"def create_image(filename):\n",
|
526 |
+
" specgram = create_spectrogram(filename)\n",
|
527 |
+
" dest = Path(\"temp.png\")\n",
|
528 |
+
" save_image(specgram, \"temp.png\")"
|
529 |
+
],
|
530 |
+
"metadata": {
|
531 |
+
"id": "-J15K2MmqADm"
|
532 |
+
},
|
533 |
+
"execution_count": 11,
|
534 |
+
"outputs": []
|
535 |
+
},
|
536 |
+
{
|
537 |
+
"cell_type": "code",
|
538 |
+
"source": [
|
539 |
+
"def predict(img):\n",
|
540 |
+
" img = PILImage.create(img)\n",
|
541 |
+
" _pred, _pred_w_idx, probs = model.predict(img)\n",
|
542 |
+
" labels_probs = {labels[i]: float(probs[i]) for i, _ in enumerate(labels)}\n",
|
543 |
+
" return labels_probs"
|
544 |
+
],
|
545 |
+
"metadata": {
|
546 |
+
"id": "1cOhBdp0m2Q5"
|
547 |
+
},
|
548 |
+
"execution_count": 4,
|
549 |
+
"outputs": []
|
550 |
+
},
|
551 |
+
{
|
552 |
+
"cell_type": "code",
|
553 |
+
"source": [
|
554 |
+
"def end2endpipeline(filename):\n",
|
555 |
+
" create_image(filename)\n",
|
556 |
+
" return predict(\"temp.png\")"
|
557 |
+
],
|
558 |
+
"metadata": {
|
559 |
+
"id": "eXIEc4blqOWQ"
|
560 |
+
},
|
561 |
+
"execution_count": 12,
|
562 |
+
"outputs": []
|
563 |
+
},
|
564 |
+
{
|
565 |
+
"cell_type": "code",
|
566 |
+
"source": [
|
567 |
+
"interface_options = {\n",
|
568 |
+
" \"title\": \"Music Genre Classification\",\n",
|
569 |
+
" \"description\": \"A simple baseline model for classifying music genres with fast.ai on [Kaggle competition data](https://www.kaggle.com/competitions/kaggle-pog-series-s01e02/data)\",\n",
|
570 |
+
" \"interpretation\": \"default\",\n",
|
571 |
+
" \"layout\": \"horizontal\",\n",
|
572 |
+
" \"theme\": \"default\",\n",
|
573 |
+
"}\n",
|
574 |
+
"\n",
|
575 |
+
"demo = gradio.Interface(\n",
|
576 |
+
" fn=end2endpipeline,\n",
|
577 |
+
" inputs=gradio.inputs.Audio(source=\"microphone\", type=\"filepath\", label=\"Record/ Drop audio\"),\n",
|
578 |
+
" outputs=gradio.outputs.Label(num_top_classes=5),\n",
|
579 |
+
" **interface_options,\n",
|
580 |
+
")\n",
|
581 |
+
"\n",
|
582 |
+
"launch_options = {\n",
|
583 |
+
" \"enable_queue\": True,\n",
|
584 |
+
" \"share\": False,\n",
|
585 |
+
"}\n",
|
586 |
+
"demo.launch(**launch_options)"
|
587 |
+
],
|
588 |
+
"metadata": {
|
589 |
+
"colab": {
|
590 |
+
"base_uri": "https://localhost:8080/",
|
591 |
+
"height": 662
|
592 |
+
},
|
593 |
+
"id": "uMO5CynZm_pL",
|
594 |
+
"outputId": "0cff073a-293d-4c3d-d3bf-a924d63cdfec"
|
595 |
+
},
|
596 |
+
"execution_count": 13,
|
597 |
+
"outputs": [
|
598 |
+
{
|
599 |
+
"output_type": "stream",
|
600 |
+
"name": "stdout",
|
601 |
+
"text": [
|
602 |
+
"Colab notebook detected. To show errors in colab notebook, set `debug=True` in `launch()`\n",
|
603 |
+
"Your interface requires microphone or webcam permissions - this may cause issues in Colab. Use the External URL in case of issues.\n",
|
604 |
+
"Running on public URL: https://55955.gradio.app\n",
|
605 |
+
"\n",
|
606 |
+
"This share link expires in 72 hours. For free permanent hosting, check out Spaces (https://huggingface.co/spaces)\n"
|
607 |
+
]
|
608 |
+
},
|
609 |
+
{
|
610 |
+
"output_type": "display_data",
|
611 |
+
"data": {
|
612 |
+
"text/plain": [
|
613 |
+
"<IPython.lib.display.IFrame at 0x7f647af3b450>"
|
614 |
+
],
|
615 |
+
"text/html": [
|
616 |
+
"\n",
|
617 |
+
" <iframe\n",
|
618 |
+
" width=\"900\"\n",
|
619 |
+
" height=\"500\"\n",
|
620 |
+
" src=\"https://55955.gradio.app\"\n",
|
621 |
+
" frameborder=\"0\"\n",
|
622 |
+
" allowfullscreen\n",
|
623 |
+
" ></iframe>\n",
|
624 |
+
" "
|
625 |
+
]
|
626 |
+
},
|
627 |
+
"metadata": {}
|
628 |
+
},
|
629 |
+
{
|
630 |
+
"output_type": "execute_result",
|
631 |
+
"data": {
|
632 |
+
"text/plain": [
|
633 |
+
"(<fastapi.applications.FastAPI at 0x7f65bf011ed0>,\n",
|
634 |
+
" 'http://127.0.0.1:7862/',\n",
|
635 |
+
" 'https://55955.gradio.app')"
|
636 |
+
]
|
637 |
+
},
|
638 |
+
"metadata": {},
|
639 |
+
"execution_count": 13
|
640 |
+
}
|
641 |
+
]
|
642 |
+
},
|
643 |
+
{
|
644 |
+
"cell_type": "code",
|
645 |
+
"source": [
|
646 |
+
"input_audio = [gradio.inputs.Audio(source=\"microphone\", type=\"filepath\", label=\"Record/ Drop audio\")]\n",
|
647 |
+
"input_audio"
|
648 |
+
],
|
649 |
+
"metadata": {
|
650 |
+
"colab": {
|
651 |
+
"base_uri": "https://localhost:8080/"
|
652 |
+
},
|
653 |
+
"id": "8Ptz2HMdnAE7",
|
654 |
+
"outputId": "2cac3314-07eb-4c91-d5ed-770e2ed6ae0d"
|
655 |
+
},
|
656 |
+
"execution_count": 9,
|
657 |
+
"outputs": [
|
658 |
+
{
|
659 |
+
"output_type": "execute_result",
|
660 |
+
"data": {
|
661 |
+
"text/plain": [
|
662 |
+
"[Audio(label=\"Record/ Drop audio\")]"
|
663 |
+
]
|
664 |
+
},
|
665 |
+
"metadata": {},
|
666 |
+
"execution_count": 9
|
667 |
+
}
|
668 |
+
]
|
669 |
+
},
|
670 |
+
{
|
671 |
+
"cell_type": "code",
|
672 |
+
"source": [
|
673 |
+
""
|
674 |
+
],
|
675 |
+
"metadata": {
|
676 |
+
"id": "_wHGGfNfnufy"
|
677 |
+
},
|
678 |
+
"execution_count": null,
|
679 |
+
"outputs": []
|
680 |
+
}
|
681 |
+
]
|
682 |
+
}
|
nbs/nbs_PytorchAudioInference.ipynb
ADDED
@@ -0,0 +1,396 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 4,
|
6 |
+
"id": "8973fb4b",
|
7 |
+
"metadata": {},
|
8 |
+
"outputs": [
|
9 |
+
{
|
10 |
+
"name": "stdout",
|
11 |
+
"output_type": "stream",
|
12 |
+
"text": [
|
13 |
+
"Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com, https://download.pytorch.org/whl/cu113\n",
|
14 |
+
"Requirement already satisfied: torch in /opt/conda/lib/python3.8/site-packages (1.11.0)\n",
|
15 |
+
"Requirement already satisfied: torchvision in /opt/conda/lib/python3.8/site-packages (0.12.0a0)\n",
|
16 |
+
"Requirement already satisfied: torchaudio in /opt/conda/lib/python3.8/site-packages (0.11.0)\n",
|
17 |
+
"Requirement already satisfied: typing-extensions in /opt/conda/lib/python3.8/site-packages (from torch) (4.0.1)\n",
|
18 |
+
"Collecting torchvision\n",
|
19 |
+
" Downloading https://download.pytorch.org/whl/cu113/torchvision-0.12.0%2Bcu113-cp38-cp38-linux_x86_64.whl (22.3 MB)\n",
|
20 |
+
"\u001b[K |████████████████████████████████| 22.3 MB 1.3 MB/s eta 0:00:01\n",
|
21 |
+
"\u001b[?25hRequirement already satisfied: pillow!=8.3.*,>=5.3.0 in /opt/conda/lib/python3.8/site-packages (from torchvision) (9.0.0)\n",
|
22 |
+
"Requirement already satisfied: numpy in /opt/conda/lib/python3.8/site-packages (from torchvision) (1.22.2)\n",
|
23 |
+
"Requirement already satisfied: requests in /opt/conda/lib/python3.8/site-packages (from torchvision) (2.26.0)\n",
|
24 |
+
"Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.8/site-packages (from requests->torchvision) (3.1)\n",
|
25 |
+
"Requirement already satisfied: urllib3<1.27,>=1.21.1 in /opt/conda/lib/python3.8/site-packages (from requests->torchvision) (1.26.7)\n",
|
26 |
+
"Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.8/site-packages (from requests->torchvision) (2021.10.8)\n",
|
27 |
+
"Requirement already satisfied: charset-normalizer~=2.0.0 in /opt/conda/lib/python3.8/site-packages (from requests->torchvision) (2.0.9)\n",
|
28 |
+
"Installing collected packages: torchvision\n",
|
29 |
+
" Attempting uninstall: torchvision\n",
|
30 |
+
" Found existing installation: torchvision 0.12.0a0\n",
|
31 |
+
" Uninstalling torchvision-0.12.0a0:\n",
|
32 |
+
" Successfully uninstalled torchvision-0.12.0a0\n",
|
33 |
+
"Successfully installed torchvision-0.12.0+cu113\n",
|
34 |
+
"\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"
|
35 |
+
]
|
36 |
+
}
|
37 |
+
],
|
38 |
+
"source": [
|
39 |
+
"! pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113"
|
40 |
+
]
|
41 |
+
},
|
42 |
+
{
|
43 |
+
"cell_type": "code",
|
44 |
+
"execution_count": 12,
|
45 |
+
"id": "bf7451ce",
|
46 |
+
"metadata": {},
|
47 |
+
"outputs": [
|
48 |
+
{
|
49 |
+
"name": "stdout",
|
50 |
+
"output_type": "stream",
|
51 |
+
"text": [
|
52 |
+
"Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com\n",
|
53 |
+
"Requirement already satisfied: torchvision in /opt/conda/lib/python3.8/site-packages (0.12.0+cu113)\n",
|
54 |
+
"Requirement already satisfied: torch==1.11.0 in /opt/conda/lib/python3.8/site-packages (from torchvision) (1.11.0)\n",
|
55 |
+
"Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /opt/conda/lib/python3.8/site-packages (from torchvision) (9.0.0)\n",
|
56 |
+
"Requirement already satisfied: typing-extensions in /opt/conda/lib/python3.8/site-packages (from torchvision) (4.0.1)\n",
|
57 |
+
"Requirement already satisfied: numpy in /opt/conda/lib/python3.8/site-packages (from torchvision) (1.22.2)\n",
|
58 |
+
"Requirement already satisfied: requests in /opt/conda/lib/python3.8/site-packages (from torchvision) (2.26.0)\n",
|
59 |
+
"Requirement already satisfied: urllib3<1.27,>=1.21.1 in /opt/conda/lib/python3.8/site-packages (from requests->torchvision) (1.26.7)\n",
|
60 |
+
"Requirement already satisfied: charset-normalizer~=2.0.0 in /opt/conda/lib/python3.8/site-packages (from requests->torchvision) (2.0.9)\n",
|
61 |
+
"Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.8/site-packages (from requests->torchvision) (2021.10.8)\n",
|
62 |
+
"Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.8/site-packages (from requests->torchvision) (3.1)\n",
|
63 |
+
"\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"
|
64 |
+
]
|
65 |
+
}
|
66 |
+
],
|
67 |
+
"source": [
|
68 |
+
"! pip install torchvision"
|
69 |
+
]
|
70 |
+
},
|
71 |
+
{
|
72 |
+
"cell_type": "code",
|
73 |
+
"execution_count": 13,
|
74 |
+
"id": "90037405",
|
75 |
+
"metadata": {},
|
76 |
+
"outputs": [],
|
77 |
+
"source": [
|
78 |
+
"import gradio\n",
|
79 |
+
"import torchaudio\n",
|
80 |
+
"from fastai.vision.all import *\n",
|
81 |
+
"from fastai.learner import load_learner\n",
|
82 |
+
"from torchvision.utils import save_image\n",
|
83 |
+
"from huggingface_hub import hf_hub_download"
|
84 |
+
]
|
85 |
+
},
|
86 |
+
{
|
87 |
+
"cell_type": "code",
|
88 |
+
"execution_count": 4,
|
89 |
+
"id": "cf93c763",
|
90 |
+
"metadata": {},
|
91 |
+
"outputs": [],
|
92 |
+
"source": [
|
93 |
+
"base_folder = Path(\"../input/kaggle-pog-series-s01e02\")\n",
|
94 |
+
"\n",
|
95 |
+
"items = get_files(base_folder, extensions=\".ogg\")"
|
96 |
+
]
|
97 |
+
},
|
98 |
+
{
|
99 |
+
"cell_type": "code",
|
100 |
+
"execution_count": 6,
|
101 |
+
"id": "93f3e24d",
|
102 |
+
"metadata": {},
|
103 |
+
"outputs": [
|
104 |
+
{
|
105 |
+
"data": {
|
106 |
+
"text/plain": [
|
107 |
+
"(#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')...]"
|
108 |
+
]
|
109 |
+
},
|
110 |
+
"execution_count": 6,
|
111 |
+
"metadata": {},
|
112 |
+
"output_type": "execute_result"
|
113 |
+
}
|
114 |
+
],
|
115 |
+
"source": [
|
116 |
+
"items"
|
117 |
+
]
|
118 |
+
},
|
119 |
+
{
|
120 |
+
"cell_type": "code",
|
121 |
+
"execution_count": 7,
|
122 |
+
"id": "13c68e01",
|
123 |
+
"metadata": {},
|
124 |
+
"outputs": [],
|
125 |
+
"source": [
|
126 |
+
"N_FFT = 2048\n",
|
127 |
+
"HOP_LEN = 1024\n",
|
128 |
+
"\n",
|
129 |
+
"\n",
|
130 |
+
"def create_spectrogram(filename):\n",
|
131 |
+
" audio, sr = torchaudio.load(filename)\n",
|
132 |
+
" specgram = torchaudio.transforms.MelSpectrogram(\n",
|
133 |
+
" sample_rate=sr,\n",
|
134 |
+
" n_fft=N_FFT,\n",
|
135 |
+
" win_length=N_FFT,\n",
|
136 |
+
" hop_length=HOP_LEN,\n",
|
137 |
+
" center=True,\n",
|
138 |
+
" pad_mode=\"reflect\",\n",
|
139 |
+
" power=2.0,\n",
|
140 |
+
" norm=\"slaney\",\n",
|
141 |
+
" onesided=True,\n",
|
142 |
+
" n_mels=224,\n",
|
143 |
+
" mel_scale=\"htk\",\n",
|
144 |
+
" )(audio).mean(axis=0)\n",
|
145 |
+
" specgram = torchaudio.transforms.AmplitudeToDB()(specgram)\n",
|
146 |
+
" specgram = specgram - specgram.min()\n",
|
147 |
+
" specgram = specgram / specgram.max()\n",
|
148 |
+
"\n",
|
149 |
+
" return specgram"
|
150 |
+
]
|
151 |
+
},
|
152 |
+
{
|
153 |
+
"cell_type": "code",
|
154 |
+
"execution_count": 8,
|
155 |
+
"id": "630a2a63",
|
156 |
+
"metadata": {},
|
157 |
+
"outputs": [],
|
158 |
+
"source": [
|
159 |
+
"filename = items[2]\n",
|
160 |
+
"spec_default = create_spectrogram(filename)"
|
161 |
+
]
|
162 |
+
},
|
163 |
+
{
|
164 |
+
"cell_type": "code",
|
165 |
+
"execution_count": 9,
|
166 |
+
"id": "bd857529",
|
167 |
+
"metadata": {},
|
168 |
+
"outputs": [
|
169 |
+
{
|
170 |
+
"data": {
|
171 |
+
"text/plain": [
|
172 |
+
"Path('../input/kaggle-pog-series-s01e02/test/000008.ogg')"
|
173 |
+
]
|
174 |
+
},
|
175 |
+
"execution_count": 9,
|
176 |
+
"metadata": {},
|
177 |
+
"output_type": "execute_result"
|
178 |
+
}
|
179 |
+
],
|
180 |
+
"source": [
|
181 |
+
"filename"
|
182 |
+
]
|
183 |
+
},
|
184 |
+
{
|
185 |
+
"cell_type": "code",
|
186 |
+
"execution_count": 11,
|
187 |
+
"id": "1eae215f",
|
188 |
+
"metadata": {},
|
189 |
+
"outputs": [
|
190 |
+
{
|
191 |
+
"data": {
|
192 |
+
"text/plain": [
|
193 |
+
"<matplotlib.image.AxesImage at 0x7fc61efe0550>"
|
194 |
+
]
|
195 |
+
},
|
196 |
+
"execution_count": 11,
|
197 |
+
"metadata": {},
|
198 |
+
"output_type": "execute_result"
|
199 |
+
},
|
200 |
+
{
|
201 |
+
"data": {
|
202 |
+
"image/png": "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",
|
203 |
+
"text/plain": [
|
204 |
+
"<Figure size 432x288 with 1 Axes>"
|
205 |
+
]
|
206 |
+
},
|
207 |
+
"metadata": {
|
208 |
+
"needs_background": "light"
|
209 |
+
},
|
210 |
+
"output_type": "display_data"
|
211 |
+
}
|
212 |
+
],
|
213 |
+
"source": [
|
214 |
+
"plt.imshow(spec_default)"
|
215 |
+
]
|
216 |
+
},
|
217 |
+
{
|
218 |
+
"cell_type": "code",
|
219 |
+
"execution_count": 22,
|
220 |
+
"id": "5a0afd6f",
|
221 |
+
"metadata": {},
|
222 |
+
"outputs": [],
|
223 |
+
"source": [
|
224 |
+
"def create_image(filename):\n",
|
225 |
+
" specgram = create_spectrogram(filename)\n",
|
226 |
+
" dest = Path(\"input/temp.png\")\n",
|
227 |
+
" save_image(specgram, \"temp.png\")"
|
228 |
+
]
|
229 |
+
},
|
230 |
+
{
|
231 |
+
"cell_type": "code",
|
232 |
+
"execution_count": 23,
|
233 |
+
"id": "c52d69d2",
|
234 |
+
"metadata": {},
|
235 |
+
"outputs": [],
|
236 |
+
"source": [
|
237 |
+
"create_image(filename)"
|
238 |
+
]
|
239 |
+
},
|
240 |
+
{
|
241 |
+
"cell_type": "code",
|
242 |
+
"execution_count": 24,
|
243 |
+
"id": "ad35918d",
|
244 |
+
"metadata": {},
|
245 |
+
"outputs": [
|
246 |
+
{
|
247 |
+
"name": "stdout",
|
248 |
+
"output_type": "stream",
|
249 |
+
"text": [
|
250 |
+
"PytorchAudioInference.ipynb music-genre-spectrogram-pogchamps\t temp.png\n",
|
251 |
+
"kaggle-pog-series-s01e02 music-genre-torch-melspec-generator.log\n"
|
252 |
+
]
|
253 |
+
}
|
254 |
+
],
|
255 |
+
"source": [
|
256 |
+
"! ls"
|
257 |
+
]
|
258 |
+
},
|
259 |
+
{
|
260 |
+
"cell_type": "code",
|
261 |
+
"execution_count": 26,
|
262 |
+
"id": "daf3215e",
|
263 |
+
"metadata": {},
|
264 |
+
"outputs": [],
|
265 |
+
"source": [
|
266 |
+
"learn = load_learner(\"music-genre-spectrogram-pogchamps/spectograms/model.pkl\")"
|
267 |
+
]
|
268 |
+
},
|
269 |
+
{
|
270 |
+
"cell_type": "code",
|
271 |
+
"execution_count": 31,
|
272 |
+
"id": "c990969f",
|
273 |
+
"metadata": {},
|
274 |
+
"outputs": [],
|
275 |
+
"source": [
|
276 |
+
"labels = learn.dls.vocab"
|
277 |
+
]
|
278 |
+
},
|
279 |
+
{
|
280 |
+
"cell_type": "code",
|
281 |
+
"execution_count": 32,
|
282 |
+
"id": "ebfefcd3",
|
283 |
+
"metadata": {},
|
284 |
+
"outputs": [],
|
285 |
+
"source": [
|
286 |
+
"def predict(img):\n",
|
287 |
+
" img = PILImage.create(img)\n",
|
288 |
+
" _pred, _pred_w_idx, probs = learn.predict(img)\n",
|
289 |
+
" labels_probs = {labels[i]: float(probs[i]) for i, _ in enumerate(labels)}\n",
|
290 |
+
" return labels_probs"
|
291 |
+
]
|
292 |
+
},
|
293 |
+
{
|
294 |
+
"cell_type": "code",
|
295 |
+
"execution_count": 33,
|
296 |
+
"id": "11b17142",
|
297 |
+
"metadata": {},
|
298 |
+
"outputs": [
|
299 |
+
{
|
300 |
+
"data": {
|
301 |
+
"text/html": [
|
302 |
+
"\n",
|
303 |
+
"<style>\n",
|
304 |
+
" /* Turns off some styling */\n",
|
305 |
+
" progress {\n",
|
306 |
+
" /* gets rid of default border in Firefox and Opera. */\n",
|
307 |
+
" border: none;\n",
|
308 |
+
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
|
309 |
+
" background-size: auto;\n",
|
310 |
+
" }\n",
|
311 |
+
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
|
312 |
+
" background: #F44336;\n",
|
313 |
+
" }\n",
|
314 |
+
"</style>\n"
|
315 |
+
],
|
316 |
+
"text/plain": [
|
317 |
+
"<IPython.core.display.HTML object>"
|
318 |
+
]
|
319 |
+
},
|
320 |
+
"metadata": {},
|
321 |
+
"output_type": "display_data"
|
322 |
+
},
|
323 |
+
{
|
324 |
+
"data": {
|
325 |
+
"text/html": [],
|
326 |
+
"text/plain": [
|
327 |
+
"<IPython.core.display.HTML object>"
|
328 |
+
]
|
329 |
+
},
|
330 |
+
"metadata": {},
|
331 |
+
"output_type": "display_data"
|
332 |
+
},
|
333 |
+
{
|
334 |
+
"data": {
|
335 |
+
"text/plain": [
|
336 |
+
"{'Ambient Electronic': 0.018784182146191597,\n",
|
337 |
+
" 'Blues': 0.001689370721578598,\n",
|
338 |
+
" 'Chiptune / Glitch': 0.009157774038612843,\n",
|
339 |
+
" 'Classical': 0.0018330742605030537,\n",
|
340 |
+
" 'Country': 0.015161271207034588,\n",
|
341 |
+
" 'Easy Listening': 0.000761857838369906,\n",
|
342 |
+
" 'Electronic': 0.043093256652355194,\n",
|
343 |
+
" 'Experimental': 0.01893473044037819,\n",
|
344 |
+
" 'Folk': 0.03622647374868393,\n",
|
345 |
+
" 'Hip-Hop': 0.012909098528325558,\n",
|
346 |
+
" 'Instrumental': 0.03738876059651375,\n",
|
347 |
+
" 'International': 0.007503754459321499,\n",
|
348 |
+
" 'Jazz': 0.002992472844198346,\n",
|
349 |
+
" 'Old-Time / Historic': 0.0014046949800103903,\n",
|
350 |
+
" 'Pop': 0.14049866795539856,\n",
|
351 |
+
" 'Punk': 0.1848350614309311,\n",
|
352 |
+
" 'Rock': 0.4632216989994049,\n",
|
353 |
+
" 'Soul-RnB': 0.002242171438410878,\n",
|
354 |
+
" 'Spoken': 0.0013616250362247229}"
|
355 |
+
]
|
356 |
+
},
|
357 |
+
"execution_count": 33,
|
358 |
+
"metadata": {},
|
359 |
+
"output_type": "execute_result"
|
360 |
+
}
|
361 |
+
],
|
362 |
+
"source": [
|
363 |
+
"predict(\"temp.png\")"
|
364 |
+
]
|
365 |
+
},
|
366 |
+
{
|
367 |
+
"cell_type": "code",
|
368 |
+
"execution_count": null,
|
369 |
+
"id": "63aa6dd6",
|
370 |
+
"metadata": {},
|
371 |
+
"outputs": [],
|
372 |
+
"source": []
|
373 |
+
}
|
374 |
+
],
|
375 |
+
"metadata": {
|
376 |
+
"kernelspec": {
|
377 |
+
"display_name": "Python 3 (ipykernel)",
|
378 |
+
"language": "python",
|
379 |
+
"name": "python3"
|
380 |
+
},
|
381 |
+
"language_info": {
|
382 |
+
"codemirror_mode": {
|
383 |
+
"name": "ipython",
|
384 |
+
"version": 3
|
385 |
+
},
|
386 |
+
"file_extension": ".py",
|
387 |
+
"mimetype": "text/x-python",
|
388 |
+
"name": "python",
|
389 |
+
"nbconvert_exporter": "python",
|
390 |
+
"pygments_lexer": "ipython3",
|
391 |
+
"version": "3.8.12"
|
392 |
+
}
|
393 |
+
},
|
394 |
+
"nbformat": 4,
|
395 |
+
"nbformat_minor": 5
|
396 |
+
}
|