File size: 6,853 Bytes
6f5ac87
b345bd5
851eb77
 
 
 
3a28ead
a5c8542
3a28ead
 
 
851eb77
97afcf2
6f5ac87
35410c9
 
 
bac63be
6954573
 
 
 
 
 
 
 
 
6f5ac87
 
e83cfe3
7e4c2e9
705b2ec
4a88045
e31efcc
 
 
 
74b0c95
6f5ac87
 
 
28862c0
 
 
 
 
6f5ac87
510164d
e31efcc
aa18569
 
 
 
 
 
e31efcc
93f44e4
851eb77
fe3f366
47d75b8
023264e
3a7c9f0
f890670
 
 
 
 
 
 
e141787
3a7c9f0
 
 
 
 
90d7927
e141787
f07963f
023264e
169e0bb
28862c0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a5c8542
 
28862c0
 
 
a5c8542
28862c0
 
 
a5c8542
28862c0
 
 
 
 
 
a5c8542
28862c0
6f5ac87
28862c0
 
 
 
 
 
 
 
6f5ac87
28862c0
64d5085
1206f49
4ba8d1f
151bcd3
28862c0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ac472a5
28862c0
 
151bcd3
28862c0
 
 
6f5ac87
28862c0
fca7821
a5c8542
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
import gradio as gr
import torch
# from sahi.prediction import ObjectPrediction
# from sahi.utils.cv import visualize_object_predictions, read_image
import os 
import requests
import json
import cv2 

from PIL import Image
from huggingface_hub import hf_hub_download

from ultralyticsplus import YOLO, render_result

# from ultralyticsplus import render_result
# import requests
# import cv2

image_path = [['test_images/2a998cfb0901db5f8210.jpg','cham_diem_yolov8', 640, 0.25, 0.45],['test_images/2ce19ce0191acb44920b.jpg','cham_diem_yolov8', 640, 0.25, 0.45],
             ['test_images/2daab6ea3310e14eb801.jpg','cham_diem_yolov8', 640, 0.25, 0.45], ['test_images/4a137deefb14294a7005 (1).jpg','cham_diem_yolov8', 640, 0.25, 0.45],
             ['test_images/7e77c596436c9132c87d.jpg','cham_diem_yolov8', 640, 0.25, 0.45], ['test_images/170f914014bac6e49fab.jpg','cham_diem_yolov8', 640, 0.25, 0.45],
             ['test_images/3355ec3269c8bb96e2d9.jpg','cham_diem_yolov8', 640, 0.25, 0.45], ['test_images/546306a88052520c0b43.jpg','cham_diem_yolov8', 640, 0.25, 0.45],
             ['test_images/33148464019ed3c08a8f.jpg','cham_diem_yolov8', 640, 0.25, 0.45], ['test_images/a17a992a1cd0ce8e97c1.jpg','cham_diem_yolov8', 640, 0.25, 0.45],
             ['test_images/b5db5e42d8b80ae653a9 (1).jpg','cham_diem_yolov8', 640, 0.25, 0.45],['test_images/b8ee1f5299a84bf612b9.jpg','cham_diem_yolov8', 640, 0.25, 0.45],
             ['test_images/b272fec7783daa63f32c.jpg','cham_diem_yolov8', 640, 0.25, 0.45],['test_images/bb202b3eaec47c9a25d5.jpg','cham_diem_yolov8', 640, 0.25, 0.45],
             ['test_images/bf1e22b0a44a76142f5b.jpg','cham_diem_yolov8', 640, 0.25, 0.45], ['test_images/ea5473c5f53f27617e2e.jpg','cham_diem_yolov8', 640, 0.25, 0.45],
             ['test_images/ee106392e56837366e79.jpg','cham_diem_yolov8', 640, 0.25, 0.45], ['test_images/f88d2214a4ee76b02fff.jpg','cham_diem_yolov8', 640, 0.25, 0.45]]

# Load YOLO model
# model = YOLO('linhcuem/cham_diem_yolov8')
# model = YOLO('linhcuem/chamdiemgianhang_yolov8_300epochs')
# model = YOLO('linhcuem/chamdiemgianhang_yolov8_ver21')
# model = YOLO('linhcuem/cham_diem_yolov8_ver20')
# model_ids = ['linhcuem/checker_TB_yolov8_ver1', 'linhcuem/cham_diem_yolov8', 'linhcuem/chamdiemgianhang_yolov8_300epochs', 'linhcuem/cham_diem_yolov8_ver20', 'linhcuem/chamdiemgianhang_yolov8_ver21']
# # model = YOLO('linhcuem/checker_TB_yolov8_ver1')
# current_model_id = model_ids[-1]
# model = YOLO(current_model_id)
# model = YOLO(model_path)

