Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import pandas as pd | |
| import numpy as np | |
| import joblib | |
| import tensorflow as tf | |
| # LOAD MODEL & SCALER | |
| model = tf.keras.models.load_model("mlp_malware.keras") | |
| scaler = joblib.load("scaler.pkl") | |
| feature_names = [ | |
| "filesize", | |
| "E_file", | |
| "E_text", | |
| "E_data", | |
| "AddressOfEntryPoint", | |
| "NumberOfSections", | |
| "SizeOfInitializedData", | |
| "SizeOfImage", | |
| "SizeOfOptionalHeader", | |
| "SizeOfCode", | |
| "DirectoryEntryImportSize", | |
| "ImageBase", | |
| "CheckSum", | |
| "Magic", | |
| "MinorLinkerVersion", | |
| "MajorSubsystemVersion", | |
| "e_lfanew", | |
| "sus_sections", | |
| "PointerToSymbolTable", | |
| "SectionsLength", | |
| "SizeOfStackReserve", | |
| "MajorOperatingSystemVersion", | |
| "non_sus_sections", | |
| "Characteristics", | |
| "NumberOfSymbols", | |
| "BaseOfData", | |
| "MajorImageVersion", | |
| "FH_char5", | |
| "FH_char8", | |
| "OH_DLLchar5" | |
| ] | |
| # PREDICTION FUNCTION | |
| def predict_malware(*inputs): | |
| # inputs → DataFrame | |
| X = pd.DataFrame([inputs], columns=feature_names) | |
| # scale | |
| X_scaled = scaler.transform(X) | |
| # predict | |
| prob = model.predict(X_scaled, verbose=0)[0][0] | |
| pred = int(prob >= 0.5) | |
| label = "Malware" if pred == 1 else "Benign" | |
| # Return dict for API consistency | |
| return { | |
| "prediction_label": label, | |
| "probability_malware": float(prob), | |
| "prediction": pred | |
| } | |
| # UI | |
| inputs = [ | |
| gr.Number(label=feat, value=0.0) | |
| for feat in feature_names | |
| ] | |
| outputs = gr.JSON(label="Prediction Result") | |
| app = gr.Interface( | |
| fn=predict_malware, | |
| inputs=inputs, | |
| outputs=outputs, | |
| title="MLP-based Malware Detection", | |
| description="Malware detection using MLP neural network" | |
| ) | |
| if __name__ == "__main__": | |
| app.launch() | |