Commit f0cdc98876657efe7a88769c15c46cbb4a3b2ce8
1 parent
bdfec245
travail sur la récupération de la décision du réseau de neurones
Showing
4 changed files
with
114 additions
and
41 deletions
Show diff stats
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(); | ... | ... |