From f0cdc98876657efe7a88769c15c46cbb4a3b2ce8 Mon Sep 17 00:00:00 2001 From: robincvlr Date: Fri, 19 Jan 2018 13:59:43 +0100 Subject: [PATCH] travail sur la récupération de la décision du réseau de neurones --- python/ANN.py | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++------- python/Training/training.h5 | Bin 0 -> 15872 bytes python/Training/training.json | 2 +- python/datasets/training.h5 | Bin 15856 -> 0 bytes python/main.py | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------- 5 files changed, 114 insertions(+), 41 deletions(-) create mode 100644 python/Training/training.h5 delete mode 100644 python/datasets/training.h5 diff --git a/python/ANN.py b/python/ANN.py index 2fb6beb..f05865a 100644 --- a/python/ANN.py +++ b/python/ANN.py @@ -18,6 +18,7 @@ from sklearn.metrics import confusion_matrix # Réseau de neurones from keras.models import Sequential from keras.layers import Dense +from keras.models import model_from_json ############################################################################### ############################################################################### @@ -88,9 +89,9 @@ classifier.compile(optimizer = 'rmsprop', loss = 'binary_crossentropy', metrics classifier.fit(data_train, target_train, batch_size =5, epochs=500); ############################################################################### -########################################################################################## +############################################################################### #TAUX DE REUSSITE A PARTIR DES DONNEES DE TEST -########################################################################################## +############################################################################### data_pred = classifier.predict(data_test); # Conversion en True ou False les predictions # Si y_pred > 0.5 : True @@ -102,15 +103,60 @@ good_prediction = cm[0, 0] + cm[1, 1]; #dire qu'une attaque est un trafic normal bad_prediction = cm[1, 0] + cm[0, 1]; taux_succes = good_prediction * 100 / (good_prediction + bad_prediction); -########################################################################################## +############################################################################### -########################################################################################## +############################################################################### #SAUVEGARDE DU TRAINING SET -########################################################################################## +############################################################################### #Le modèle est mis au format JSON classifier_json = classifier.to_json(); with open('C:/Users/Utilisateur/PFE/python/Training/training.json',"w") as json_file : json_file.write(classifier_json); #Les poids sont mis en HDF5 -classifier.save_weights("C:/Users/Utilisateur/PFE/python/datasets/training.h5"); -########################################################################################## \ No newline at end of file +classifier.save_weights("C:/Users/Utilisateur/PFE/python/Training/training.h5"); +############################################################################### + +############################################################################### +#FONCTION DE PREDICTION APPELEE DANS LE MAIN +############################################################################### +def predictions(ping_mesured,rssi_mesured): + ############################################################################### + #ARCHITECTURE DU RESEAU DE NEURONES par le biais de la librairie KERAS + #ANN + ############################################################################### + #Création du classifieur + classifier = Sequential(); + #Couche d'entrée donc avec 2 entrées, PING et DELTA_RSSI + classifier.add(Dense(input_dim = 2, output_dim = 3, init = 'uniform', activation = 'sigmoid')); + #Couche cachée + classifier.add(Dense(output_dim = 3, init = 'uniform', activation = 'sigmoid')); + #Sortie du réseau de neurones + classifier.add(Dense(output_dim = 1, init = 'uniform', activation = 'sigmoid')); + ############################################################################### + + ############################################################################### + #LOAD DU TRAINING SET + ############################################################################### + json_file=open('C:/Users/Utilisateur/PFE/python/Training/training.json','r'); + loaded_model_json=json_file.read(); + json_file.close(); + loaded_model=model_from_json(loaded_model_json); + loaded_model.load_weights('C:/Users/Utilisateur/PFE/python/Training/training.h5'); + ############################################################################### + + ############################################################################### + #REALISER DES PREDICTIONS + ############################################################################### + dataset_to_pred = [ping_mesured, rssi_mesured]; + predictions = classifier.predict(dataset_to_pred); + + predictions_named = []; + if predictions > 0.5: + predictions_named.append(0);#NORMAL + #RAS + return 0; + else: + predictions_named.append(1);#ATTAQUE + #DETECTION d'ATTAQUE + return 1; + ############################################################################### \ No newline at end of file diff --git a/python/Training/training.h5 b/python/Training/training.h5 new file mode 100644 index 0000000..0649311 Binary files /dev/null and b/python/Training/training.h5 differ diff --git a/python/Training/training.json b/python/Training/training.json index 570981f..cd3b188 100644 --- a/python/Training/training.json +++ b/python/Training/training.json @@ -1 +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"} \ No newline at end of file +{"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"} \ No newline at end of file diff --git a/python/datasets/training.h5 b/python/datasets/training.h5 deleted file mode 100644 index ab6c9db..0000000 Binary files a/python/datasets/training.h5 and /dev/null differ diff --git a/python/main.py b/python/main.py index 268ae77..2bf9aac 100644 --- a/python/main.py +++ b/python/main.py @@ -10,45 +10,72 @@ Main - prédictions, affichage, vérification du trafic ############################################################################### import tkinter as tkr; import time; -from keras.models import model_from_json -from keras.models import Sequential -import numpy as np +import ANN; +import serial; +import recoder; ############################################################################### -########################################################################################## -#LOAD DU TRAINING SET -########################################################################################## -json_file=open('C:/Users/Utilisateur/PFE/python/Training/training.json','r'); -loaded_model_json=json_file.read(); -json_file.close(); -loaded_model=model_from_json(loaded_model_json); -loaded_model.load_weights('C:/Users/Utilisateur/PFE/python/Training/training.h5'); -########################################################################################## - -########################################################################################## -#REALISER DES PREDICTIONS -########################################################################################## -#PING en ms -ping_mesured = 1000; -#Delta _RSSI entre deux trames en dB (dBm - dBm -> dB) -rssi_mesured = 8; -classifier = Sequential(); -dataset_to_pred = [ping_mesured, rssi_mesured]; -predictions = classifier.predict(dataset_to_pred); - -predictions_named = []; +############################################################################### +#VARIABLES GLOBALES +############################################################################### +ping_mesured=0; +rssi_mesured=0; +cpt_trame=0; +result=0; +############################################################################### -for x in range(0, 1): - if predictions[x] > 0.5: - predictions_named.append("Normal") - else: - predictions_named.append("Attaque") -########################################################################################## +############################################################################## +#DEFINITION DE LA LECTURE DE PORT +############################################################################## +ser = serial.Serial( + #Pour Linux + #port='/dev/ttyACM0', + #Pour Windows + port='COM4', + #Vitesse de communication + baudrate = 9600, + #Parité + parity=serial.PARITY_NONE, + #Bit de stop + stopbits=serial.STOPBITS_ONE, + #Taille du message + bytesize=serial.EIGHTBITS, + #Out + timeout=1 +) +counter=0; +############################################################################## ############################################################################### #FONCTIONS UTILES ############################################################################### +def Data_recover(): + x = ser.readline(); + debut = time.time(); + temp = debut; + #Vérifier si la trame provient d'un emetteur connu + #Travail ici avec un seul et unique emetteur + if(cpt_trame == 0): #PREMIERE TRAME ET TRAME OK + #Récupération du ping + debut = time.time(); + temp = debut; + cpt_trame = cpt_trame +1; + elif(cpt_trame > 0 and ): #PAS LA PREMIERE ET TRAME OK + #Récupération du ping + fin = time.time(); + ping = (fin-temp)*1000; + #Récupération de la trame + trame = x; + #Récupération de la puissance + x = ser.readline(); + #Sortie de boucle + cpt_trame = cpt_trame + 1; + else: #TRAME INCONNUE PREMIERE OU AUTRE + #TRAME INCONNUE = ATTAQUE + result = 1; + def Draw(): + result = ANN.predictions(ping_mesured, rssi_mesured); #FRAME INFORMATIONS infos=tkr.Frame(root,width=1000,height=5000,relief='groove',background='white',bd=3); infos.place(x=10,y=10); @@ -59,12 +86,12 @@ def Draw(): text.config(bg='white', fg='black'); text.pack(); global ping; - ping=tkr.Label(infos,text='\n\nPING(ms) : '); + ping=tkr.Label(infos,text='\n\nPING(ms) : '+ ping_mesured); ping.config(font=('arial', 20, 'bold')); ping.config(bg='white', fg='black'); ping.pack(); global rssi; - rssi=tkr.Label(infos,text='\n\nRSSI(dBm) :'); + rssi=tkr.Label(infos,text='\n\nRSSI(dBm) : '+ rssi_mesured); rssi.config(font=('arial', 20, 'bold')); rssi.config(bg='white', fg='black'); rssi.pack(); -- libgit2 0.21.2