micmon/notebooks/dataset.ipynb

232 lines
56 KiB
Plaintext
Raw Normal View History

2020-10-27 15:21:32 +01:00
{
"cells": [
{
"cell_type": "markdown",
"source": [
"This notebook scans for labelled audio samples in a directory,\n",
"extracts the spectrum of the samples and creates dataset files\n",
"with the spectrum data to train the audio detection model."
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"DEBUG:matplotlib:(private) matplotlib data path: /usr/lib/python3.8/site-packages/matplotlib/mpl-data\n",
"DEBUG:matplotlib:matplotlib data path: /usr/lib/python3.8/site-packages/matplotlib/mpl-data\n",
"DEBUG:matplotlib:CONFIGDIR=/home/blacklight/.config/matplotlib\n",
"DEBUG:matplotlib:matplotlib version 3.3.2\n",
"DEBUG:matplotlib:interactive is False\n",
"DEBUG:matplotlib:platform is linux\n",
"DEBUG:matplotlib:loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_warnings', '_frozen_importlib_external', '_io', 'marshal', 'posix', '_thread', '_weakref', 'time', 'zipimport', '_codecs', 'codecs', 'encodings.aliases', 'encodings', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', '_abc', 'abc', 'io', '_stat', 'stat', '_collections_abc', 'genericpath', 'posixpath', 'os.path', 'os', '_sitebuiltins', '_locale', '_bootlocale', 'types', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib', 'importlib.machinery', 'importlib.abc', '_operator', 'operator', 'keyword', '_heapq', 'heapq', 'itertools', 'reprlib', '_collections', 'collections', '_functools', 'functools', 'contextlib', 'importlib.util', 'google', 'google.assistant', 'google.assistant.embedded', 'googlesamples', 'googlesamples.assistant', 'google.cloud', 'google.logging', 'google.iam', 'mpl_toolkits', 'ruamel', 'sphinxcontrib', 'zope', 'site', '_weakrefset', 'weakref', 'pkgutil', 'runpy', 'ipykernel._version', '__future__', 'enum', '_sre', 'sre_constants', 'sre_parse', 'sre_compile', 'copyreg', 're', '_json', 'json.scanner', 'json.decoder', 'json.encoder', 'json', 'errno', 'signal', 'threading', '_posixsubprocess', 'select', 'collections.abc', 'math', 'selectors', 'subprocess', 'IPython.core', 'IPython.core.getipython', 'IPython.core.release', 'atexit', 'copy', 'fnmatch', 'glob', 'token', 'tokenize', 'linecache', 'traceback', '_string', 'string', 'logging', 'zlib', '_compression', '_bz2', 'bz2', '_lzma', 'lzma', 'pwd', 'grp', 'shutil', '_opcode', 'opcode', 'dis', 'inspect', '_struct', 'struct', 'six', 'traitlets.utils', 'traitlets.utils.getargspec', 'ipython_genutils._version', 'ipython_genutils', 'locale', 'ipython_genutils.encoding', 'ipython_genutils.py3compat', 'traitlets.utils.importstring', 'traitlets.utils.sentinel', 'traitlets.utils.bunch', 'traitlets.traitlets', 'traitlets._version', 'traitlets', 'decorator', 'gettext', 'argparse', '_ast', 'ast', '_bisect', 'bisect', '_sha512', '_random', 'random', 'ipython_genutils.path', 'traitlets.config.loader', 'textwrap', 'ipython_genutils.text', 'traitlets.config.configurable', 'ipython_genutils.importstring', 'traitlets.config.application', 'traitlets.config', 'pprint', 'platform', 'sysconfig', 'urllib', 'urllib.parse', '_sysconfigdata__linux_x86_64-linux-gnu', 'pydoc', 'bdb', 'IPython.utils', 'IPython.utils.ipstruct', 'IPython.utils.coloransi', 'pygments', 'IPython.utils.colorable', 'IPython.utils.PyColorize', 'IPython.utils.encoding', 'IPython.utils.py3compat', 'IPython.core.excolors', 'IPython.testing', 'IPython.testing.skipdoctest', 'cmd', 'codeop', 'code', 'pdb', 'IPython.core.debugger', 'IPython.core.display_trap', 'pexpect.exceptions', 'pexpect.utils', 'pexpect.expect', 'termios', 'tty', 'pty', 'fcntl', 'resource', 'ptyprocess.util', 'ptyprocess.ptyprocess', 'ptyprocess', 'pexpect.spawnbase', 'pexpect.pty_spawn', 'pexpect.run', 'pexpect', 'shlex', 'IPython.utils._process_common', 'IPython.utils._process_posix', 'IPython.utils.process', 'IPython.utils.decorators', 'IPython.utils.path', 'IPython.utils.data', 'IPython.utils.terminal', 'IPython.core.ultratb', 'IPython.utils._sysinfo', 'IPython.utils.sysinfo', 'IPython.core.crashhandler', 'tempfile', 'IPython.utils.importstring', 'IPython.paths', 'IPython.core.profiledir', 'IPython.core.application', 'IPython.terminal', '_hashlib', '_blake2', '_sha3', 'hashlib', 'IPython.core.compilerop', 'IPython.core.error', 'ntpath', 'pathlib', 'IPython.utils.text', 'IPython.core.magic_arguments', 'getopt', 'typing.io', 'typing.re', 'typing', 'binascii', 'mimetypes', 'IPython.core.display', 'IPython.core.page', 'getpass', 'IPython.lib.security', 'IPython.lib', '_datetime', 'datetime', 'IPython.lib.pretty', 'IPython.utils.openpy', 'IPython.utils.dir2', 'IPython.utils.wildcard', 'pygments.lexers._mapping', 'pygments.modeline', 'pygments.plugin', 'pygments.util', 'pygments.lexers', 'pygments.filter', 'pygments.token', 'pygments.filters', 'pygments.regexopt', 'pygments.lexer', 'pygments.unistring', 'pygments.lexers.p
"DEBUG:matplotlib:CACHEDIR=/home/blacklight/.cache/matplotlib\n",
"DEBUG:matplotlib.font_manager:Using fontManager instance from /home/blacklight/.cache/matplotlib/fontlist-v330.json\n",
"DEBUG:matplotlib.pyplot:Loaded backend module://ipykernel.pylab.backend_inline version unknown.\n",
"DEBUG:matplotlib.pyplot:Loaded backend module://ipykernel.pylab.backend_inline version unknown.\n"
]
}
],
"source": [
"import os\n",
"\n",
"from micmon.audio import AudioDirectory, AudioPlayer, AudioFile\n",
"from micmon.dataset import DatasetWriter\n",
"\n",
"basedir = os.path.expanduser(os.path.join('~', 'projects', 'baby-monitor'))\n",
"audio_dir = os.path.join(basedir, 'data', 'audio')\n",
"datasets_dir = os.path.join(basedir, 'data', 'datasets')\n",
"audio_dirs = AudioDirectory.scan(audio_dir)\n",
"cutoff_frequencies = [250, 7500]"
]
},
{
"cell_type": "markdown",
"source": [
"Play some audio samples"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 3,
"outputs": [],
"source": [
"for audio in audio_dirs:\n",
" with AudioFile(audio, start='19:40', duration=10) as reader, \\\n",
" AudioPlayer() as player:\n",
" for sample in reader:\n",
" player.play(sample)"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"Plot the spectrum of the audio samples in the first 10 seconds of each audio file."
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 2,
"outputs": [
{
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"for audio in audio_dirs:\n",
" with AudioFile(audio, start=0, duration=4) as reader:\n",
" for sample in reader:\n",
" sample.plot_spectrum(low_freq=cutoff_frequencies[0],\n",
" high_freq=cutoff_frequencies[1])"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"Save the spectrum information and labels of the samples to a\n",
"different compressed file for each audio file."
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 2,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Processing audio sample /home/blacklight/projects/baby-monitor/data/audio/2020-10-25_16-36-00\n",
"Processing audio sample /home/blacklight/projects/baby-monitor/data/audio/2020-10-24_19-53-00\n",
"Processing audio sample /home/blacklight/projects/baby-monitor/data/audio/2020-10-24_17-25-00\n"
]
}
],
"source": [
"for audio in audio_dirs:\n",
" dataset_file = os.path.join(datasets_dir, os.path.basename(audio.path) + '.npz')\n",
" print(f'Processing audio sample {audio.path}')\n",
"\n",
" with AudioFile(audio) as reader, \\\n",
" DatasetWriter(dataset_file,\n",
" low_freq=cutoff_frequencies[0],\n",
" high_freq=cutoff_frequencies[1]) as writer:\n",
" for sample in reader:\n",
" writer += sample"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}