File size: 3,520 Bytes
fa11d8c
 
89fbcb1
 
6da4103
89fbcb1
fa11d8c
 
458ae63
 
 
 
 
89fbcb1
458ae63
 
 
 
89fbcb1
458ae63
 
 
 
 
 
 
 
 
 
 
89fbcb1
7261123
6da4103
 
fa11d8c
 
 
 
 
 
 
 
 
 
 
 
7261123
fa11d8c
 
 
89fbcb1
 
7261123
fa11d8c
 
 
 
 
 
 
 
 
 
 
 
7261123
fa11d8c
 
6da4103
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fa11d8c
6da4103
 
 
 
 
 
458ae63
6da4103
 
 
92ce739
6da4103
593e145
fa11d8c
 
89fbcb1
 
458ae63
89fbcb1
 
fa11d8c
 
593e145
 
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/Garbage_example.jpg?dl=1',
#     'https://www.dropbox.com/s/86uxlxxlm1iaexa/Garbage_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="Garbage Detection",
    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="Garbage Detection",
    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()