nithi060488 commited on
Commit
a3a83e2
·
verified ·
1 Parent(s): 942d1c1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +178 -0
app.py CHANGED
@@ -1,3 +1,181 @@
1
  import trackio
 
 
 
 
 
 
 
 
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  trackio.show()
 
1
  import trackio
2
+ import gradio as gr
3
+ import pandas as pd
4
+ import numpy as np
5
+ import plotly.graph_objects as go
6
+ from sklearn.neural_network import MLPClassifier
7
+ from sklearn.preprocessing import StandardScaler
8
+ import hashlib
9
+ import time
10
 
11
+ # ===============================
12
+ # CORPORATE LOGIN SYSTEM
13
+ # ===============================
14
+
15
+ USERNAME = "admin"
16
+ PASSWORD = "manufacturing123"
17
+
18
+ def authenticate(user, pwd):
19
+ if user == USERNAME and pwd == PASSWORD:
20
+ return gr.update(visible=True), gr.update(visible=False)
21
+ return gr.update(visible=False), gr.update(visible=True)
22
+
23
+ # ===============================
24
+ # LIVE IOT STREAM (PLC Simulation)
25
+ # ===============================
26
+
27
+ def generate_iot_data():
28
+ return pd.DataFrame({
29
+ "temp": np.random.normal(90, 15, 5),
30
+ "vibration": np.random.normal(0.6, 0.3, 5),
31
+ "output": np.random.normal(100, 20, 5)
32
+ })
33
+
34
+ # ===============================
35
+ # NEURAL NETWORK MODEL
36
+ # ===============================
37
+
38
+ base_data = generate_iot_data()
39
+ base_data["failure"] = np.where(base_data["temp"] > 110, 1, 0)
40
+
41
+ scaler = StandardScaler()
42
+ X = scaler.fit_transform(base_data[["temp","vibration","output"]])
43
+ y = base_data["failure"]
44
+
45
+ model = MLPClassifier(hidden_layer_sizes=(32,16), max_iter=500)
46
+ model.fit(X, y)
47
+
48
+ # Save model hash for integrity
49
+ def get_model_hash():
50
+ return hashlib.md5(str(model.coefs_).encode()).hexdigest()
51
+
52
+ original_hash = get_model_hash()
53
+
54
+ # ===============================
55
+ # FGSM-STYLE ATTACK
56
+ # ===============================
57
+
58
+ def fgsm_attack(data, epsilon=5):
59
+ attacked = data.copy()
60
+ attacked["temp"] += epsilon
61
+ return attacked
62
+
63
+ # ===============================
64
+ # ATTACK ENGINE
65
+ # ===============================
66
+
67
+ def apply_attack(data, attack):
68
+
69
+ if attack == "Data Poisoning":
70
+ data["temp"] -= 40
71
+
72
+ elif attack == "Model Evasion":
73
+ data["temp"] = np.where(data["temp"] > 100, 99.5, data["temp"])
74
+
75
+ elif attack == "FGSM Adversarial":
76
+ data = fgsm_attack(data)
77
+
78
+ elif attack == "Model Replacement":
79
+ global model
80
+ model = MLPClassifier() # replace with empty weak model
81
+
82
+ return data
83
+
84
+ # ===============================
85
+ # DEFENSE LAYER
86
+ # ===============================
87
+
88
+ def defense_layer(data):
89
+
90
+ if data["temp"].mean() < 50:
91
+ return "⚠ Data Poisoning Detected"
92
+
93
+ if get_model_hash() != original_hash:
94
+ return "⚠ Model Integrity Compromised"
95
+
96
+ if data["temp"].std() < 3:
97
+ return "⚠ Adversarial Pattern Detected"
98
+
99
+ return "✅ System Secure"
100
+
101
+ # ===============================
102
+ # MAIN SIMULATION
103
+ # ===============================
104
+
105
+ def run_system(attack, defense_toggle):
106
+
107
+ data = generate_iot_data()
108
+
109
+ before_scaled = scaler.transform(data[["temp","vibration","output"]])
110
+ before_pred = model.predict(before_scaled)
111
+
112
+ if attack != "None":
113
+ data = apply_attack(data, attack)
114
+
115
+ after_scaled = scaler.transform(data[["temp","vibration","output"]])
116
+ after_pred = model.predict(after_scaled)
117
+
118
+ risk_score = int(sum(after_pred) * 15)
119
+
120
+ if attack != "None" and defense_toggle == "OFF":
121
+ risk_score += 40
122
+
123
+ if defense_toggle == "ON":
124
+ defense_status = defense_layer(data)
125
+ else:
126
+ defense_status = "❌ Defense Disabled"
127
+
128
+ # Risk Gauge
129
+ gauge = go.Figure(go.Indicator(
130
+ mode="gauge+number",
131
+ value=risk_score,
132
+ title={'text': "Enterprise Risk Index"},
133
+ gauge={
134
+ 'axis': {'range': [0,100]},
135
+ 'steps': [
136
+ {'range':[0,30],'color':"green"},
137
+ {'range':[30,70],'color':"yellow"},
138
+ {'range':[70,100],'color':"red"}
139
+ ]
140
+ }
141
+ ))
142
+
143
+ # SCADA Live Chart
144
+ scada_chart = go.Figure()
145
+ scada_chart.add_trace(go.Bar(y=data["temp"], name="PLC Temperature"))
146
+ scada_chart.update_layout(title="Live SCADA - PLC Temperature")
147
+
148
+ return gauge, scada_chart, defense_status
149
+
150
+ # ===============================
151
+ # CORPORATE EXECUTIVE UI
152
+ # ===============================
153
+
154
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
155
+
156
+ gr.Markdown("# 🏭 Smart Factory AI Security Command Center")
157
+ gr.Markdown("Industry 4.0 | AI Attack Simulation | Executive Monitoring")
158
+
159
+ login_box = gr.Column()
160
+ dashboard_box = gr.Column(visible=False)
161
+
162
+ with login_box:
163
+ user = gr.Textbox(label="Username")
164
+ pwd = gr.Textbox(label="Password", type="password")
165
+ login_btn = gr.Button("Login")
166
+
167
+ with dashboard_box:
168
+ attack = gr.Dropdown(["None","Data Poisoning","Model Evasion","FGSM Adversarial","Model Replacement"], label="Select AI Attack")
169
+ defense = gr.Radio(["ON","OFF"], label="Defense System")
170
+
171
+ run_btn = gr.Button("Run Simulation")
172
+
173
+ risk_output = gr.Plot(label="Risk Gauge")
174
+ scada_output = gr.Plot(label="SCADA Live View")
175
+ defense_text = gr.Textbox(label="Defense Status")
176
+
177
+ login_btn.click(authenticate, [user, pwd], [dashboard_box, login_box])
178
+ run_btn.click(run_system, [attack, defense], [risk_output, scada_output, defense_text])
179
+
180
+ demo.launch()
181
  trackio.show()