https://huggingface.co/spaces/hari6677/intrusion_detection/resolve/main/app.py import gradio as gr import tensorflow as tf import numpy as np import os print("๐Ÿš€ Starting Intrusion Detection System...") # Load your trained model try: model = tf.keras.models.load_model('improved_intrusion_detection_model.h5') print("โœ… Model loaded successfully!") except Exception as e: print(f"โŒ Model loading failed: {e}") # Create a dummy model for testing print("โš ๏ธ Using dummy model for testing") def predict_intrusion(features_input): """ Predict if network traffic is normal or attack """ try: # Convert input to array features = [float(x.strip()) for x in features_input.split(',') if x.strip()] # Validate input length if len(features) != 119: return { "prediction": "ERROR", "confidence": 0, "message": f"โŒ Need exactly 119 features, but got {len(features)}" } # Reshape for CNN model (1, 119, 1) features_array = np.array(features).reshape(1, 119, 1) # Make prediction prediction_prob = model.predict(features_array, verbose=0)[0][0] confidence = float(prediction_prob) # Determine result if confidence > 0.5: result = { "prediction": "๐Ÿšจ ATTACK DETECTED", "confidence": round(confidence * 100, 2), "message": f"๐Ÿšจ SECURITY ALERT! Potential intrusion detected with {confidence:.2%} confidence" } else: result = { "prediction": "โœ… NORMAL TRAFFIC", "confidence": round((1 - confidence) * 100, 2), "message": f"โœ… Traffic appears normal with {(1-confidence):.2%} confidence" } return result except Exception as e: return { "prediction": "ERROR", "confidence": 0, "message": f"โŒ Error: {str(e)}" } def generate_sample_features(): """Generate sample feature values for testing""" # Normal traffic sample (mostly zeros and low values) normal_features = [0.0] * 50 + [0.1, 0.2, 0.05, 0.0, 0.15] + [0.0] * 64 # Attack traffic sample (higher values) attack_features = [0.8, 0.9, 0.7, 0.6, 0.85] + [0.0] * 50 + [0.9, 0.8, 0.95] + [0.0] * 61 return { "normal": ", ".join(map(str, normal_features)), "attack": ", ".join(map(str, attack_features)) } # Generate samples samples = generate_sample_features() # Create Gradio interface with gr.Blocks(theme=gr.themes.Soft(), title="Network Intrusion Detection") as demo: gr.Markdown( """ # ๐Ÿ”’ Network Intrusion Detection System **AI-Powered Threat Detection with 99.28% Accuracy** """ ) with gr.Row(): with gr.Column(): gr.Markdown("## ๐Ÿ“Š Input Features") features_input = gr.Textbox( label="Enter 119 Network Features (comma-separated)", placeholder="0.0, 0.1, 0.2, 0.0, 0.15, ... (119 values total)", lines=5 ) with gr.Row(): analyze_btn = gr.Button("๐Ÿš€ Analyze Traffic", variant="primary") clear_btn = gr.Button("๐Ÿ—‘๏ธ Clear") gr.Markdown("### ๐Ÿงช Sample Data") with gr.Row(): normal_btn = gr.Button("๐Ÿ“‹ Load Normal Sample") attack_btn = gr.Button("โš ๏ธ Load Attack Sample") with gr.Column(): gr.Markdown("## ๐Ÿ“ˆ Prediction Results") prediction_output = gr.Label( label="Detection Result", value={"Prediction": "Waiting for input...", "Confidence": "0%"} ) message_output = gr.Textbox( label="Security Alert", interactive=False, lines=3 ) gr.Markdown("### ๐Ÿ“Š Model Information") gr.Markdown(""" - **Model Type**: CNN Deep Learning - **Accuracy**: 99.28% - **Attack Detection**: 99.40% - **False Positive Rate**: 0.90% - **Input Features**: 119 """) # Button actions def load_normal_sample(): return samples["normal"] def load_attack_sample(): return samples["attack"] def clear_inputs(): return "", {"Prediction": "Waiting for input...", "Confidence": "0%"}, "" # Event handlers analyze_btn.click( fn=predict_intrusion, inputs=features_input, outputs=[prediction_output, message_output] ) normal_btn.click( fn=load_normal_sample, outputs=features_input ) attack_btn.click( fn=load_attack_sample, outputs=features_input ) clear_btn.click( fn=clear_inputs, outputs=[features_input, prediction_output, message_output] ) gr.Markdown( """ --- **How to use:** 1. Enter 119 comma-separated numerical values 2. Click "Analyze Traffic" to get prediction 3. Use sample buttons to test with pre-loaded data **Note**: This is a demo interface. For production use, ensure proper model deployment. """ ) # Launch the application if __name__ == "__main__": demo.launch(debug=True)