###################################################
def yolov8_img_inference(
    image: gr.inputs.Image = None,
    model_path: gr.inputs.Dropdown = None,
    image_size: gr.inputs.Slider = 640,
    conf_threshold: gr.inputs.Slider = 0.25,
    iou_threshold: gr.inputs.Slider = 0.45,
):
    # model = YOLO(model_path)
    model = YOLO(model_path)
    model.conf = conf_threshold
    model.iou = iou_threshold
    # model.overrides['conf'] = conf_threshold
    # model.overrides['iou'] = iou_threshold
    # model.overrides['agnostic_nms'] = False
    # model.overrides['max_det'] = 1000
    image = read_image
    results = model.predict(image, imgsz=image_size, conf=conf_threshold, iou=iou_threshold)
    render = render_result(model=model, image=image, result=results[0])
    # get the model names list
    names = model.names
  
    object_counts = {x: 0 for x in names}
    for r in results:
        for c in r.boxes.cls:
            c = int(c)
            if c in names:
                object_counts[c] += 1
            elif c not in names:
                object_counts[c] = 1

    present_objects = object_counts.copy()

    for i in object_counts:
        if object_counts[i] < 1:
            present_objects.pop(i)
    

    return render, {names[k]: v for k, v in present_objects.items()}


# def yolov8_vid_inference(video_path):
#     cap = cv2.VideoCapture(video_path)
#     while cap.isOpened():
#         success, frame = cap.read()

#         if success:
#             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)
    

# inputs_vid = [
#     gr.components.Video(type="filepath", label="Input Video"),
# ]

# outputs_vid = [
#     gr.components.Image(type="numpy", label="Output Image"),
#               ]

# interface_vid = gr.Interface(
#     fn=yolov8_vid_inference,
#     inputs = inputs_vid,
#     outputs = outputs_vid,
#     title = "Detect Thiên Việt productions",
#     cache_examples = False,
    
# )

inputs = [
    gr.inputs.Image(type="filepath", label="Input Image"),
    gr.inputs.Dropdown(["linhcuem/checker_TB_yolov8_ver1", "linhcuem/chamdiemgianhang_yolov8_ver21"], 
                        default="linhcuem/checker_TB_yolov8_ver1", label="Model"),
    gr.inputs.Slider(minimum=320, maximum=1280, default=640, step=32, label="Image Size"),
    gr.inputs.Slider(minimum=0.0, maximum=1.0, default=0.25, step=0.05, label="Confidence Threshold"),
    gr.inputs.Slider(minimum=0.0, maximum=1.0, default=0.45, step=0.05, label="IOU Threshold"),
]

outputs_image =gr.outputs.Image(type="filepath", label="Output Image")
# count_obj = gr.Textbox(show_label=False)

title = "Detect Thiên Việt productions"

# interface_image = gr.Interface(
#     fn=yolov8_img_inference,
#     inputs=[
#         gr.Image(type='pil'),
#         gr.Dropdown(["linhcuem/checker_TB_yolov8_ver1", "linhcuem/chamdiemgianhang_yolov8_ver21"], 
#                         default="linhcuem/checker_TB_yolov8_ver1", label="Model"),
#         gr.Slider(minimum=320, maximum=1280, default=640, step=32, label="Image Size"),
#         gr.Slider(minimum=0.0, maximum=1.0, default=0.25, step=0.05, label="Confidence Threshold"),
#         gr.Slider(minimum=0.0, maximum=1.0, default=0.45, step=0.05, label="IOU Threshold"),
#     ],
#     outputs=[gr.Image(type="pil"),gr.Textbox(show_label=False)],
#     title=title,
#     examples=image_path,
#     cache_examples=True if image_path else False,
    
# )

# gr.TabbedInterface(
#     [interface_image, interface_vid],
#     tab_names=['Image inference', 'Video inference']
# ).queue().launch()

demo_app = gr.Interface(
    fn=yolov8_img_inference,
    inputs=inputs,
    outputs=outputs,
    title=title,
    examples=examples,
    cache_examples=True,
    theme='huggingface',
)
demo_app.launch(debug=True, enable_queue=True)

# interface_image.launch(debug=True, enable_queue=True)