File size: 1,835 Bytes
caff61e
bccf53b
dc80d48
4fa263e
caff61e
b5a364c
e82b28e
b5a364c
b86c5b1
8378a4b
36e1064
b5a364c
ab96246
8378a4b
ab96246
e82b28e
a32f6c3
b86c5b1
a32f6c3
b5a364c
 
eaa57e7
a32f6c3
eaa57e7
 
 
 
a32f6c3
35669c6
eaa57e7
a32f6c3
 
b5a364c
 
eaa57e7
b86c5b1
b5a364c
eaa57e7
b5a364c
eaa57e7
 
b86c5b1
ab96246
a32f6c3
 
ab96246
b5a364c
eaa57e7
 
 
a32f6c3
eaa57e7
b5a364c
b86c5b1
46e3370
ab96246
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
import torch
import numpy as np
import gradio as gr
from PIL import Image

# Device configuration
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

# Load YOLOv5 model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True).to(device)

# Set model confidence threshold
model.conf = 0.5
if device.type == 'cuda':
    model.half()

def process_frame(image):
    """Process a video frame or image and apply YOLOv5 object detection."""
    if image is None:
        return None
    
    try:
        image_pil = Image.fromarray(image)
        with torch.no_grad():
            results = model(image_pil)
        
        rendered_images = results.render()
        return np.array(rendered_images[0]) if rendered_images else image
    
    except Exception as e:
        print(f"Error processing frame: {e}")
        return image

# Create Gradio UI
with gr.Blocks(title="Real-Time Object Detection") as app:
    gr.Markdown("# Real-Time Object Detection")

    with gr.Tabs():
        # ๐Ÿ“ท Live Webcam Tab
        with gr.TabItem("๐Ÿ“ท Live Camera"):
            with gr.Row():
                webcam_input = gr.Video(label="Live Feed")  
                live_output = gr.Image(label="Processed Feed")
            
            webcam_input.change(process_frame, inputs=webcam_input, outputs=live_output)

        # ๐Ÿ–ผ๏ธ Image Upload Tab (With Submit Button)
        with gr.TabItem("๐Ÿ–ผ๏ธ Image Upload"):
            with gr.Row():
                upload_input = gr.Image(type="numpy", label="Upload Image")
                submit_button = gr.Button("Submit") 
                upload_output = gr.Image(label="Detection Result")

            submit_button.click(process_frame, inputs=upload_input, outputs=upload_output)

app.queue().launch(server_name="0.0.0.0", server_port=7860, share=False)