From bbc79c01bb903db58dbbc5b51a8aa97eefc151fb Mon Sep 17 00:00:00 2001 From: sinda-esprit1 Date: Sat, 20 Apr 2024 19:17:32 +0200 Subject: [PATCH 1/3] pliiiiiiiiiiz --- Model/NNModel.h5 | Bin 0 -> 66264 bytes Model/NNmodel.ipynb | 0 Model/accidents21_with_quadrant_rank.csv | 11268 ++++++++++ Model/model.ipynb | 0 accidents19and21_with_quadrant_rank.csv | 2 +- accidents19and21_with_quadrants.csv | 24658 --------------------- 6 files changed, 11269 insertions(+), 24659 deletions(-) create mode 100644 Model/NNModel.h5 create mode 100644 Model/NNmodel.ipynb create mode 100644 Model/accidents21_with_quadrant_rank.csv create mode 100644 Model/model.ipynb delete mode 100644 accidents19and21_with_quadrants.csv diff --git a/Model/NNModel.h5 b/Model/NNModel.h5 new file mode 100644 index 0000000000000000000000000000000000000000..19d13ead06cba515d9f7f073149b5238467c1266 GIT binary patch literal 66264 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 Date: Sun, 21 Apr 2024 11:19:48 +0200 Subject: [PATCH 2/3] the model --- Model/the_model.h5 | Bin 0 -> 66592 bytes Model/the_model.py | 93 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 Model/the_model.h5 create mode 100644 Model/the_model.py diff --git a/Model/the_model.h5 b/Model/the_model.h5 new file mode 100644 index 0000000000000000000000000000000000000000..327be09727638f085e2350bb8bf8093fee518f59 GIT binary patch literal 66592 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 T{n0ncf9Cq1TUQZ(igop0+6J@; literal 0 HcmV?d00001 diff --git a/Model/the_model.py b/Model/the_model.py new file mode 100644 index 0000000..01cdf01 --- /dev/null +++ b/Model/the_model.py @@ -0,0 +1,93 @@ +import numpy as np +import pandas as pd +from sklearn.preprocessing import StandardScaler +from sklearn.model_selection import train_test_split +from tensorflow import keras +from keras.callbacks import EarlyStopping + + +df=pd.read_csv("accidents_21_19.csv") +#defien the Y : +def calculate_severity(row): + severity = 0 + + # AccidentCategory + if row['AccidentCategory'] == 1: + severity += 10 + elif row['AccidentCategory'] == 2: + severity += 5 + else: + severity += 1 + + # AccidentType and AccidentTypeDetail + if row['AccidentType'] in [4, 6]: # Collision with oncoming vehicle or pedestrian + severity += 5 + elif row['AccidentTypeDetail'] in [1, 2, 3]: # Driving, turning, or turning/crossing accident + severity += 3 + else: + severity += 1 + + # Involving parameters + if row['InvolvingPedestrian'] == 1: + severity += 5 + if row['InvolvingMotorcycle'] == 1: + severity += 4 + if row['InvolvingBike'] == 1: + severity += 3 + if row['InvolvingCar'] == 1: + severity += 2 + if row['InvolvingHGV'] == 1: + severity += 2 + + return severity + + +df['Severity'] = df.apply(calculate_severity, axis=1) + + +X = df[['AccidentMonth', 'AccidentHour', 'DayOfWeek', 'LightingCondition','RoadCondition' ,'quadrant']] +y = df['Severity'] + +# Split into training and testing sets +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) + +# Scale the features +scaler = StandardScaler() +X_train_scaled = scaler.fit_transform(X_train) +X_test_scaled = scaler.transform(X_test) + + + + + + +# Define your neural network model +model = keras.Sequential([ + keras.layers.Dense(64, activation='relu', input_shape=(X_train_scaled.shape[1],)), + keras.layers.Dense(32, activation='relu', kernel_regularizer=keras.regularizers.l2(0.01)), + keras.layers.Dense(16, activation='relu', kernel_regularizer=keras.regularizers.l2(0.01)), + keras.layers.Dense(1) # Output layer for regression +]) + +# Compile the model +model.compile(optimizer=keras.optimizers.Adam(learning_rate=0.001), + loss='mean_squared_error', + metrics=['mean_absolute_error']) + +# Define early stopping +early_stopping = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True) + +# Define batch size and number of epochs +batch_size = 32 +epochs = 100 + +# Train the model with early stopping +history = model.fit(X_train_scaled, y_train, epochs=epochs, batch_size=batch_size, + validation_split=0.2, callbacks=[early_stopping]) + +# Evaluate on test data +test_loss, test_mae = model.evaluate(X_test_scaled, y_test) +print('Test MAE:', test_mae) + +# Save the model +model.save('the_model.h5') From c80e985db780ca764de69e39b1ea6001cd3880fe Mon Sep 17 00:00:00 2001 From: shaikh Date: Sun, 21 Apr 2024 13:37:24 +0400 Subject: [PATCH 3/3] updates --- Hardware/Sensors.json | 14 ++-- Hardware/Server/serverDummy.py | 31 ++++----- Hardware/getpostSampleClient.py | 25 -------- model_server.py | 109 ++++++++++++++++++++++++++++++++ 4 files changed, 130 insertions(+), 49 deletions(-) create mode 100644 model_server.py diff --git a/Hardware/Sensors.json b/Hardware/Sensors.json index 8950e2e..49d3384 100644 --- a/Hardware/Sensors.json +++ b/Hardware/Sensors.json @@ -1,7 +1,11 @@ { - "velocity": "30", - "Temperature": "15", - "Humidity": "23", - "Speed": "20", - "Light": "9" + "Velocity": 30, + "Temperature": 15, + "Humidity": 23, + "Light": 9, + "Longitude": 52.512937, + "Latitude": 13.389481, + "Day": 2, + "Month": 5, + "Hour": 16 } \ No newline at end of file diff --git a/Hardware/Server/serverDummy.py b/Hardware/Server/serverDummy.py index ad6f352..0b6c441 100644 --- a/Hardware/Server/serverDummy.py +++ b/Hardware/Server/serverDummy.py @@ -21,32 +21,32 @@ def do_POST(self): print("Received sensor data:", sensor_data) self._set_headers() + risk_severity = None + if sensor_data: - risk_model. + risk_severity=risk_model.send_data_to_model(sensor_data) + if risk_severity: # Include the sent data in the response - response_message = {'message': f'Data received successfully {sensor_data}'} + response_message = {'message': {sensor_data}} + else: + response_message = {'message': f'Error Risk severity was not calculated'} + response = json.dumps(response_message) - self.wfile.write(response.encode('utf-8')) - def do_GET(self): - self._set_headers() - response = json.dumps(self.stored_sensor_data) - self.wfile.write(response.encode('utf-8')) class risk_model(): @staticmethod - def risk_model(sensor_data): - risk_model.run_risk_model(sensor_data['Velocity'],sensor_data['Temperature'],sensor_data['Humidity'],sensor_data['Light'],sensor_data['Long'],sensor_data['Velocity']) + def send_data_to_model(sensor_data): + risk_model.run_risk_model(sensor_data['Temperature'],sensor_data['Humidity'],sensor_data['Light'],sensor_data['Longitude'],sensor_data['Latitude'],sensor_data['Day'], sensor_data['Month'],sensor_data['Hour']) @staticmethod - def run_risk_model(velocity, temp, hum, light, lon, lat, day, month, hour): + def run_risk_model(temp, hum, light, lon, lat, day, month, hour): quadrant = risk_model.calculate_quadrant(rtv_lat=lat,rtv_lon=lon) rc = risk_model.calculate_road_condition(temp=temp,hum=hum) model_risk = risk_model.calc_model_risk(month=month, hour=hour, day=day, light=light, rc=rc,quadrant=quadrant) - final_risk = risk_model.calculate_final_risk(model_risk,velocity,velocity_weight=None) - return final_risk + return model_risk @staticmethod def calculate_quadrant(rtv_lat,rtv_lon): #script from asssigner to convert coordinates to quadrant @@ -94,13 +94,6 @@ def calc_model_risk(month=None, hour=None, day=None, light=None, rc=None, quadra print(model_severity[0][0]) return model_severity[0][0] - @staticmethod - def calculate_final_risk(model_severity, velocity=None, velocity_weight=5): #run model with velocity gradient and compare to thresholds - if velocity and velocity_weight is not None: - risk_severity=model_severity * (velocity * velocity_weight) - else: - risk_severity=model_severity - return risk_severity def run(server_class=HTTPServer, handler_class=RequestHandler, port=8080): server_address = ('', port) diff --git a/Hardware/getpostSampleClient.py b/Hardware/getpostSampleClient.py index f9538bf..8f7fb16 100644 --- a/Hardware/getpostSampleClient.py +++ b/Hardware/getpostSampleClient.py @@ -1,16 +1,3 @@ -# import requests - -# sensor = {"Temperature": "15", -# "Speed": "20"} - -# response = requests.get("http://127.0.0.42:8080/Sample.Json")#, params= payload) -# print(response) -# print(response.content) - -# answer = requests.post("http://127.0.0.42:8080/Post.json", data= sensor)#, params= payload) -# print(answer) -# print(answer.content) -########################################################### import requests import json @@ -20,8 +7,6 @@ url = "http://127.0.0.1:8080/" # Change this to your server's address -# Send multiple POST requests with sensor data readings -#for sensor_data in sensor_data_list: post_response = requests.post(url, json=sensor_data_list) if post_response.status_code == 200: print("POST request successful") @@ -29,13 +14,3 @@ else: print("Error:", post_response.status_code) -# Send a GET request to retrieve all stored sensor data -get_response = requests.get(url) - -if get_response.status_code == 200: - print("GET request successful") - stored_sensor_data = get_response.json() - print(stored_sensor_data) -else: - print("Error:", get_response.status_code) - diff --git a/model_server.py b/model_server.py new file mode 100644 index 0000000..7fb45a4 --- /dev/null +++ b/model_server.py @@ -0,0 +1,109 @@ +from http.server import BaseHTTPRequestHandler, HTTPServer +import json +import numpy as np +from sklearn.preprocessing import StandardScaler +from keras.models import load_model + +model=load_model('Model/NNModel.h5') #parameters + +class RequestHandler(BaseHTTPRequestHandler): + def _set_headers(self): + self.send_response(200) + self.send_header('Content-type', 'application/json') + self.end_headers() + + def do_POST(self): + content_length = int(self.headers['Content-Length']) + post_data = self.rfile.read(content_length) + sensor_data = json.loads(post_data.decode('utf-8')) + + # Process sensor data + print("Received sensor data:", sensor_data) + self._set_headers() + + risk_severity = None + + if sensor_data: + risk_severity=risk_model.send_data_to_model(sensor_data) + + print("calculatedd risk_severity") + + if risk_severity: + # Include the sent data in the response + print(f"Sending risk severity ={risk_severity}") + response_message = {'message': {risk_severity}} + else: + print("Error, could not send risk severity") + response_message = {'message': f'Error Risk severity was not calculated'} + response = json.dumps(response_message) + self.wfile.write(response.encode('utf-8')) + + +class risk_model(): + + @staticmethod + def send_data_to_model(sensor_data): + risk_model.run_risk_model(sensor_data['Temperature'],sensor_data['Humidity'],sensor_data['Light'],sensor_data['Longitude'],sensor_data['Latitude'],sensor_data['Day'], sensor_data['Month'],sensor_data['Hour']) + @staticmethod + def run_risk_model(temp, hum, light, lon, lat, day, month, hour): + quadrant = risk_model.calculate_quadrant(rtv_lat=lat,rtv_lon=lon) + rc = risk_model.calculate_road_condition(temp=temp,hum=hum) + model_risk = risk_model.calc_model_risk(month=month, hour=hour, day=day, light=light, rc=rc,quadrant=quadrant) + return model_risk + + @staticmethod + def calculate_quadrant(rtv_lat,rtv_lon): #script from asssigner to convert coordinates to quadrant + berlin_latitude_range = (52.336724, 52.675287) + berlin_long_range = (13.090365, 13.756247) + multiplication_factor = 1000000 + lat_range = (int(berlin_latitude_range[0] * multiplication_factor), int(berlin_latitude_range[1] * multiplication_factor)) + lon_range = (int(berlin_long_range[0] * multiplication_factor), int(berlin_long_range[1] * multiplication_factor)) + step = 100 + lat_range=np.linspace(lat_range[0],lat_range[1],step) + lat_range=lat_range.flatten() + lon_range=np.linspace(lon_range[0],lon_range[1],step) + lat_delta = lat_range[1]-lat_range[0] + lon_delta = lon_range[1]-lon_range[0] + + quadrant_code = 0 + for lon in lon_range: + for lat in lat_range: + quadrant_code=quadrant_code+1 + if lon <= rtv_lon*multiplication_factor <= lon + lon_delta and lat <= rtv_lat*multiplication_factor <= lat + lat_delta: + return quadrant_code + return None + + @staticmethod + def calculate_road_condition(temp=None, hum=None): #use nicologic to convert temp and humidity to road condition (0:dry,1,wet,2:icy) + if temp < 0: + return 2 + elif temp < 10 and hum > 70: + return 2 + elif temp < 10: + return 1 + elif temp >= 30 and hum < 30: + return 0 + elif temp >= 30: + return 1 + else: + return 0 + + @staticmethod + def calc_model_risk(month=None, hour=None, day=None, light=None, rc=None, quadrant=None): #run model with follow parameters: month, hour, day, light condition, road condition, quadrant, + print("running model") + rtv_values_raw = np.array([[month,hour,day,light,rc,quadrant]]) #month, hour, day, light condition, road condition, quadrant_rank, + rtv_vales_scaled = StandardScaler().transform(rtv_values_raw) + model_severity=model.predict(rtv_vales_scaled) + print(model_severity[0][0]) + return model_severity[0][0] + + +def run(server_class=HTTPServer, handler_class=RequestHandler, port=8080): + server_address = ('', port) + httpd = server_class(server_address, handler_class) + print(f"Server running on port {port}") + httpd.serve_forever() + +if __name__ == "__main__": + run() +