• No se han encontrado resultados

Código de interfaz final con Máquinas de vector soporte y

6. RESULTADOS Y EVIDENCIAS 60

10.5 Código de interfaz final con Máquinas de vector soporte y

from tkinter import * import tkinter as tk from PIL import Image import time

import argparse import numpy as np import pandas as pd import matplotlib

matplotlib.use('TkAgg')

import matplotlib.pyplot as plt from pylab import *

from unipath import Path import matplotlib

import pyglet import serial import brainflow

from brainflow.board_shim import BoardShim, BrainFlowInputParams

from brainflow.data_filter import DataFilter, FilterTypes, AggOperations

from sklearn.multiclass import OneVsOneClassifier from sklearn.svm import LinearSVC

val='Inicio'

ser = serial.Serial("COM3",9600)

root = tk.Tk()

root.title("Ventana de pruebas") root.config(bg="black")

root.geometry("850x900")

animation= pyglet.image.load_animation('Conteo_regresivo.gif') bin = pyglet.image.atlas.TextureBin()

animation.add_to_texture_bin(bin)

#sprite =pyglet.sprite.Sprite(animation, x=200, y=50) sprite =pyglet.sprite.Sprite(animation, x=150, y=50)

#Conteo_regresivo 40

#mov_1_3s 64

#mov_2_3s 54

#pinza 62

#w= 700 Con contador

#h= 300 Con Contador

w= 950 h= 500 a=0 b=0 c=0

entrada=0

def clasificacion():

print('Clasificacion') global entrada

from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.discriminant_analysis import

LinearDiscriminantAnalysis as LDA

from sklearn.linear_model import LogisticRegression from sklearn.metrics import confusion_matrix

dataset1 = pd.read_csv('BDParaLDATotal.csv') dataset2 = pd.read_csv('TargetM1M2M3.csv')

X = dataset1.iloc[0::,:].values y = dataset2.iloc[:,0].values

X=pd.DataFrame((X)) y=pd.DataFrame((y))

X_train1, X_test1, y_train1, y_test1 =

train_test_split(X.loc[0:99,:], y.loc[0:99] , test_size = 0.4, random_state =34)

X_train2, X_test2, y_train2, y_test2 =

train_test_split(X.loc[100:199,:], y.loc[100:199] , test_size = 0.4, random_state =34)

X_train3, X_test3, y_train3, y_test3 =

train_test_split(X.loc[200:299,:], y.loc[200:299] , test_size = 0.4, random_state =34)

X_1 = pd.concat([X_train1,X_test1]) X_2 = pd.concat([X_train2,X_test2]) X_3 = pd.concat([X_train3,X_test3])

X_1a=X_1.iloc[0:25,:]

X_1b=X_1.iloc[25:50,:]

X_1c=X_1.iloc[50:75,:]

X_1d=X_1.iloc[75:100,:]

X_2a=X_2.iloc[0:25,:]

X_2b=X_2.iloc[25:50,:]

X_2c=X_2.iloc[50:75,:]

X_2d=X_2.iloc[75:100,:]

X_3a=X_3.iloc[0:25,:]

X_3b=X_3.iloc[25:50,:]

X_3c=X_3.iloc[50:75,:]

X_3d=X_3.iloc[75:100,:]

Xunido1=pd.concat([X_1b,X_1c,X_1d,X_1a]) Xunido2=pd.concat([X_2b,X_2c,X_2d,X_2a]) Xunido3=pd.concat([X_3b,X_3c,X_3d,X_3a])

X_train1 = Xunido1.iloc[0:60,:]

X_test1 = Xunido1.iloc[60:100,:]

print(X_train1.shape)

X_train2 = Xunido2.iloc[0:60,:]

X_test2 = Xunido2.iloc[60:100,:]

print(X_train2.shape)

X_train3 = Xunido3.iloc[0:60,:]

X_test3 = Xunido3.iloc[60:100,:]

