File size: 3,478 Bytes
fa11d8c
 
89fbcb1
 
6da4103
89fbcb1
fa11d8c
 
89fbcb1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7261123
6da4103
 
fa11d8c
 
 
 
 
 
 
 
 
 
 
 
7261123
fa11d8c
 
 
89fbcb1
 
7261123
fa11d8c
 
 
 
 
 
 
 
 
 
 
 
7261123
fa11d8c
 
6da4103
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fa11d8c
6da4103
 
 
 
 
 
 
 
 
 
92ce739
6da4103
 
fa11d8c
 
89fbcb1
 
 
 
 
fa11d8c
 
6da4103
 
 
 
 
 
 
 
 
89fbcb1
6da4103
 
 
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
import gradio as gr
import cv2
import requests
import os
import numpy as np

from ultralytics import YOLO

file_urls = [
    'https://www.dropbox.com/s/b5g97xo901zb3ds/pothole_example.jpg?dl=1',
    'https://www.dropbox.com/s/86uxlxxlm1iaexa/pothole_screenshot.png?dl=1',
    'https://www.dropbox.com/s/7sjfwncffg8xej2/video_7.mp4?dl=1'
]

def download_file(url, save_name):
    if not os.path.exists(save_name):
        file = requests.get(url)
        open(save_name, 'wb').write(file.content)

for i, url in enumerate(file_urls):
    if 'mp4' in file_urls[i]:
        download_file(
            file_urls[i],
            f"video.mp4"
        )
    else:
        download_file(
            file_urls[i],
            f"image_{i}.jpg"
        )

model = YOLO('best.pt')
path  = [['1.jpeg'], ['2.jpeg']]
video_path = [['contoh.mp4']]

def show_preds_image(image_path):
    image = cv2.imread(image_path)
    outputs = model.predict(source=image_path)
    results = outputs[0].cpu().numpy()
    for i, det in enumerate(results.boxes.xyxy):
        cv2.rectangle(
            image,
            (int(det[0]), int(det[1])),
            (int(det[2]), int(det[3])),
            color=(0, 0, 255),
            thickness=2,
            lineType=cv2.LINE_AA
        )
    return cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

def show_preds_video(video_path):
    cap = cv2.VideoCapture(video_path)
    while(cap.isOpened()):
        ret, frame = cap.read()
        if ret:
            frame_copy = frame.copy()
            outputs = model.predict(source=frame)
            results = outputs[0].cpu().numpy()
            for i, det in enumerate(results.boxes.xyxy):
                cv2.rectangle(
                    frame_copy,
                    (int(det[0]), int(det[1])),
                    (int(det[2]), int(det[3])),
                    color=(0, 0, 255),
                    thickness=2,
                    lineType=cv2.LINE_AA
                )
            yield cv2.cvtColor(frame_copy, cv2.COLOR_BGR2RGB)
        else:
            break

def show_preds_webcam(frame):
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    outputs = model.predict(source=frame)
    results = outputs[0].cpu().numpy()
    for i, det in enumerate(results.boxes.xyxy):
        cv2.rectangle(
            frame,
            (int(det[0]), int(det[1])),
            (int(det[2]), int(det[3])),
            color=(0, 0, 255),
            thickness=2,
            lineType=cv2.LINE_AA
        )
    return frame

inputs_image = gr.Image(label="Input Image")
outputs_image = gr.Image(label="Output Image")
interface_image = gr.Interface(
    fn=show_preds_image,
    inputs=inputs_image,
    outputs=outputs_image,
    title="Pothole detector",
    examples=path,
    cache_examples=False,
)

inputs_video = gr.Video(label="Input Video")
outputs_video = gr.Image(label="Output Image")
interface_video = gr.Interface(
    fn=show_preds_video,
    inputs=inputs_video,
    outputs=outputs_video,
    title="Pothole detector",
    examples=video_path,
    cache_examples=False,
)

inputs_webcam = gr.Image(sources="webcam", streaming=True)
outputs_webcam = gr.Image(label="Output Image")
interface_webcam = gr.Interface(
    fn=show_preds_webcam,
    inputs=inputs_webcam,
    outputs=outputs_webcam,
    title="Webcam Object Detection"
)

gr.TabbedInterface(
    [interface_image, interface_video, interface_webcam],
    tab_names=['Image Inference', 'Video Inference', 'Webcam Inference']
).queue().launch()