Commit f0cdc98876657efe7a88769c15c46cbb4a3b2ce8

Authored by rcavalie
1 parent bdfec245

travail sur la récupération de la décision du réseau de neurones

@@ -18,6 +18,7 @@ from sklearn.metrics import confusion_matrix @@ -18,6 +18,7 @@ from sklearn.metrics import confusion_matrix
18 # Réseau de neurones 18 # Réseau de neurones
19 from keras.models import Sequential 19 from keras.models import Sequential
20 from keras.layers import Dense 20 from keras.layers import Dense
  21 +from keras.models import model_from_json
21 ############################################################################### 22 ###############################################################################
22 23
23 ############################################################################### 24 ###############################################################################
@@ -88,9 +89,9 @@ classifier.compile(optimizer = 'rmsprop', loss = 'binary_crossentropy', metrics @@ -88,9 +89,9 @@ classifier.compile(optimizer = 'rmsprop', loss = 'binary_crossentropy', metrics
88 classifier.fit(data_train, target_train, batch_size =5, epochs=500); 89 classifier.fit(data_train, target_train, batch_size =5, epochs=500);
89 ############################################################################### 90 ###############################################################################
90 91
91 -########################################################################################## 92 +###############################################################################
92 #TAUX DE REUSSITE A PARTIR DES DONNEES DE TEST 93 #TAUX DE REUSSITE A PARTIR DES DONNEES DE TEST
93 -########################################################################################## 94 +###############################################################################
94 data_pred = classifier.predict(data_test); 95 data_pred = classifier.predict(data_test);
95 # Conversion en True ou False les predictions 96 # Conversion en True ou False les predictions
96 # Si y_pred > 0.5 : True 97 # Si y_pred > 0.5 : True
@@ -102,15 +103,60 @@ good_prediction = cm[0, 0] + cm[1, 1]; @@ -102,15 +103,60 @@ good_prediction = cm[0, 0] + cm[1, 1];
102 #dire qu'une attaque est un trafic normal 103 #dire qu'une attaque est un trafic normal
103 bad_prediction = cm[1, 0] + cm[0, 1]; 104 bad_prediction = cm[1, 0] + cm[0, 1];
104 taux_succes = good_prediction * 100 / (good_prediction + bad_prediction); 105 taux_succes = good_prediction * 100 / (good_prediction + bad_prediction);
105 -########################################################################################## 106 +###############################################################################
106 107
107 -########################################################################################## 108 +###############################################################################
108 #SAUVEGARDE DU TRAINING SET 109 #SAUVEGARDE DU TRAINING SET
109 -########################################################################################## 110 +###############################################################################
110 #Le modèle est mis au format JSON 111 #Le modèle est mis au format JSON
111 classifier_json = classifier.to_json(); 112 classifier_json = classifier.to_json();
112 with open('C:/Users/Utilisateur/PFE/python/Training/training.json',"w") as json_file : 113 with open('C:/Users/Utilisateur/PFE/python/Training/training.json',"w") as json_file :
113 json_file.write(classifier_json); 114 json_file.write(classifier_json);
114 #Les poids sont mis en HDF5 115 #Les poids sont mis en HDF5
115 -classifier.save_weights("C:/Users/Utilisateur/PFE/python/datasets/training.h5");  
116 -##########################################################################################  
117 \ No newline at end of file 116 \ No newline at end of file
  117 +classifier.save_weights("C:/Users/Utilisateur/PFE/python/Training/training.h5");
  118 +###############################################################################
  119 +
  120 +###############################################################################
  121 +#FONCTION DE PREDICTION APPELEE DANS LE MAIN
  122 +###############################################################################
  123 +def predictions(ping_mesured,rssi_mesured):
  124 + ###############################################################################
  125 + #ARCHITECTURE DU RESEAU DE NEURONES par le biais de la librairie KERAS
  126 + #ANN
  127 + ###############################################################################
  128 + #Création du classifieur
  129 + classifier = Sequential();
  130 + #Couche d'entrée donc avec 2 entrées, PING et DELTA_RSSI
  131 + classifier.add(Dense(input_dim = 2, output_dim = 3, init = 'uniform', activation = 'sigmoid'));
  132 + #Couche cachée
  133 + classifier.add(Dense(output_dim = 3, init = 'uniform', activation = 'sigmoid'));
  134 + #Sortie du réseau de neurones
  135 + classifier.add(Dense(output_dim = 1, init = 'uniform', activation = 'sigmoid'));
  136 + ###############################################################################
  137 +
  138 + ###############################################################################
  139 + #LOAD DU TRAINING SET
  140 + ###############################################################################
  141 + json_file=open('C:/Users/Utilisateur/PFE/python/Training/training.json','r');
  142 + loaded_model_json=json_file.read();
  143 + json_file.close();
  144 + loaded_model=model_from_json(loaded_model_json);
  145 + loaded_model.load_weights('C:/Users/Utilisateur/PFE/python/Training/training.h5');
  146 + ###############################################################################
  147 +
  148 + ###############################################################################
  149 + #REALISER DES PREDICTIONS
  150 + ###############################################################################
  151 + dataset_to_pred = [ping_mesured, rssi_mesured];
  152 + predictions = classifier.predict(dataset_to_pred);
  153 +
  154 + predictions_named = [];
  155 + if predictions > 0.5:
  156 + predictions_named.append(0);#NORMAL
  157 + #RAS
  158 + return 0;
  159 + else:
  160 + predictions_named.append(1);#ATTAQUE
  161 + #DETECTION d'ATTAQUE
  162 + return 1;
  163 + ###############################################################################
118 \ No newline at end of file 164 \ No newline at end of file
python/datasets/training.h5 renamed to python/Training/training.h5
No preview for this file type
python/Training/training.json
1 -{"class_name": "Sequential", "config": [{"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "batch_input_shape": [null, 2], "dtype": "float32", "units": 3, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomUniform", "config": {"minval": -0.05, "maxval": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_3", "trainable": true, "units": 3, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomUniform", "config": {"minval": -0.05, "maxval": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_4", "trainable": true, "units": 1, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomUniform", "config": {"minval": -0.05, "maxval": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}], "keras_version": "2.1.2", "backend": "tensorflow"}  
2 \ No newline at end of file 1 \ No newline at end of file
  2 +{"class_name": "Sequential", "config": [{"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "batch_input_shape": [null, 2], "dtype": "float32", "units": 3, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomUniform", "config": {"minval": -0.05, "maxval": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "units": 3, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomUniform", "config": {"minval": -0.05, "maxval": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_3", "trainable": true, "units": 1, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomUniform", "config": {"minval": -0.05, "maxval": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}], "keras_version": "2.1.2", "backend": "tensorflow"}
3 \ No newline at end of file 3 \ No newline at end of file
@@ -10,45 +10,72 @@ Main - prédictions, affichage, vérification du trafic @@ -10,45 +10,72 @@ Main - prédictions, affichage, vérification du trafic
10 ############################################################################### 10 ###############################################################################
11 import tkinter as tkr; 11 import tkinter as tkr;
12 import time; 12 import time;
13 -from keras.models import model_from_json  
14 -from keras.models import Sequential  
15 -import numpy as np 13 +import ANN;
  14 +import serial;
  15 +import recoder;
16 ############################################################################### 16 ###############################################################################
17 17
18 -##########################################################################################  
19 -#LOAD DU TRAINING SET  
20 -##########################################################################################  
21 -json_file=open('C:/Users/Utilisateur/PFE/python/Training/training.json','r');  
22 -loaded_model_json=json_file.read();  
23 -json_file.close();  
24 -loaded_model=model_from_json(loaded_model_json);  
25 -loaded_model.load_weights('C:/Users/Utilisateur/PFE/python/Training/training.h5');  
26 -##########################################################################################  
27 -  
28 -##########################################################################################  
29 -#REALISER DES PREDICTIONS  
30 -##########################################################################################  
31 -#PING en ms  
32 -ping_mesured = 1000;  
33 -#Delta _RSSI entre deux trames en dB (dBm - dBm -> dB)  
34 -rssi_mesured = 8;  
35 -classifier = Sequential();  
36 -dataset_to_pred = [ping_mesured, rssi_mesured];  
37 -predictions = classifier.predict(dataset_to_pred);  
38 -  
39 -predictions_named = []; 18 +###############################################################################
  19 +#VARIABLES GLOBALES
  20 +###############################################################################
  21 +ping_mesured=0;
  22 +rssi_mesured=0;
  23 +cpt_trame=0;
  24 +result=0;
  25 +###############################################################################
40 26
41 -for x in range(0, 1):  
42 - if predictions[x] > 0.5:  
43 - predictions_named.append("Normal")  
44 - else:  
45 - predictions_named.append("Attaque")  
46 -########################################################################################## 27 +##############################################################################
  28 +#DEFINITION DE LA LECTURE DE PORT
  29 +##############################################################################
  30 +ser = serial.Serial(
  31 + #Pour Linux
  32 + #port='/dev/ttyACM0',
  33 + #Pour Windows
  34 + port='COM4',
  35 + #Vitesse de communication
  36 + baudrate = 9600,
  37 + #Parité
  38 + parity=serial.PARITY_NONE,
  39 + #Bit de stop
  40 + stopbits=serial.STOPBITS_ONE,
  41 + #Taille du message
  42 + bytesize=serial.EIGHTBITS,
  43 + #Out
  44 + timeout=1
  45 +)
  46 +counter=0;
  47 +##############################################################################
47 48
48 ############################################################################### 49 ###############################################################################
49 #FONCTIONS UTILES 50 #FONCTIONS UTILES
50 ############################################################################### 51 ###############################################################################
  52 +def Data_recover():
  53 + x = ser.readline();
  54 + debut = time.time();
  55 + temp = debut;
  56 + #Vérifier si la trame provient d'un emetteur connu
  57 + #Travail ici avec un seul et unique emetteur
  58 + if(cpt_trame == 0): #PREMIERE TRAME ET TRAME OK
  59 + #Récupération du ping
  60 + debut = time.time();
  61 + temp = debut;
  62 + cpt_trame = cpt_trame +1;
  63 + elif(cpt_trame > 0 and ): #PAS LA PREMIERE ET TRAME OK
  64 + #Récupération du ping
  65 + fin = time.time();
  66 + ping = (fin-temp)*1000;
  67 + #Récupération de la trame
  68 + trame = x;
  69 + #Récupération de la puissance
  70 + x = ser.readline();
  71 + #Sortie de boucle
  72 + cpt_trame = cpt_trame + 1;
  73 + else: #TRAME INCONNUE PREMIERE OU AUTRE
  74 + #TRAME INCONNUE = ATTAQUE
  75 + result = 1;
  76 +
51 def Draw(): 77 def Draw():
  78 + result = ANN.predictions(ping_mesured, rssi_mesured);
52 #FRAME INFORMATIONS 79 #FRAME INFORMATIONS
53 infos=tkr.Frame(root,width=1000,height=5000,relief='groove',background='white',bd=3); 80 infos=tkr.Frame(root,width=1000,height=5000,relief='groove',background='white',bd=3);
54 infos.place(x=10,y=10); 81 infos.place(x=10,y=10);
@@ -59,12 +86,12 @@ def Draw(): @@ -59,12 +86,12 @@ def Draw():
59 text.config(bg='white', fg='black'); 86 text.config(bg='white', fg='black');
60 text.pack(); 87 text.pack();
61 global ping; 88 global ping;
62 - ping=tkr.Label(infos,text='\n\nPING(ms) : '); 89 + ping=tkr.Label(infos,text='\n\nPING(ms) : '+ ping_mesured);
63 ping.config(font=('arial', 20, 'bold')); 90 ping.config(font=('arial', 20, 'bold'));
64 ping.config(bg='white', fg='black'); 91 ping.config(bg='white', fg='black');
65 ping.pack(); 92 ping.pack();
66 global rssi; 93 global rssi;
67 - rssi=tkr.Label(infos,text='\n\nRSSI(dBm) :'); 94 + rssi=tkr.Label(infos,text='\n\nRSSI(dBm) : '+ rssi_mesured);
68 rssi.config(font=('arial', 20, 'bold')); 95 rssi.config(font=('arial', 20, 'bold'));
69 rssi.config(bg='white', fg='black'); 96 rssi.config(bg='white', fg='black');
70 rssi.pack(); 97 rssi.pack();