AmirKaseb's picture
Update app.py
d91b0f6 verified
import streamlit as st
import torch
import cv2
from PIL import Image
import numpy as np
# YOLOv5 Model Loading (best.pt)
model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt') # Replace 'best.pt' with your model's path
# Streamlit UI
st.title('YOLOv5 Object Detection')
# Input Options
upload_option = st.radio("Choose an input option:", ("Upload Image", "Real-Time Webcam"))
# Image Upload Handling
if upload_option == "Upload Image":
uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "png", "jpeg"])
if uploaded_file is not None:
image = Image.open(uploaded_file)
results = model(image) # Perform inference
st.image(results.render()[0], caption='Detected Objects', use_column_width=True) # Display results
# Real-Time Webcam Detection
if upload_option == "Real-Time Webcam":
run = st.checkbox('Run Webcam')
FRAME_WINDOW = st.image([]) # Display window for webcam frames
if run:
cap = cv2.VideoCapture(0) # Open webcam (0 for default)
if not cap.isOpened():
st.write("Error: Unable to open webcam")
st.stop()
while run:
ret, frame = cap.read() # Capture frame
if not ret:
st.write("Error: Unable to capture frame")
break
# Convert to RGB and detect objects
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
results = model(frame_rgb)
annotated_frame = results.render()[0]
FRAME_WINDOW.image(annotated_frame)
cap.release() # Release webcam