from math import ceil
import random
from scipy.io import loadmat
from scipy import signal
import numpy as np
import os
from PIL import Image
from matplotlib.pyplot import get_cmap, imshow
import shutil
import pandas as pd
[os.makedirs(x, exist_ok=True) for x in ["Dataset/HC","Dataset/TT","Dataset/II","Dataset/MM","Dataset/TL","Dataset/RR","Dataset/TM","Dataset/TR","Dataset/TI","Dataset/LL"]]
path = "Dataset/" + name.upper()
if not os.path.isdir(path):
assert NotADirectoryError(f"{path} is not a valid path")
# For all the signals of a particular type:
for i, sig in enumerate(data):
#Subsample the signal to create a robust dataset [Signal length = 1280 i.e. Sampling frequency(128) * 10]
start = [100, 200, 300,400, 500, 600, 700,800, 900,1000]
stop = [x+50 for x in start]
cnt = 0
#For a signal, create images
for k,l in zip(start, stop):
#For each sample create a unique directory
imdir = os.path.join(path , name+"_"+str(i)+"_"+str(cnt)+".png")
#Scipy cwt: [https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.cwt.html]
cwt = signal.cwt(sig[k:l], signal.morlet2, widths=np.arange(1,101,100/1000), w=6)
#Convert cwt to absolute values
cwt = np.abs(cwt)
#Get a colormap to generate color images
cm = get_cmap('viridis')
#Apply color map while converting the pixel values from [0~1] to [0~255]
cwt = (cm(cwt)[:,:,:3]*255).astype(np.uint8)
#Create Image from array
result = Image.fromarray(cwt)
# Resize the image to (224,224) i.e. resolution needed for Neural networks
result = result.resize((224,224), resample = Image.BICUBIC)
#Save the image
result.save(imdir, format="png")
cnt += 1
class Create_Database:
def __init__(self, src = "Dataset", dst = "images", split = [0.7, 0.2, 0.1]) -> None:
self.signals = os.listdir(src)
print(self.signals)
self.src = src
self.dst = dst
self.seed = random.seed(random.random())
self.splits = [split[0], split[1]/ (split[1]+ split[2]), None]
#Create train folder
def ds_train(self):
print(self.signals)
dst_path = os.path.join(self.dst, "train")
[os.makedirs(os.path.join(dst_path, x), exist_ok=True) for x in self.signals]
for sig in self.signals:
path = os.path.join(self.src, sig)
files = os.listdir(path)
random.shuffle(files)
print(len(files))
train = files[:ceil(self.splits[0]*len(files))]
print(len(train))
for file in train:
file = os.path.join(self.src, sig, file)
shutil.move(file, os.path.join(dst_path, sig))
#Create Validation folder
def ds_valid(self):
dst_path = os.path.join(self.dst, "val")
[os.makedirs(os.path.join(dst_path, x), exist_ok=True) for x in self.signals]
for sig in self.signals:
path = os.path.join(self.src, sig)
files = os.listdir(path)
random.shuffle(files)
print(len(files))
val = files[:ceil(self.splits[1]*len(files))]
print(len(val))
for file in val:
file = os.path.join(self.src, sig, file)
shutil.move(file, os.path.join(dst_path, sig))
#Create test folder
def ds_test(self):
dst_path = os.path.join(self.dst, "test")
[os.makedirs(os.path.join(dst_path, x), exist_ok=True) for x in self.signals]
for sig in self.signals:
path = os.path.join(self.src, sig)
files = os.listdir(path)
for file in files:
file = os.path.join(self.src, sig, file)
shutil.move(file, os.path.join(dst_path, sig))
#Masking the individual functions into one function for the class
def create(self):
self.ds_train()
self.ds_valid()
self.ds_test()
File ~\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\signal_signaltools.py:1409, in convolve(in1, in2, mode, method)
1406 elif method == 'direct':
1407 # fastpath to faster numpy.convolve for 1d inputs when possible
1408 if _np_conv_ok(volume, kernel, mode):
-> 1409 return np.convolve(volume, kernel, mode)
1411 return correlate(volume, _reverse_and_conj(kernel), mode, 'direct')
1412 else:
File <__array_function__ internals>:180, in convolve(*args, **kwargs)
File ~\AppData\Local\Programs\Python\Python310\lib\site-packages\numpy\core\numeric.py:841, in convolve(a, v, mode)
839 a, v = v, a
840 if len(a) == 0:
--> 841 raise ValueError('a cannot be empty')
842 if len(v) == 0:
843 raise ValueError('v cannot be empty')
from math import ceil import random from scipy.io import loadmat from scipy import signal import numpy as np import os from PIL import Image from matplotlib.pyplot import get_cmap, imshow import shutil import pandas as pd
cutoff = 1 fs = 128
random.seed(0) data = loadmat("EMGData.mat") data = data["EMGData"] emg = data["Data"][0][0] labels = data["Labels"][0][0] labels = [labels[i][0][0] for i in range(labels.size)] sig_HC1, lab_HC1 = emg[0:240] , labels[0:240] sig_TT1, lab_TT1 = emg[240:480] , labels[240:480] sig_II1, lab_ll1 = emg[480:720] , labels[480:720] sig_MM1, lab_MM1 = emg[720:960] , labels[720:960] sig_TL1, lab_TL1 = emg[960:1200] , labels[960:1200] sig_RR1, lab_RR1 = emg[1200:1440] , labels[1200:1440] sig_TM1, lab_TM1 = emg[1440:1680] , labels[1440:1680] sig_TR1, lab_TR1 = emg[1680:1920] , labels[1680:1920] sig_TI1, lab_TI1 = emg[1920:2160] , labels[1920:2160] sig_LL1, lab_LL1 = emg[2160:2400] , labels[2160:2400] sig_HC2, lab_HC2 = emg[2400:2640] , labels[2400:2640] sig_TT2, lab_TT2 = emg[2640:2880] , labels[2640:2879] sig_II2, lab_II2 = emg[2880:3120] , labels[2880:3119] sig_MM2, lab_MM2 = emg[3120:3360] , labels[3120:3359] sig_TL2, lab_TL2 = emg[3360:3600] , labels[3360:3599] sig_RR2, lab_RR2 = emg[3600:3840] , labels[3600:3839] sig_TM2, lab_TM2 = emg[3840:4080] , labels[3840:4079] sig_TR2, lab_TR2 = emg[4080:4320] , labels[4080:4319] sig_TI2, lab_TI2 = emg[4320:4560] , labels[4320:4559] sig_LL2, lab_LL2 = emg[4560:4800] , labels[4560:4799] sig_HC3, lab_HC3 = emg[4800:5040] , labels[4800:5039] sig_TT3, lab_TT3 = emg[5040:5280] , labels[5040:5279] sig_II3, lab_ll3 = emg[5280:5520] , labels[5280:5519] sig_MM3, lab_MM3 = emg[5520:5760] , labels[5520:5759] sig_TL3, lab_TL3 = emg[5760:6000] , labels[5760:5999] sig_RR3, lab_RR3 = emg[6000:6240] , labels[6000:6239] sig_TM3, lab_TM3 = emg[6240:6480] , labels[6240:6479] sig_TR3, lab_TR3 = emg[6480:6720] , labels[6480:6719] sig_TI3, lab_TI3 = emg[6720:6960] , labels[6720:6959] sig_LL3, lab_LL3 = emg[6960:7200] , labels[6960:7199] sig_HC4, lab_HC4 = emg[7200:7440] , labels[7200:7439] sig_TT4, lab_TT4 = emg[7440:7680] , labels[7440:7679] sig_II4, lab_ll4 = emg[7680:7920] , labels[7680:7919] sig_MM4, lab_MM4 = emg[7920:8160] , labels[7920:8159] sig_TL4, lab_TL4 = emg[8160:8400] , labels[8160:8399] sig_RR4, lab_RR4 = emg[8400:8640] , labels[8400:8639] sig_TM4, lab_TM4 = emg[8640:8880] , labels[8640:8879] sig_TR4, lab_TR4 = emg[8880:9120] , labels[8880:9119] sig_TI4, lab_TI4 = emg[9120:9360] , labels[9120:9359] sig_LL4, lab_LL4 = emg[9360:9600] , labels[9360:9599] sig_HC5, lab_HC5 = emg[9600:9840] , labels[9600:9839] sig_TT5, lab_TT5 = emg[9840:10080] , labels[9840:10079] sig_II5, lab_ll5 = emg[10080:10320] , labels[10080:10319] sig_MM5, lab_MM5 = emg[10320:10560] , labels[10320:10559] sig_TL5, lab_TL5 = emg[10560:10800] , labels[10560:10799] sig_RR5, lab_RR5 = emg[10800:11040] , labels[10800:11039] sig_TM5, lab_TM5 = emg[11040:11280] , labels[11040:11279] sig_TR5, lab_TR5 = emg[11280:11520] , labels[11280:11519] sig_TI5, lab_TI5 = emg[11520:11760] , labels[11520:11759] sig_LL5, lab_LL5 = emg[11760:12000] , labels[11760:11999] sig_HC6, lab_HC6 = emg[12000:12240] , labels[12000:12239] sig_TT6, lab_TT6 = emg[12240:12480] , labels[12240:12479] sig_II6, lab_ll6 = emg[12480:12720] , labels[12480:12719] sig_MM6, lab_MM6 = emg[12720:12960] , labels[12720:12959] sig_TL6, lab_TL6 = emg[12960:13200] , labels[12960:13199] sig_RR6, lab_RR6 = emg[13200:13440] , labels[13200:13439] sig_TM6, lab_TM6 = emg[13440:13680] , labels[13440:13679] sig_TR6, lab_TR6 = emg[13680:13920] , labels[13680:13919] sig_TI6, lab_TI6 = emg[13920:14160] , labels[13920:14159] sig_LL6, lab_LL6 = emg[14160:14400] , labels[14160:14399] sig_HC7, lab_HC7 = emg[14400:14640] , labels[14400:14639] sig_TT7, lab_TT7 = emg[14640:14880] , labels[14640:14879] sig_II7, lab_ll7 = emg[14880:15120] , labels[14880:15119] sig_MM7, lab_MM7 = emg[15120:15360] , labels[15120:15359] sig_TL7, lab_TL7 = emg[15360:15600] , labels[15369:15599] sig_RR7, lab_RR7 = emg[15600:15840] , labels[15600:15839] sig_TM7, lab_TM7 = emg[15840:16080] , labels[15840:16079] sig_TR7, lab_TR7 = emg[16080:16320] , labels[16080:16319] sig_TI7, lab_TI7 = emg[16320:16560] , labels[16320:16559] sig_LL7, lab_LL7 = emg[16560:16800] , labels[16560:16799] sig_HC8, lab_HC8 = emg[16800:17040] , labels[16800:17039] sig_TT8, lab_TT8 = emg[17040:17280] , labels[17040:17279] sig_II8, lab_ll8 = emg[17280:17520] , labels[17280:17519] sig_MM8, lab_MM8 = emg[17520:17760] , labels[17520:17759] sig_TL8, lab_TL8 = emg[17760:18000] , labels[17760:18000] sig_RR8, lab_RR8 = emg[18000:18240] , labels[18000:18240] sig_TM8, lab_TM8 = emg[18240:18480] , labels[18240:18480] sig_TR8, lab_TR8 = emg[18480:18720] , labels[18480:18720] sig_TI8, lab_TI8 = emg[18720:18960] , labels[18720:18960] sig_LL8, lab_LL8 = emg[18960:19200] , labels[18960:19200]
sig_HC1=pd.DataFrame(sig_HC1) sig_HC2=pd.DataFrame(sig_HC2) sig_HC3=pd.DataFrame(sig_HC3) sig_HC4=pd.DataFrame(sig_HC4) sig_HC5=pd.DataFrame(sig_HC5) sig_HC6=pd.DataFrame(sig_HC6) sig_HC7=pd.DataFrame(sig_HC7) sig_HC8=pd.DataFrame(sig_HC8)
sig_TT1=pd.DataFrame(sig_TT1) sig_TT2=pd.DataFrame(sig_TT2) sig_TT3=pd.DataFrame(sig_TT3) sig_TT4=pd.DataFrame(sig_TT4) sig_TT5=pd.DataFrame(sig_TT5) sig_TT6=pd.DataFrame(sig_TT6) sig_TT7=pd.DataFrame(sig_TT7) sig_TT8=pd.DataFrame(sig_TT8)
sig_II1=pd.DataFrame(sig_II1) sig_II2=pd.DataFrame(sig_II2) sig_II3=pd.DataFrame(sig_II3) sig_II4=pd.DataFrame(sig_II4) sig_II5=pd.DataFrame(sig_II5) sig_II6=pd.DataFrame(sig_II6) sig_II7=pd.DataFrame(sig_II7) sig_II8=pd.DataFrame(sig_II8)
sig_MM1=pd.DataFrame(sig_MM1) sig_MM2=pd.DataFrame(sig_MM2) sig_MM3=pd.DataFrame(sig_MM3) sig_MM4=pd.DataFrame(sig_MM4) sig_MM5=pd.DataFrame(sig_MM5) sig_MM6=pd.DataFrame(sig_MM6) sig_MM7=pd.DataFrame(sig_MM7) sig_MM8=pd.DataFrame(sig_MM8)
sig_TL1=pd.DataFrame(sig_TL1) sig_TL2=pd.DataFrame(sig_TL2) sig_TL3=pd.DataFrame(sig_TL3) sig_TL4=pd.DataFrame(sig_TL4) sig_TL5=pd.DataFrame(sig_TL5) sig_TL6=pd.DataFrame(sig_TL6) sig_TL7=pd.DataFrame(sig_TL7) sig_TL8=pd.DataFrame(sig_TL8)
sig_RR1=pd.DataFrame(sig_RR1) sig_RR2=pd.DataFrame(sig_RR2) sig_RR3=pd.DataFrame(sig_RR3) sig_RR4=pd.DataFrame(sig_RR4) sig_RR5=pd.DataFrame(sig_RR5) sig_RR6=pd.DataFrame(sig_RR6) sig_RR7=pd.DataFrame(sig_RR7) sig_RR8=pd.DataFrame(sig_RR8)
sig_TM1=pd.DataFrame(sig_TM1) sig_TM2=pd.DataFrame(sig_TM2) sig_TM3=pd.DataFrame(sig_TM3) sig_TM4=pd.DataFrame(sig_TM4) sig_TM5=pd.DataFrame(sig_TM5) sig_TM6=pd.DataFrame(sig_TM6) sig_TM7=pd.DataFrame(sig_TM7) sig_TM8=pd.DataFrame(sig_TM8)
sig_TR1=pd.DataFrame(sig_TR1) sig_TR2=pd.DataFrame(sig_TR2) sig_TR3=pd.DataFrame(sig_TR3) sig_TR4=pd.DataFrame(sig_TR4) sig_TR5=pd.DataFrame(sig_TR5) sig_TR6=pd.DataFrame(sig_TR6) sig_TR7=pd.DataFrame(sig_TR7) sig_TR8=pd.DataFrame(sig_TR8)
sig_TI1=pd.DataFrame(sig_TI1) sig_TI2=pd.DataFrame(sig_TI2) sig_TI3=pd.DataFrame(sig_TI3) sig_TI4=pd.DataFrame(sig_TI4) sig_TI5=pd.DataFrame(sig_TI5) sig_TI6=pd.DataFrame(sig_TI6) sig_TI7=pd.DataFrame(sig_TI7) sig_TI8=pd.DataFrame(sig_TI8)
sig_LL1=pd.DataFrame(sig_TI1) sig_LL2=pd.DataFrame(sig_TI2) sig_LL3=pd.DataFrame(sig_TI3) sig_LL4=pd.DataFrame(sig_TI4) sig_LL5=pd.DataFrame(sig_TI5) sig_LL6=pd.DataFrame(sig_TI6) sig_LL7=pd.DataFrame(sig_TI7) sig_LL8=pd.DataFrame(sig_TI8)
df0=pd.concat([sig_HC1,sig_HC2,sig_HC3,sig_HC4,sig_HC5,sig_HC6,sig_HC7,sig_HC8], ignore_index = True) df1=pd.concat([sig_TT1,sig_TT2,sig_TT3,sig_TT4,sig_TT5,sig_TT6,sig_TT7,sig_TT8], ignore_index = True) df2=pd.concat([sig_II1,sig_II2,sig_II3,sig_II4,sig_II5,sig_II6,sig_II7,sig_II8], ignore_index = True) df3=pd.concat([sig_MM1,sig_MM2,sig_MM3,sig_MM4,sig_MM5,sig_MM6,sig_MM7,sig_MM8], ignore_index = True) df4=pd.concat([sig_TL1,sig_TL2,sig_TL3,sig_TL4,sig_TL5,sig_TL6,sig_TL7,sig_TL8], ignore_index = True) df5=pd.concat([sig_RR1,sig_RR2,sig_RR3,sig_RR4,sig_TL5,sig_RR6,sig_RR7,sig_RR8], ignore_index = True) df6=pd.concat([sig_TM1,sig_TM2,sig_TM3,sig_TM4,sig_TM5,sig_TM6,sig_TM7,sig_TM8], ignore_index = True) df7=pd.concat([sig_TR1,sig_TR2,sig_TR3,sig_TR4,sig_TR5,sig_TR6,sig_TR7,sig_TR8], ignore_index = True) df8=pd.concat([sig_TI1,sig_TR2,sig_TI3,sig_TI4,sig_TI5,sig_TI6,sig_TI7,sig_TI8], ignore_index = True) df9=pd.concat([sig_LL1,sig_LL2,sig_LL3,sig_LL4,sig_LL5,sig_LL6,sig_LL7,sig_LL8], ignore_index = True)
v0=df0.to_numpy() v1=df1.to_numpy() v2=df2.to_numpy() v3=df3.to_numpy() v4=df4.to_numpy() v5=df5.to_numpy() v6=df6.to_numpy() v7=df7.to_numpy() v8=df8.to_numpy() v9=df9.to_numpy() def create_save_wavelets(data:np.ndarray, name:str):
class Create_Database:
if name == "main": create_save_wavelets(v0, "HC")
create_save_wavelets(v1, "TT") create_save_wavelets(v2, "II") create_save_wavelets(v3, "MM")
create_save_wavelets(v4, "TL") create_save_wavelets(v5, "RR") create_save_wavelets(v6, "TM")
create_save_wavelets(v7, "TR") create_save_wavelets(v8, "TI") create_save_wavelets(v9, "TL")
here is the error i tired to used different datset which is ECG and its working fine but when i used the EMG its showing this error
ValueError Traceback (most recent call last) Input In [239], in <cell line: 63>() 61 self.ds_test() 63 if name == "main": ---> 64 create_save_wavelets(v0, "HC")
65 create_save_wavelets(v1, "TT") 66 create_save_wavelets(v2, "II")
Input In [237], in create_savewavelets(data, name) 28 imdir = os.path.join(path , name+""+str(i)+"_"+str(cnt)+".png") 29 #Scipy cwt: [https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.cwt.html] ---> 30 cwt = signal.cwt(sig[k:l], signal.morlet2, widths=np.arange(1,101,200/1000), w=3.5) 31 #Convert cwt to absolute values 32 cwt = np.abs(cwt)
File ~\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\signal_wavelets.py:480, in cwt(data, wavelet, widths, dtype, kwargs) 478 N = int(N) 479 wavelet_data = np.conj(wavelet(N, width, kwargs)[::-1]) --> 480 output[ind] = convolve(data, wavelet_data, mode='same') 481 return output
File ~\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\signal_signaltools.py:1409, in convolve(in1, in2, mode, method) 1406 elif method == 'direct': 1407 # fastpath to faster numpy.convolve for 1d inputs when possible 1408 if _np_conv_ok(volume, kernel, mode): -> 1409 return np.convolve(volume, kernel, mode) 1411 return correlate(volume, _reverse_and_conj(kernel), mode, 'direct') 1412 else:
File <__array_function__ internals>:180, in convolve(*args, **kwargs)
File ~\AppData\Local\Programs\Python\Python310\lib\site-packages\numpy\core\numeric.py:841, in convolve(a, v, mode) 839 a, v = v, a 840 if len(a) == 0: --> 841 raise ValueError('a cannot be empty') 842 if len(v) == 0: 843 raise ValueError('v cannot be empty')
ValueError: a cannot be empty