File size: 4,173 Bytes
e9b6d8d
32519f3
e9b6d8d
bb3539d
 
 
 
 
 
 
 
4d3e7d5
bb3539d
 
 
 
e9b6d8d
32519f3
 
bb3539d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e9b6d8d
bb3539d
 
 
e9b6d8d
 
 
 
 
 
 
bb3539d
 
e9b6d8d
 
bb3539d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e9b6d8d
bb3539d
 
 
 
 
 
 
 
 
 
e9b6d8d
 
 
 
 
bb3539d
 
32519f3
bb3539d
e9b6d8d
 
 
 
bb3539d
e9b6d8d
 
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
132
133
134
135
136
137
138
import gradio as gr
# import torch
from ultralyticsplus import YOLO, render_result
import cv2
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import smtplib

sender_email = "[email protected]"
receiver_email = "[email protected]"
sender_password = "pahifrmjjjwahdnr"
smtp_port = 587
smtp_server = "smtp.gmail.com"
subject = "Accident detected"

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']

def send_email(accident_type):
    body = accident_type

    msg = MIMEMultipart()
    msg['From'] = sender_email
    msg['To'] = receiver_email
    msg['Subject'] = subject

    msg.attach(MIMEText(body, 'plain'))

    filename = "res.png"
    folder = "./result/"
    fullFileName = folder + filename

    attachment = open(fullFileName, 'rb')

    attachment_package = MIMEBase('application', 'octet-stream')
    attachment_package.set_payload((attachment).read())
    encoders.encode_base64(attachment_package)
    attachment_package.add_header('Content-Disposition', "attachment; filename= " + filename)
    msg.attach(attachment_package)

    text = msg.as_string()


    print("Connecting to server")
    gmail_server = smtplib.SMTP(smtp_server, smtp_port)
    gmail_server.starttls()
    gmail_server.login(sender_email, sender_password)
    print("Successfully connected to server")
    print()

    print("Sending email to ", receiver_email)
    gmail_server.sendmail(sender_email, receiver_email, text)
    print("Email sent to ", receiver_email)
    print()

    gmail_server.quit()


def check_acc(box):
    # return format(box.cls)
    res_index_list = box.cls.tolist()
    result = ""

    for index in res_index_list:
        if index ==3:
            result = "car car accident detected"
        elif index==4:
            result = "car bike accident detected"
        elif index==5:
            result = "car person accident detected"
        elif index==6:
            result = "bike bike accident detected"
        elif index==7:
            result = "bike person accident detected"
        elif index ==8:
            result = "car object accident detected"
        elif index == 9:
            result = "bike object accident detected"
    
    return result

def image_predict(image):
    model_path = "best.pt"
    model = YOLO(model_path)
    results = model.predict(image,
                            conf = 0.4,
                            iou = 0.6,
                            imgsz = 640)
    box = results[0].boxes
    res = check_acc(box)
    print("object Type: ", res)

    render = render_result(model=model, image=image, result=results[0])
    # if res == "car car accident detected":
    #     cv2.imwrite("./result/res.png", render)
    # print(render)
    if res == "car car accident detected":
        render.save("./result/res.png")
        send_email(res)

    return (res, render)

def extract_frames(video):
    vidcap = cv2.VideoCapture(video)
    while vidcap.isOpened():
        success, image = vidcap.read()
        if success ==False:
            break
        res, render = image_predict(image)

        if res == "car car accident detected":
            return (res, render)
    return ("", None)

def take_input(image, video):
    if(video != None):
        res = extract_frames(video)
    else:
        res = image_predict(image)
    return res

with gr.Blocks(title="YOLOS Object Detection - ClassCat", css=".gradio-container {background:lightyellow;}") as demo:
    gr.HTML('<h1>Yolo Object Detection</h1>')
    gr.HTML("<br>")
    with gr.Row():
        input_image = gr.Image(label="Input image")
        input_video = gr.Video(label="Input video")
        output_label = gr.Text(label="output label")
        output_image = gr.Image(label="Output image")
    gr.HTML("<br>")
    send_btn = gr.Button("Detect")
    gr.HTML("<br>")

    send_btn.click(fn=take_input, inputs=[input_image, input_video], outputs=[output_label, output_image])

demo.launch(debug=True)