File size: 1,807 Bytes
4f82165
d70af30
8a2c474
8c73bdf
8877f9e
8a2c474
a0dde26
8a2c474
 
d70af30
8a2c474
 
d70af30
4f82165
 
8a2c474
4f82165
 
8a2c474
4f82165
 
 
 
 
 
 
 
 
6b33fcc
 
 
 
 
 
 
 
 
 
4f82165
8a2c474
 
 
 
4f82165
 
59d907e
4f82165
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from tensorflow.keras.models import load_model
from tensorflow.keras.initializers import Orthogonal
from tensorflow.keras.utils import custom_object_scope
from tensorflow.keras.layers import LSTM
import gradio as gr
import pandas as pd
import numpy as np
# Initialize LSTM layer correctly without time_major
lstm_layer = LSTM(64, return_sequences=True)

# Register custom initializers or objects when loading the model
with custom_object_scope({'Orthogonal': Orthogonal}):
    model = load_model('models/lstm-combinedmodel.h5')

def predict_from_csv(file_path):
    # Load the data from CSV
    data = pd.read_csv(file_path)
    
    # Reorder and preprocess data if necessary
    required_columns = ['CAN ID', 'RTR', 'DLC', 'Data1', 'Data2', 'Data3', 'Data4', 'Data5', 'Data6', 'Data7', 'Data8']
    data = data[required_columns]
    
    # Convert data to numpy array or the format your model expects
    input_data = data.values
    
    # Predict using the model
    predictions = model.predict(input_data)
    
      # Determine the predicted class and confidence
    predicted_class = np.argmax(predictions, axis=1)[0]
    confidence = np.max(predictions, axis=1)[0]

    # Map numeric class to label
    class_labels = {0: "Normal", 1: "Anomaly"}
    label = class_labels[predicted_class]
    output = f"Predicted Class: {label}, Confidence: {confidence:.4f}"
    
    return output

def interface_func(uploaded_file):
    # Use the prediction function on the uploaded file path
    predictions = predict_from_csv(uploaded_file.name)
    return predictions

iface = gr.Interface(fn=interface_func,
                     inputs=gr.File(label="Upload CSV"),
                     outputs="text",
                     description="Upload a CSV file with the specified columns to predict.")

iface.launch()