X_train = pd.concat([X_train1,X_train2,X_train3]) X_train=pd.DataFrame(X_train)

#X_test = pd.concat([X_test1,X_test2,X_test3]) y_train = pd.concat([y_train1,y_train2,y_train3])

#y_test = pd.concat([y_test1,y_test2,y_test3])

ClasificadorFinal =

pd.read_csv('ArregloDeDatosClasificadorSSMVSVrms.csv') [Filas33,Columnas33]=ClasificadorFinal.shape

X_test = ClasificadorFinal y_test = np.zeros(Filas33)

# Ajuste de Escalas sc = StandardScaler()

#Clasificacion de Maquinas de Vector Soporte

clf = OneVsOneClassifier(LinearSVC(random_state=0)).fit(X_train, y_train)

y_pred = clf.predict(X_test)

if y_pred[Filas33-1]==0:

print('Derecha') entrada=4

elif y_pred[Filas33-1]==1:

entrada=2

print('Izquierda') elif y_pred[Filas33-1]==2:

print('Mano') entrada=6

#DataFilter.write_file(y_pred, 'I_R_ssmv_vrms.csv', 'w') # use 'a' for append mode

def pulsarGuardar():

global val

val=nombre.get() print(val)

def activacion_pin():

juego=str(entrada)

ser.write(juego.encode('ascii'))

print('se ha enviado el valor', entrada)

def toma_datos():

global board global data

MovientoAClasificar=0 print('aqui llego')

BoardShim.enable_dev_board_logger()

parser = argparse.ArgumentParser()

# use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port

parser.add_argument('--timeout', type=int, help='timeout for device discovery or connection', required=False,

default=0) print('aqui llego 2')

parser.add_argument('--ip-port', type=int, help='ip port', required=False, default=0)

parser.add_argument('--ip-protocol', type=int, help='ip protocol, check IpProtocolType enum', required=False,

default=0)

parser.add_argument('--ip-address', type=str, help='ip address', required=False, default='')

#parser.add_argument('--serial-port', type=str, help='serial port', required=False, default='')

parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='')

parser.add_argument('--other-info', type=str, help='other info', required=False, default='')

parser.add_argument('--streamer-params', type=str, help='streamer params', required=False, default='')

parser.add_argument('--serial-number', type=str, help='serial number', required=False, default='')

#parser.add_argument('--board-id', type=int, help='board id, check docs to get a list of supported boards',

# required=True)

parser.add_argument('--file', type=str, help='file', required=False, default='')

args = parser.parse_args()

params = BrainFlowInputParams() params.ip_port = args.ip_port params.serial_port = 'COM4'

params.mac_address = args.mac_address params.other_info = args.other_info

params.serial_number = args.serial_number

params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol params.timeout = args.timeout

params.file = args.file

board = BoardShim(0, params) board.prepare_session()

#board.start_stream () # use this for default options

board.start_stream(45000, args.streamer_params) time.sleep(6)

print('tomando datos')

data = board.get_board_data() # get all data and remove it from internal buffer

def ArreglarDatos():

ConFiltroM1M2M3 =

DataFilter.read_file('MovimientoAClasificarCFSSMVSVrms.csv') ConFiltroM1M2M3 = pd.DataFrame(ConFiltroM1M2M3)

ConFiltroM1M2M3 = ConFiltroM1M2M3.T [fil,colum] =ConFiltroM1M2M3.shape

for j in np.arange(0,fil,1300):

#print(j) nn=[]

for i in np.arange(1,9):

for k in range(0,1300):

nn=pd.DataFrame(nn)

nn.loc[1,(1300*(i-1))+k]=ConFiltroM1M2M3.iloc[k+j,i]

print('el numero es:') print(nn.loc[1,1]) if j==0:

n1=nn

n1=pd.DataFrame(n1) else:

n1=n1.append(nn,ignore_index=True) BDParaLDA=pd.DataFrame(data=n1)

BDParaLDA.to_csv('ArregloDeDatosClasificadorSSMVSVrms.csv',sep=',',flo at_format='%.6f',index=False)

