2lu commited on
Commit
bb3539d
·
1 Parent(s): 3727901

yolov8 accident detector

Browse files
Files changed (2) hide show
  1. app.py +108 -15
  2. 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 yolov8_func(image):
8
- #image_size: gr.inputs.Slider = 640,
9
- #conf_threshold: gr.inputs.Slider = 0.4,
10
- #iou_threshold: gr.inputs.Slider = 0.50):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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("Object type: ", box.cls)
23
- # print("Coordinates: ", box.xyxy)
24
- # print("Probability: ", box.conf)
25
 
26
  render = render_result(model=model, image=image, result=results[0])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
- return (render, box.cls)
 
 
 
 
 
 
 
 
 
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", type="pil")
35
- output_image = gr.Image(label="Output image", type="pil")
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=yolov8_func, inputs=[input_image], outputs=[output_image, output_label])
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
- torch==2.1.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