import numpy as np
import numpy.random as random
from numpy.fft import fft
from scipy.io import wavfile
import matplotlib.pyplot as plt
import seaborn as sns
import os
%matplotlib inline
sns.set()
sns.set(font_scale=1.5)
data_dir = './recordings/'
# determine digits of interest (0 to 9)
digits = [1,2] # change here to load more digits
# dictionary that will store our values
signals = {d:[] for d in digits}
file_names = {d:[] for d in digits}
# import files
for filename in os.listdir(data_dir):
# iterate over digits
for d in digits:
if filename.startswith(str(d)+'_'):
wav = wavfile.read(data_dir+filename)[1]
if len(wav.shape)<2:
signals[d].append(wav)
file_names[d].append(filename)
# find maximum of vector length
N = max([len(v) for d in digits for v in signals[d]])
/shared-libs/python3.7/py-core/lib/python3.7/site-packages/ipykernel_launcher.py:15: WavFileWarning: Chunk (non-data) not understood, skipping it.
from ipykernel import kernelapp as app
# next we split our dataset in train and test
# we will use a 80/20 random split.
# create train/test split
ix = np.arange(100)
random.shuffle(ix)
# select train entries
ix_train = ix[:80]
#select test entries
ix_test = ix[80:]
# next we compute the average spectrum of each spoken digit in the training set.
# we will consider a window up to 1.5 KHz
# sampling rate is 8kHz
Ts = 1.0/8000
ix_cut = int(np.ceil(1500*Ts*N))
# initialize dictionary for storing transforms
transforms = {}
# initialize dictionary for storing mean transforms
mean_transforms = {}
# compute mean transform of each digit and in the training set.
# Make sure to only keep the spectrum up to 1.5kHz
# Code Solution to Q1 Here
# Dictionary for non-normalized transforms
transforms_not_normalized = {}
for i in digits:
# FFT dictionary for training set
ix_train_fft = {}
for j in ix_train:
ix_train_fft[j] = fft(signals[i][j], n=N)
ix_train_fft[j] = ix_train_fft[j][:ix_cut+1]
# Find average spectral magnitude and place into correct dictionaries
av_mag = [0] * (ix_cut+1)
for j in ix_train:
for k in range(ix_cut+1):
av_mag[k] += abs(ix_train_fft[j][k])/80
transforms_not_normalized[i] = av_mag
mean_transforms[i] = transforms_not_normalized[i]/ np.linalg.norm(transforms_not_normalized[i])
# In this next part, plot the average spectral magnitude of each digit.
# Code Solution to Q2 here
%matplotlib inline
xf = np.linspace(0, 1500, ix_cut+1)
for d in [1,2]:
y_axis = transforms_not_normalized[d]
plt.plot(xf, y_axis)
plt.show()
# classifier function
# receives a vector, computes the product with average digits, and returns the max inner product
# Input: sample x (vector)
def mean_classifier(x):
fft_x = fft(x, n=N)[:ix_cut+1]
inn_prod = 0
similarity = {}
for i in digits:
for k in range(ix_cut):
inn_prod += abs(fft_x[k]) * abs(mean_transforms[i][k])
similarity[i] = inn_prod
inn_prod = 0
return max(similarity, key=similarity.get)
# Write anser for Q3b here
counter = [0] * len(digits)
for i in digits:
for j in ix_test:
if i == mean_classifier(signals[i][j]):
counter[i-1] += 1
for i in range(len(counter)):
perc = counter[i]/20 * 100
digit_num = i+1
print("digit ", digit_num, " accuracy: ", perc, "%")
# for i in counter:
# print("digit ", counter[i+1], " accuracy: " counter_avg[i+1] "%")
digit 1 accuracy: 100.0 %
digit 2 accuracy: 85.0 %
# Write answer for Q4 here
%matplotlib inline
data_dir = './recordings/'
# determine digits of interest (0 to 9)
digits = [0,1,2,3,4,5,6,7,8,9] # change here to load more digits
# dictionary that will store our values
signals = {d:[] for d in digits}
file_names = {d:[] for d in digits}
# import files
for filename in os.listdir(data_dir):
# iterate over digits
for d in digits:
if filename.startswith(str(d)+'_'):
wav = wavfile.read(data_dir+filename)[1]
if len(wav.shape)<2:
signals[d].append(wav)
file_names[d].append(filename)
# find maximum of vector length
N = max([len(v) for d in digits for v in signals[d]])
# next we split our dataset in train and test
# we will use a 80/20 random split.
# create train/test split
ix = np.arange(100)
random.shuffle(ix)
# select train entries
ix_train = ix[:80]
#select test entries
ix_test = ix[80:]
# next we compute the average spectrum of each spoken digit in the training set.
# we will consider a window up to 1.5 KHz
# sampling rate is 8kHz
Ts = 1.0/8000
ix_cut = int(np.ceil(1500*Ts*N))
# initialize dictionary for storing transforms
transforms = {}
# initialize dictionary for storing mean transforms
mean_transforms = {}
# compute mean transform of each digit and in the training set.
# Make sure to only keep the spectrum up to 1.5kHz
# Code Solution to Q1 Here
# Dictionary for non-normalized transforms
transforms_not_normalized = {}
for i in digits:
# FFT dictionary for training set
ix_train_fft = {}
for j in ix_train:
ix_train_fft[j] = fft(signals[i][j], n=N)
ix_train_fft[j] = ix_train_fft[j][:ix_cut+1]
# Find average spectral magnitude and place into correct dictionaries
av_mag = [0] * (ix_cut+1)
for j in ix_train:
for k in range(ix_cut+1):
av_mag[k] += abs(ix_train_fft[j][k])/80
transforms_not_normalized[i] = av_mag
mean_transforms[i] = transforms_not_normalized[i]/ np.linalg.norm(transforms_not_normalized[i])
xf = np.linspace(0, 1500, ix_cut+1)
for d in digits:
y_axis = transforms_not_normalized[d]
plt.plot(xf, y_axis)
plt.show()
def mean_classifier(x):
fft_x = fft(x, n=N)[:ix_cut+1]
inn_prod = 0
similarity = {}
for i in digits:
for k in range(ix_cut):
inn_prod += abs(fft_x[k]) * abs(mean_transforms[i][k])
similarity[i] = inn_prod
inn_prod = 0
return max(similarity, key=similarity.get)
counter = [0] * len(digits)
for i in digits:
for j in ix_test:
if i == mean_classifier(signals[i][j]):
counter[i-1] += 1
for i in range(len(counter)):
perc = counter[i]/20 * 100
digit_num = i+1
print("digit ", digit_num, " accuracy: ", perc, "%")
# for i in counter:
# print("digit ", counter[i+1], " accuracy: " counter_avg[i+1] "%")
/shared-libs/python3.7/py-core/lib/python3.7/site-packages/ipykernel_launcher.py:17: WavFileWarning: Chunk (non-data) not understood, skipping it.
digit 1 accuracy: 30.0 %
digit 2 accuracy: 80.0 %
digit 3 accuracy: 30.0 %
digit 4 accuracy: 75.0 %
digit 5 accuracy: 90.0 %
digit 6 accuracy: 65.0 %
digit 7 accuracy: 85.0 %
digit 8 accuracy: 50.0 %
digit 9 accuracy: 45.0 %
digit 10 accuracy: 50.0 %
# Code Q5 here
pip install -U notebook-as-pdf
Collecting notebook-as-pdf
Downloading notebook_as_pdf-0.5.0-py3-none-any.whl (6.5 kB)
Requirement already satisfied, skipping upgrade: nbconvert in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from notebook-as-pdf) (6.0.7)
Collecting pyppeteer
Downloading pyppeteer-1.0.2-py3-none-any.whl (83 kB)
|████████████████████████████████| 83 kB 2.6 MB/s
Collecting PyPDF2
Downloading PyPDF2-1.26.0.tar.gz (77 kB)
|████████████████████████████████| 77 kB 10.3 MB/s
Requirement already satisfied, skipping upgrade: bleach in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from nbconvert->notebook-as-pdf) (4.1.0)
Requirement already satisfied, skipping upgrade: traitlets>=4.2 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from nbconvert->notebook-as-pdf) (4.3.3)
Requirement already satisfied, skipping upgrade: entrypoints>=0.2.2 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from nbconvert->notebook-as-pdf) (0.4)
Requirement already satisfied, skipping upgrade: testpath in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from nbconvert->notebook-as-pdf) (0.6.0)
Requirement already satisfied, skipping upgrade: nbformat>=4.4 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from nbconvert->notebook-as-pdf) (5.1.3)
Requirement already satisfied, skipping upgrade: pygments>=2.4.1 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from nbconvert->notebook-as-pdf) (2.11.2)
Requirement already satisfied, skipping upgrade: nbclient<0.6.0,>=0.5.0 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from nbconvert->notebook-as-pdf) (0.5.9)
Requirement already satisfied, skipping upgrade: jupyterlab-pygments in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from nbconvert->notebook-as-pdf) (0.1.2)
Requirement already satisfied, skipping upgrade: jinja2>=2.4 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from nbconvert->notebook-as-pdf) (3.0.3)
Requirement already satisfied, skipping upgrade: jupyter-core in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from nbconvert->notebook-as-pdf) (4.7.1)
Requirement already satisfied, skipping upgrade: pandocfilters>=1.4.1 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from nbconvert->notebook-as-pdf) (1.5.0)
Requirement already satisfied, skipping upgrade: defusedxml in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from nbconvert->notebook-as-pdf) (0.7.1)
Requirement already satisfied, skipping upgrade: mistune<2,>=0.8.1 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from nbconvert->notebook-as-pdf) (0.8.4)
Requirement already satisfied, skipping upgrade: urllib3<2.0.0,>=1.25.8 in /shared-libs/python3.7/py/lib/python3.7/site-packages (from pyppeteer->notebook-as-pdf) (1.26.9)
Requirement already satisfied, skipping upgrade: tqdm<5.0.0,>=4.42.1 in /shared-libs/python3.7/py/lib/python3.7/site-packages (from pyppeteer->notebook-as-pdf) (4.63.0)
Collecting pyee<9.0.0,>=8.1.0
Downloading pyee-8.2.2-py2.py3-none-any.whl (12 kB)
Collecting websockets<11.0,>=10.0
Downloading websockets-10.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (111 kB)
|████████████████████████████████| 111 kB 42.5 MB/s
Requirement already satisfied, skipping upgrade: importlib-metadata>=1.4 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from pyppeteer->notebook-as-pdf) (4.11.3)
Collecting appdirs<2.0.0,>=1.4.3
Downloading appdirs-1.4.4-py2.py3-none-any.whl (9.6 kB)
Requirement already satisfied, skipping upgrade: certifi>=2021 in /shared-libs/python3.7/py/lib/python3.7/site-packages (from pyppeteer->notebook-as-pdf) (2021.10.8)
Requirement already satisfied, skipping upgrade: webencodings in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from bleach->nbconvert->notebook-as-pdf) (0.5.1)
Requirement already satisfied, skipping upgrade: six>=1.9.0 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from bleach->nbconvert->notebook-as-pdf) (1.16.0)
Requirement already satisfied, skipping upgrade: packaging in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from bleach->nbconvert->notebook-as-pdf) (21.3)
Requirement already satisfied, skipping upgrade: ipython-genutils in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from traitlets>=4.2->nbconvert->notebook-as-pdf) (0.2.0)
Requirement already satisfied, skipping upgrade: decorator in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from traitlets>=4.2->nbconvert->notebook-as-pdf) (5.1.1)
Requirement already satisfied, skipping upgrade: jsonschema!=2.5.0,>=2.4 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from nbformat>=4.4->nbconvert->notebook-as-pdf) (3.2.0)
Requirement already satisfied, skipping upgrade: nest-asyncio in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from nbclient<0.6.0,>=0.5.0->nbconvert->notebook-as-pdf) (1.5.4)
Requirement already satisfied, skipping upgrade: jupyter-client>=6.1.5 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from nbclient<0.6.0,>=0.5.0->nbconvert->notebook-as-pdf) (6.1.12)
Requirement already satisfied, skipping upgrade: MarkupSafe>=2.0 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from jinja2>=2.4->nbconvert->notebook-as-pdf) (2.1.1)
Requirement already satisfied, skipping upgrade: zipp>=0.5 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from importlib-metadata>=1.4->pyppeteer->notebook-as-pdf) (3.7.0)
Requirement already satisfied, skipping upgrade: typing-extensions>=3.6.4; python_version < "3.8" in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from importlib-metadata>=1.4->pyppeteer->notebook-as-pdf) (4.1.1)
Requirement already satisfied, skipping upgrade: pyparsing!=3.0.5,>=2.0.2 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from packaging->bleach->nbconvert->notebook-as-pdf) (3.0.7)
Requirement already satisfied, skipping upgrade: attrs>=17.4.0 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.4->nbconvert->notebook-as-pdf) (21.4.0)
Requirement already satisfied, skipping upgrade: setuptools in /root/venv/lib/python3.7/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.4->nbconvert->notebook-as-pdf) (47.1.0)
Requirement already satisfied, skipping upgrade: pyrsistent>=0.14.0 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.4->nbconvert->notebook-as-pdf) (0.18.1)
Requirement already satisfied, skipping upgrade: python-dateutil>=2.1 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from jupyter-client>=6.1.5->nbclient<0.6.0,>=0.5.0->nbconvert->notebook-as-pdf) (2.8.2)
Requirement already satisfied, skipping upgrade: tornado>=4.1 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from jupyter-client>=6.1.5->nbclient<0.6.0,>=0.5.0->nbconvert->notebook-as-pdf) (6.1)
Requirement already satisfied, skipping upgrade: pyzmq>=13 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from jupyter-client>=6.1.5->nbclient<0.6.0,>=0.5.0->nbconvert->notebook-as-pdf) (22.3.0)
Building wheels for collected packages: PyPDF2
Building wheel for PyPDF2 (setup.py) ... done
Created wheel for PyPDF2: filename=PyPDF2-1.26.0-py3-none-any.whl size=61085 sha256=73282056c1bf9d36b819b6a57630762e2f8f7f5a558aa61b575e9038c68e3f4c
Stored in directory: /root/.cache/pip/wheels/80/1a/24/648467ade3a77ed20f35cfd2badd32134e96dd25ca811e64b3
Successfully built PyPDF2
Installing collected packages: pyee, websockets, appdirs, pyppeteer, PyPDF2, notebook-as-pdf
Successfully installed PyPDF2-1.26.0 appdirs-1.4.4 notebook-as-pdf-0.5.0 pyee-8.2.2 pyppeteer-1.0.2 websockets-10.2
WARNING: You are using pip version 20.1.1; however, version 22.0.4 is available.
You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.
Note: you may need to restart the kernel to use updated packages.
pyppeteer-install
Execution Error
NameError: name 'pyppeteer' is not defined