File size: 4,841 Bytes
f2125ab
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
from ultralytics import YOLO  
import streamlit as st 
import plotly.graph_objs as go
from PIL import Image,ImageDraw
import numpy as np 
from io import BytesIO

colors = {
    'Apple Scab Leaf': ['rgb(165, 42, 42)', (165, 42, 42)],  # Brown
    'Apple leaf': ['rgb(128, 0, 128)', (128, 0, 128)],  # Purple
    'Apple rust leaf': ['rgb(0, 255, 0)', (0, 255, 0)],  # Green
    'Bell_pepper leaf spot': ['rgb(255, 215, 0)', (255, 215, 0)],  # Gold
    'Bell_pepper leaf': ['rgb(139, 69, 19)', (139, 69, 19)],  # Brown
    'Blueberry leaf': ['rgb(128, 128, 128)', (128, 128, 128)],  # Gray
    'Cherry leaf': ['rgb(0, 128, 0)', (0, 128, 0)],  # Dark green
    'Corn Gray leaf spot': ['rgb(255, 0, 0)', (255, 0, 0)],  # Red
    'Corn leaf blight': ['rgb(255, 165, 0)', (255, 165, 0)],  # Orange
    'Peach leaf': ['rgb(255, 20, 147)', (255, 20, 147)],  # Pink
    'Potato leaf early blight': ['rgb(255, 105, 180)', (255, 105, 180)],  # Hot pink
    'Potato leaf late blight': ['rgb(0, 0, 139)', (0, 0, 139)],  # Dark blue
    'Potato leaf': ['rgb(218, 112, 214)', (218, 112, 214)],  # Orchid
    'Raspberry leaf': ['rgb(255, 0, 255)', (255, 0, 255)],  # Magenta
    'Soyabean leaf': ['rgb(255, 69, 0)', (255, 69, 0)],  # Red-orange
    'Squash Powdery mildew leaf': ['rgb(0, 255, 255)', (0, 255, 255)],  # Cyan
    'Strawberry leaf': ['rgb(255, 255, 0)', (255, 255, 0)],  # Yellow
    'Tomato Early blight leaf': ['rgb(154, 205, 50)', (154, 205, 50)],  # Yellow-green
    'Tomato Septoria leaf spot': ['rgb(0, 0, 255)', (0, 0, 255)],  # Blue
    'Tomato leaf bacterial spot': ['rgb(255, 99, 71)', (255, 99, 71)],  # Tomato
    'Tomato leaf late blight': ['rgb(46, 139, 87)', (46, 139, 87)],  # Sea green
    'Tomato leaf mosaic virus': ['rgb(255, 192, 203)', (255, 192, 203)],  # Pink
    'Tomato leaf yellow virus': ['rgb(173, 255, 47)', (173, 255, 47)],  # Green-yellow
    'Tomato leaf': ['rgb(0, 128, 128)', (0, 128, 128)],  # Teal
    'Tomato mold leaf': ['rgb(128, 0, 0)', (128, 0, 0)],  # Maroon
    'Tomato two spotted spider mites leaf': ['rgb(70, 130, 180)', (70, 130, 180)],  # Steel blue
    'grape leaf black rot': ['rgb(0, 255, 127)', (0, 255, 127)]  # Spring green
}

frequencies = {
    'Apple Scab Leaf': 0,
    'Apple leaf': 0,
    'Apple rust leaf': 0,
    'Bell_pepper leaf spot': 0,
    'Bell_pepper leaf': 0,
    'Blueberry leaf': 0,
    'Cherry leaf': 0,
    'Corn Gray leaf spot': 0,
    'Corn leaf blight': 0,
    'Peach leaf': 0,
    'Potato leaf early blight': 0,
    'Potato leaf late blight': 0,
    'Potato leaf': 0,
    'Raspberry leaf': 0,
    'Soyabean leaf': 0,
    'Squash Powdery mildew leaf': 0,
    'Strawberry leaf': 0,
    'Tomato Early blight leaf': 0,
    'Tomato Septoria leaf spot': 0,
    'Tomato leaf bacterial spot': 0,
    'Tomato leaf late blight': 0,
    'Tomato leaf mosaic virus': 0,
    'Tomato leaf yellow virus': 0,
    'Tomato leaf': 0,
    'Tomato mold leaf': 0,
    'Tomato two spotted spider mites leaf': 0,
    'grape leaf black rot': 0
}

model = YOLO("best.pt","v8")

def draw_bboxes(image, bboxes ):
    draw = ImageDraw.Draw(image)
    for bbox in bboxes:
        x1, y1, x2, y2 = bbox[0:4]
        class_name = names[bbox[5]]
        color = colors[class_name][1]
    
        if class_name in frequencies : 
            frequencies[class_name] +=1
        else : 
            frequencies[class_name] =1   
        x1,y1,x2,y2 = int(x1),int(y1),int(x2),int(y2)
        draw.rectangle([(x1, y1), (x2, y2)], outline=color, width=2)

        



st.title('Plant(Apple,tomato,corn,..) disease detector using yolov8 ')
image  = st.file_uploader("**put your image for examintion  :** ")


if image is not None :
    image = Image.open(image) 
    #image = image.filter(ImageFilter.MedianFilter(5))
    image_np = np.array(image)
    
    result = model.predict(source=image_np,conf=0.25,save=False)
    names =result[0].names 
    data = result[0].boxes.data.numpy()
    xyxy = data[:,:]
    button = st.button("start analyzing .." , type="primary")

    if button : 

        draw_bboxes(image, xyxy)
        image.save("output.png")
        



        x = list(frequencies.values())
        y = list(frequencies.keys())
        colors_list = [colors[key][0] for key in y]
        # Create a bar plot
        fig = go.Figure(data=[go.Bar(x=y, y=x, marker_color=colors_list)])

        # Display image in the first column
        
        st.image("output.png", caption='Annotated Image', use_column_width=True)
        st.download_button(
                label="Download image",
                data=BytesIO(image.tobytes()),
                file_name="result_image.jpg",
                key="download_button",
                help="Click to download t image.",
            )

        # Display frequencies in the second column

        st.plotly_chart(fig, use_container_width=True)