File size: 3,209 Bytes
3bc4804
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import gradio as gr
import pandas as pd
import joblib
from sklearn.preprocessing import LabelEncoder

# Load the dataset and get the column names
dataset = pd.read_csv('Covid Dataset.csv')
columns_to_drop = ['Wearing Masks', 'Sanitization from Market']
dataset = dataset.drop(columns_to_drop, axis=1)
column_names = dataset.columns.tolist()

# Define a function to make predictions using the selected models
def predict_covid(*symptoms):
    # Convert None values to Falses
    symptoms = [False if symptom is None else symptom for symptom in symptoms]
    
    if sum(symptoms) == 0:
        return "COVID-19 Negative"
    
    # Load the saved models
    model_logreg = joblib.load('logreg_model.h5')
    model_rf_classifier = joblib.load('rf_classifier_model.h5')
    model_dt_classifier = joblib.load('dt_classifier_model.h5')
    model_knn_classifier = joblib.load('knn_classifier_model.h5')
    model_svm_classifier = joblib.load('svm_classifier_model.h5')
    model_ann_classifier = joblib.load('ann_model.h5')
    voting_classifier = joblib.load('voting_classifier_model.h5')
    stacking_classifier = joblib.load('stacking_classifier_model.h5')

    # Prepare the input data
    label_encoder = LabelEncoder()
    input_data = pd.DataFrame([list(symptoms)], columns=column_names[:-1])
    encoded_input_data = input_data.copy()
    for column in encoded_input_data.columns:
        if encoded_input_data[column].dtype == object:
            encoded_input_data[column] = label_encoder.transform(encoded_input_data[column])

    # Make predictions using the selected models
    logreg_prediction = int(model_logreg.predict(encoded_input_data)[0])
    rf_prediction = int(model_rf_classifier.predict(encoded_input_data)[0])
    dt_prediction = int(model_dt_classifier.predict(encoded_input_data)[0])
    knn_prediction = int(model_knn_classifier.predict(encoded_input_data)[0])
    svm_prediction = int(model_svm_classifier.predict(encoded_input_data)[0])
    ann_prediction = int(model_ann_classifier.predict(encoded_input_data)[0])
    voting_prediction = int(voting_classifier.predict(encoded_input_data)[0])
    stacking_prediction = int(stacking_classifier.predict(encoded_input_data)[0])

    # Determine the overall prediction
    prediction = 1 if sum([logreg_prediction, rf_prediction, dt_prediction, knn_prediction,
                          svm_prediction, ann_prediction, voting_prediction, stacking_prediction]) >= 4 else 0

    # Return the prediction
    return "COVID-19 Positive" if prediction == 1 else "COVID-19 Negative"

# Create a list of checkboxes for the dataset columns
checkboxes = [gr.inputs.Checkbox(label=column_name) for column_name in column_names[:-1]]

# Create the input interface with the checkboxes
inputs = checkboxes

# Create the output interface with the predicted labels
outputs = gr.outputs.Label(num_top_classes=1, label="COVID-19 Status")
title = "COVID-19 Detection"
description = "Select your symptoms and contact history to check if you have COVID-19"
final_model = gr.Interface(fn=predict_covid, inputs=inputs, outputs=outputs, title=title, description=description)

# Create the Gradio app
if __name__ == '__main__':
    final_model.launch(inline=False)