Python - Bluetooth y Código de Python

 
Vista:

Bluetooth y Código de Python

Publicado por Alberto Sánchez (1 intervención) el 01/05/2019 23:21:51
Hola.

estoy realizando mi TFG que consiste en clasificación de materiales o cualquier otra cosa mediante un sensor. La función es que un microcontrolador controle el sensor y otros elementos para que me envíe los datos vías bluetooth.

Por otro lado he creado un código en Jupyter con lenguaje Python que entrena al sistema con datos que he tomado para posteriormente hacer un análisis por componentes principales y finalmente un sistema SVM para así clasificar cualquier dato que llegue a este código.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns; sns.set(font_scale=1.2)
import pickle
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
 
Training = pd.read_csv("Trainingcsv.csv")
Training.head()
 
sns.lmplot('Red', 'Green', data=Training, hue='Papel',
           palette='Set1', fit_reg=False, scatter_kws={"s": 70});
 
Colores = Training[['Red','Green','Blue','Ir']].as_matrix()
 
type_label = np.where(Training['Papel']=="Plastificado", 0, np.where(Training['Papel']=="Folio", 1, 2))
 
# Se divide la matriz del dataset en dos partes
 
X = Training.iloc[:,1:5].values
# la submatriz x contiene los valores de las primeras 4 columnas del dataframe y todas las filas
 
y = Training.iloc[:,0].values
# El vector y contiene los valores de la 4 columna (especie)para todas las filas
 
#Aplicamos una transformación de los datos para poder aplicar las propiedades de la distribución normal
 
from sklearn.preprocessing import StandardScaler
X_std = StandardScaler().fit_transform(X)
 
# Calculamos la matriz de covarianza
 
print('NumPy covariance matrix: \n%s' %np.cov(X_std.T))
 
#Calculamos los autovalores y autovectores de la matriz y los mostramos
 
cov_mat = np.cov(X_std.T)
 
eig_vals, eig_vecs = np.linalg.eig(cov_mat)
 
print('Eigenvectors \n%s' %eig_vecs)
print('\nEigenvalues \n%s' %eig_vals)
 
#  Hacemos una lista de parejas (autovector, autovalor) 
eig_pairs = [(np.abs(eig_vals[i]), eig_vecs[:,i]) for i in range(len(eig_vals))]
 
# Ordenamos estas parejas den orden descendiente con la función sort
eig_pairs.sort(key=lambda x: x[0], reverse=True)
 
# Visualizamos la lista de autovalores en orden desdenciente
print('Autovalores en orden descendiente:')
for i in eig_pairs:
    print(i[0])
 
# A partir de los autovalores, calculamos la varianza explicada
tot = sum(eig_vals)
var_exp = [(i / tot)*100 for i in sorted(eig_vals, reverse=True)]
cum_var_exp = np.cumsum(var_exp)
 
# Representamos en un diagrama de barras la varianza explicada por cada autovalor, y la acumulada
with plt.style.context('seaborn-pastel'):
    plt.figure(figsize=(6, 4))
 
    plt.bar(range(4), var_exp, alpha=0.5, align='center',
            label='Varianza individual explicada', color='r')
    plt.step(range(4), cum_var_exp, where='mid', linestyle='--', label='Varianza explicada acumulada')
    plt.ylabel('Ratio de Varianza Explicada')
    plt.xlabel('Componentes Principales')
    plt.legend(loc='best')
    plt.tight_layout()
 
#Generamos la matríz a partir de los pares autovalor-autovector
matrix_w = np.hstack((eig_pairs[0][1].reshape(4,1),
                      eig_pairs[1][1].reshape(4,1)))
 
print('Matriz W:\n', matrix_w)
 
Y = X_std.dot(matrix_w)
 
with plt.style.context('seaborn-whitegrid'):
    plt.figure(figsize=(6, 4))
    for lab, col in zip(('Plastificado', 'Folio', 'Sobre'),
                        ('magenta', 'cyan', 'limegreen')):
        plt.scatter(Y[y==lab, 0],
                    Y[y==lab, 1],
                    label=lab,
                    c=col)
    plt.xlabel('Componente Principal 1')
    plt.ylabel('Componente Principal 2')
    plt.legend(loc='lower center')
    plt.tight_layout()
    plt.show()
 
from sklearn.svm import SVC
svclassifier = SVC(kernel='linear')
svclassifier.fit(Colores, type_label)
 
def TipoPapel(Red, Green, Blue, Ir):
    if(svclassifier.predict([[Red, Green, Blue, Ir]]))==0:
        print('El tipo de Papel es Plastificado')
    if(svclassifier.predict([[Red, Green, Blue, Ir]]))==1:
        print('El tipo de Papel es Folio Común')
    if(svclassifier.predict([[Red, Green, Blue, Ir]]))==2:
        print('El tipo de Papel es Sobre')

Este sería el código el cual cuando ejecuto la función TipoPapel me devuelve el tipo de papel que es en este caso.

Mi duda es la siguiente, ¿como puedo albergar este código en una página web o cualquier otro método para que esté ejecutando la última función esperando datos de entrada (en este caso son 4 datos) continuamente?, ¿cómo podría enviar los datos que adquiero mediante bluetooth en una app que he creado en el movil para que esos datos sean introducidos en la última función de mi código en Python?

Muchas Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder