File size: 3,620 Bytes
3651db3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import streamlit as st
from PIL import Image
import pandas as pd
import numpy as np
from keras.models import load_model
model = load_model('./model.h5')

# Classification report data
data = {
    "classes": ['Pepper__bell___Bacterial_spot',
                    'Pepper__bell___healthy',
                    'Potato___Early_blight',
                    'Potato___Late_blight',
                    'Potato___healthy',
                    'Tomato_Bacterial_spot',
                    'Tomato_Early_blight',
                    'Tomato_Late_blight',
                    'Tomato_Leaf_Mold',
                    'Tomato_Septoria_leaf_spot',
                    'Tomato_Spider_mites_Two_spotted_spider_mite',
                    'Tomato__Target_Spot',
                    'Tomato__Tomato_YellowLeaf__Curl_Virus',
                    'Tomato__Tomato_mosaic_virus',
                    'Tomato_healthy'],
    "precision": [0.99, 0.99, 0.98, 0.83, 0.41, 0.99, 0.74, 1.00, 1.00, 0.91, 0.95, 0.60, 1.00, 0.87, 0.91],
    "recall": [0.99, 0.86, 1.00, 0.99, 1.00, 0.74, 0.90, 0.83, 0.71, 0.97, 0.64, 0.99, 0.98, 0.98, 1.00],
    "f1-score": [0.99, 0.92, 0.99, 0.90, 0.58, 0.85, 0.82, 0.90, 0.83, 0.94, 0.77, 0.74, 0.99, 0.92, 0.95],
    "support": [199, 296, 213, 205, 28, 399, 206, 379, 187, 359, 326, 290, 629, 81, 331]
}

# Create a DataFrame
df = pd.DataFrame(data)

def get_predictions(immg):
    # from skimage import io
    # from keras.preprocessing import image
    import keras.utils as image
    #path='imbalanced/Scratch/Scratch_400.jpg'
    # "C:\Users\prati\Desktop\AML 3104 final project\PlantVillage\Pepper__bell___Bacterial_spot\00f2e69a-1e56-412d-8a79-fdce794a17e4___JR_B.Spot 3132.JPG"
    # pth = immg
    # show_img=image.load_img(pth, grayscale=False, target_size=(200, 200))
    disease_class = data["classes"]

    x = image.img_to_array(immg)
    x = np.expand_dims(x, axis = 0)
    x = np.array(x, 'float32')
    x /= 255
    
    custom = model.predict(x)
    print(custom[0])

    # x = x.reshape([64, 64])

    #plt.gray()
    # plt.imshow(show_img)
    # plt.show()

    a=custom[0]
    ind=np.argmax(a)
            
    print('Prediction:',disease_class[ind])
    return(disease_class[ind])


#User Interface---------------------------------------------------------


pred_flag = False
def main():
    st.label_visibility='collapse'
    st.title('Plant desise identification')
    st.write('# Detecting plant desise using deep learnings dense net model')
    # Display the DataFrame as a table in Streamlit
    st.header('Evaluation Report:')
    

    # Create two columns
    col1, col2 = st.columns(2)

    # Add content to the first column
    with col1:
        st.write('Classification Report:')
        st.table(df)

    # Add content to the second column
    with col2:
        st.write('Confussion matrix')
        st.image("./confussion_matrix.png",width=650)

    uploaded_file = st.file_uploader("", type=['jpg','png','jpeg'])
    if uploaded_file is not None:
        image = Image.open(uploaded_file)
        st.markdown('<p style="text-align: center;"><label>Image : </label></p>',unsafe_allow_html=True)
        st.image(image,width=500)
        # image = Image.open()
    if st.button("Predict"):
        resized_image = image.resize((64, 64))
        pred_cls = get_predictions(resized_image)
        st.markdown('<p style="text-align: center;"><label>Prediction : </label></p>',unsafe_allow_html=True)
        # st.image(image,width=900)
        st.markdown(pred_cls)
        # result =''
        # st.success('The output is {}'.format(result))
if __name__ == '__main__': #
    main()