Spaces:
Sleeping
Sleeping
yolov8 accident detector
Browse files- app.py +108 -15
- requirements.txt +2 -1
app.py
CHANGED
@@ -1,44 +1,137 @@
|
|
1 |
import gradio as gr
|
2 |
# import torch
|
3 |
from ultralyticsplus import YOLO, render_result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
5 |
classes: ['car', 'bike', 'person', 'car_car_accident', 'car_bike_accident', 'car_person_accident', 'bike_bike_accidnet', 'bike_person_accident', 'car_object_accident', 'bike_object_accident']
|
6 |
|
7 |
-
def
|
8 |
-
|
9 |
-
|
10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
|
|
|
|
|
|
12 |
model_path = "best.pt"
|
13 |
model = YOLO(model_path)
|
14 |
-
|
15 |
results = model.predict(image,
|
16 |
conf = 0.4,
|
17 |
iou = 0.6,
|
18 |
imgsz = 640)
|
19 |
-
|
20 |
box = results[0].boxes
|
21 |
-
|
22 |
-
print("
|
23 |
-
# print("Coordinates: ", box.xyxy)
|
24 |
-
# print("Probability: ", box.conf)
|
25 |
|
26 |
render = render_result(model=model, image=image, result=results[0])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
|
28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
|
30 |
with gr.Blocks(title="YOLOS Object Detection - ClassCat", css=".gradio-container {background:lightyellow;}") as demo:
|
31 |
gr.HTML('<h1>Yolo Object Detection</h1>')
|
32 |
gr.HTML("<br>")
|
33 |
with gr.Row():
|
34 |
-
input_image = gr.Image(label="Input image"
|
35 |
-
|
36 |
output_label = gr.Text(label="output label")
|
|
|
37 |
gr.HTML("<br>")
|
38 |
send_btn = gr.Button("Detect")
|
39 |
gr.HTML("<br>")
|
40 |
|
41 |
-
send_btn.click(fn=
|
42 |
-
|
43 |
|
44 |
demo.launch(debug=True)
|
|
|
1 |
import gradio as gr
|
2 |
# import torch
|
3 |
from ultralyticsplus import YOLO, render_result
|
4 |
+
import cv2
|
5 |
+
from email.mime.text import MIMEText
|
6 |
+
from email.mime.multipart import MIMEMultipart
|
7 |
+
from email.mime.base import MIMEBase
|
8 |
+
from email import encoders
|
9 |
+
import smtplib
|
10 |
+
|
11 |
+
sender_email = "[email protected]"
|
12 |
+
receiver_email = "[email protected]"
|
13 |
+
sender_password = "pahifrmjjjwahdnr"
|
14 |
+
smtp_port = 587
|
15 |
+
smtp_server = "smtp.gmail.com"
|
16 |
+
subject = "Accident detected"
|
17 |
|
18 |
classes: ['car', 'bike', 'person', 'car_car_accident', 'car_bike_accident', 'car_person_accident', 'bike_bike_accidnet', 'bike_person_accident', 'car_object_accident', 'bike_object_accident']
|
19 |
|
20 |
+
def send_email(accident_type):
|
21 |
+
body = accident_type
|
22 |
+
|
23 |
+
msg = MIMEMultipart()
|
24 |
+
msg['From'] = sender_email
|
25 |
+
msg['To'] = receiver_email
|
26 |
+
msg['Subject'] = subject
|
27 |
+
|
28 |
+
msg.attach(MIMEText(body, 'plain'))
|
29 |
+
|
30 |
+
filename = "res.png"
|
31 |
+
folder = "./result/"
|
32 |
+
fullFileName = folder + filename
|
33 |
+
|
34 |
+
attachment = open(fullFileName, 'rb')
|
35 |
+
|
36 |
+
attachment_package = MIMEBase('application', 'octet-stream')
|
37 |
+
attachment_package.set_payload((attachment).read())
|
38 |
+
encoders.encode_base64(attachment_package)
|
39 |
+
attachment_package.add_header('Content-Disposition', "attachment; filename= " + filename)
|
40 |
+
msg.attach(attachment_package)
|
41 |
+
|
42 |
+
text = msg.as_string()
|
43 |
+
|
44 |
+
|
45 |
+
print("Connecting to server")
|
46 |
+
gmail_server = smtplib.SMTP(smtp_server, smtp_port)
|
47 |
+
gmail_server.starttls()
|
48 |
+
gmail_server.login(sender_email, sender_password)
|
49 |
+
print("Successfully connected to server")
|
50 |
+
print()
|
51 |
+
|
52 |
+
print("Sending email to ", receiver_email)
|
53 |
+
gmail_server.sendmail(sender_email, receiver_email, text)
|
54 |
+
print("Email sent to ", receiver_email)
|
55 |
+
print()
|
56 |
+
|
57 |
+
gmail_server.quit()
|
58 |
+
|
59 |
+
|
60 |
+
def check_acc(box):
|
61 |
+
# return format(box.cls)
|
62 |
+
res_index_list = box.cls.tolist()
|
63 |
+
result = ""
|
64 |
+
|
65 |
+
for index in res_index_list:
|
66 |
+
if index ==3:
|
67 |
+
result = "car car accident detected"
|
68 |
+
elif index==4:
|
69 |
+
result = "car bike accident detected"
|
70 |
+
elif index==5:
|
71 |
+
result = "car person accident detected"
|
72 |
+
elif index==6:
|
73 |
+
result = "bike bike accident detected"
|
74 |
+
elif index==7:
|
75 |
+
result = "bike person accident detected"
|
76 |
+
elif index ==8:
|
77 |
+
result = "car object accident detected"
|
78 |
+
elif index == 9:
|
79 |
+
result = "bike object accident detected"
|
80 |
|
81 |
+
return result
|
82 |
+
|
83 |
+
def image_predict(image):
|
84 |
model_path = "best.pt"
|
85 |
model = YOLO(model_path)
|
|
|
86 |
results = model.predict(image,
|
87 |
conf = 0.4,
|
88 |
iou = 0.6,
|
89 |
imgsz = 640)
|
|
|
90 |
box = results[0].boxes
|
91 |
+
res = check_acc(box)
|
92 |
+
print("object Type: ", res)
|
|
|
|
|
93 |
|
94 |
render = render_result(model=model, image=image, result=results[0])
|
95 |
+
# if res == "car car accident detected":
|
96 |
+
# cv2.imwrite("./result/res.png", render)
|
97 |
+
# print(render)
|
98 |
+
if res == "car car accident detected":
|
99 |
+
render.save("./result/res.png")
|
100 |
+
send_email(res)
|
101 |
+
|
102 |
+
return (res, render)
|
103 |
+
|
104 |
+
def extract_frames(video):
|
105 |
+
vidcap = cv2.VideoCapture(video)
|
106 |
+
while vidcap.isOpened():
|
107 |
+
success, image = vidcap.read()
|
108 |
+
if success ==False:
|
109 |
+
break
|
110 |
+
res, render = image_predict(image)
|
111 |
|
112 |
+
if res == "car car accident detected":
|
113 |
+
return (res, render)
|
114 |
+
return ("", None)
|
115 |
+
|
116 |
+
def take_input(image, video):
|
117 |
+
if(video != None):
|
118 |
+
res = extract_frames(video)
|
119 |
+
else:
|
120 |
+
res = image_predict(image)
|
121 |
+
return res
|
122 |
|
123 |
with gr.Blocks(title="YOLOS Object Detection - ClassCat", css=".gradio-container {background:lightyellow;}") as demo:
|
124 |
gr.HTML('<h1>Yolo Object Detection</h1>')
|
125 |
gr.HTML("<br>")
|
126 |
with gr.Row():
|
127 |
+
input_image = gr.Image(label="Input image")
|
128 |
+
input_video = gr.Video(label="Input video")
|
129 |
output_label = gr.Text(label="output label")
|
130 |
+
output_image = gr.Image(label="Output image")
|
131 |
gr.HTML("<br>")
|
132 |
send_btn = gr.Button("Detect")
|
133 |
gr.HTML("<br>")
|
134 |
|
135 |
+
send_btn.click(fn=take_input, inputs=[input_image, input_video], outputs=[output_label, output_image])
|
|
|
136 |
|
137 |
demo.launch(debug=True)
|
requirements.txt
CHANGED
@@ -1,3 +1,4 @@
|
|
1 |
gradio==4.16.0
|
2 |
-
|
|
|
3 |
ultralyticsplus==0.0.29
|
|
|
1 |
gradio==4.16.0
|
2 |
+
opencv_python==4.7.0.72
|
3 |
+
opencv_python_headless==4.8.0.74
|
4 |
ultralyticsplus==0.0.29
|