Spaces:
Sleeping
Sleeping
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) | |