Commit f0cdc98876657efe7a88769c15c46cbb4a3b2ce8

Authored by rcavalie
1 parent bdfec245

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

python/ANN.py
... ... @@ -18,6 +18,7 @@ from sklearn.metrics import confusion_matrix
18 18 # Réseau de neurones
19 19 from keras.models import Sequential
20 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 89 classifier.fit(data_train, target_train, batch_size =5, epochs=500);
89 90 ###############################################################################
90 91  
91   -##########################################################################################
  92 +###############################################################################
92 93 #TAUX DE REUSSITE A PARTIR DES DONNEES DE TEST
93   -##########################################################################################
  94 +###############################################################################
94 95 data_pred = classifier.predict(data_test);
95 96 # Conversion en True ou False les predictions
96 97 # Si y_pred > 0.5 : True
... ... @@ -102,15 +103,60 @@ good_prediction = cm[0, 0] + cm[1, 1];
102 103 #dire qu'une attaque est un trafic normal
103 104 bad_prediction = cm[1, 0] + cm[0, 1];
104 105 taux_succes = good_prediction * 100 / (good_prediction + bad_prediction);
105   -##########################################################################################
  106 +###############################################################################
106 107  
107   -##########################################################################################
  108 +###############################################################################
108 109 #SAUVEGARDE DU TRAINING SET
109   -##########################################################################################
  110 +###############################################################################
110 111 #Le modèle est mis au format JSON
111 112 classifier_json = classifier.to_json();
112 113 with open('C:/Users/Utilisateur/PFE/python/Training/training.json',"w") as json_file :
113 114 json_file.write(classifier_json);
114 115 #Les poids sont mis en HDF5
115   -classifier.save_weights("C:/Users/Utilisateur/PFE/python/datasets/training.h5");
116   -##########################################################################################
117 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 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 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 3 \ No newline at end of file
... ...
python/main.py
... ... @@ -10,45 +10,72 @@ Main - prédictions, affichage, vérification du trafic
10 10 ###############################################################################
11 11 import tkinter as tkr;
12 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 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 77 def Draw():
  78 + result = ANN.predictions(ping_mesured, rssi_mesured);
52 79 #FRAME INFORMATIONS
53 80 infos=tkr.Frame(root,width=1000,height=5000,relief='groove',background='white',bd=3);
54 81 infos.place(x=10,y=10);
... ... @@ -59,12 +86,12 @@ def Draw():
59 86 text.config(bg='white', fg='black');
60 87 text.pack();
61 88 global ping;
62   - ping=tkr.Label(infos,text='\n\nPING(ms) : ');
  89 + ping=tkr.Label(infos,text='\n\nPING(ms) : '+ ping_mesured);
63 90 ping.config(font=('arial', 20, 'bold'));
64 91 ping.config(bg='white', fg='black');
65 92 ping.pack();
66 93 global rssi;
67   - rssi=tkr.Label(infos,text='\n\nRSSI(dBm) :');
  94 + rssi=tkr.Label(infos,text='\n\nRSSI(dBm) : '+ rssi_mesured);
68 95 rssi.config(font=('arial', 20, 'bold'));
69 96 rssi.config(bg='white', fg='black');
70 97 rssi.pack();
... ...