def parar_toma_datos(MovientoAClasificar):

print(val)

board.stop_stream() board.release_session()

DataFilter.write_file(data, 'DatosSinProcesarSSMVSVrms.csv', 'w')

# use 'a' for append mode

datos = np.asarray(data)

datos=np.delete(datos, 0, axis=1)

datos=np.delete(datos, (9,10,11,12,13,14,15,16,17,18,19,20,21,22), axis=0)

datos=np.delete(datos, np.s_[1300::1], axis=1)

print('este es el movimiento numero: '+ str(MovientoAClasificar)) var = np.asarray(val)

if MovientoAClasificar==1:

f = Path('NombreDeUsuario.csv')#Targets Movimiento 1 if(f.exists()):

df=pd.read_csv('NombreDeUsuario.csv') N=np.asarray(df)

N=np.append(N,var)

N=pd.DataFrame(data=N)

N.to_csv('NombreDeUsuario.csv',sep=' ',float_format='%.2f',index=False)

print(f.exists()) else:

T1=[var]

T1=pd.DataFrame(data=T1)

T1.to_csv('NombreDeUsuario.csv',sep=' ',float_format='%.2f',index=False)

f = Path('MovimientoAClasificarSFSSMVSVrms.csv')#Movimiento uno sin filtro

if(f.exists()):

DatosConProcesamiento1 =

pd.read_csv('MovimientoAClasificarSFSSMVSVrms.csv')

DataFilter.write_file(datos,

'MovimientoAClasificarSFSSMVSVrms.csv', 'a') # use 'a' for append mode

print(f.exists()) else:

DataFilter.write_file(datos,

'MovimientoAClasificarSFSSMVSVrms.csv', 'w') # use 'a' for append mode

#datos = np.asarray(data)

#np.savetxt("TimeSleep.csv", np.transpose(datos), fmt="%d", delimiter=",")

eeg_channels = board.get_eeg_channels(0)

for count, channel in enumerate(eeg_channels):

DataFilter.perform_rolling_filter(datos[channel], 3, AggOperations.MEDIAN.value)

f = Path('MovimientoAClasificarCFSSMVSVrms.csv') #Movimiento 1 con procesamiento

#print(f.exists())

if(f.exists()):

DatosConProcesamiento1 =

pd.read_csv('MovimientoAClasificarCFSSMVSVrms.csv')

DataFilter.write_file(datos,

'MovimientoAClasificarCFSSMVSVrms.csv', 'a') # use 'a' for append mode

print(f.exists()) else:

DataFilter.write_file(datos,

'MovimientoAClasificarCFSSMVSVrms.csv', 'w') # use 'a' for append mode

#Movimiento 1 def start():

MovientoAClasificar=1 print(MovientoAClasificar) toma_datos()

print('Inicia toma de datos')

window = pyglet.window.Window(width=w, height=h) window.set_location(10,10)

@window.event def on_draw():

global a

sprite.draw() a += 1

if a == 40:

a=0

print('Finalizo toma datos')

parar_toma_datos(MovientoAClasificar)

ArreglarDatos() clasificacion() activacion_pin() print(entrada) pyglet.app.exit()

pyglet.app.run() window.close()

boton1=tk.Button(root, text="INICIAR", bg="limegreen",

font=("Verdana",18), width=10,command= start ).place(x=340,y=530) boton6=tk.Button(root, text="Guardar", bg="sandybrown",

command=pulsarGuardar).place(x=540,y=600) nombre=StringVar()

NombreLabel= Label(root, text="Nombre", fg="white", bg="black").place(x=250,y=600)

CuadroNombre= Entry(root, width=32, textvariable=nombre).place( x=320, y=600)

root.mainloop() '''if Deci==0:

entrada=1

activacion_pin() if Deci==1:

entrada=2

activacion_pin() if Deci==2:

entrada=3

activacion_pin() '''

Documento similar