Spaces:
Runtime error
Runtime error
| # Import required libraries | |
| import PIL | |
| import cv2 | |
| import streamlit as st | |
| from ultralytics import YOLO | |
| import tempfile | |
| # Replace the relative path to your weight file | |
| model_path = 'https://huggingface.co/spaces/ankitkupadhyay/fire_and_smoke/blob/main/best.pt' | |
| # Setting page layout | |
| st.set_page_config( | |
| page_title="Object Detection using YOLOv8", # Setting page title | |
| page_icon="🤖", # Setting page icon | |
| layout="wide", # Setting layout to wide | |
| initial_sidebar_state="expanded" # Expanding sidebar by default | |
| ) | |
| # Creating sidebar | |
| with st.sidebar: | |
| st.header("Image/Video Config") # Adding header to sidebar | |
| # Adding file uploader to sidebar for selecting images and videos | |
| source_file = st.file_uploader( | |
| "Choose an image or video...", type=("jpg", "jpeg", "png", 'bmp', 'webp', 'mp4')) | |
| # Model Options | |
| confidence = float(st.slider( | |
| "Select Model Confidence", 25, 100, 40)) / 100 | |
| # Creating main page heading | |
| st.title("Object Detection using YOLOv8") | |
| # Creating two columns on the main page | |
| col1, col2 = st.columns(2) | |
| # Adding image to the first column if image is uploaded | |
| with col1: | |
| if source_file: | |
| # Check if the file is an image | |
| if source_file.type.split('/')[0] == 'image': | |
| # Opening the uploaded image | |
| uploaded_image = PIL.Image.open(source_file) | |
| # Adding the uploaded image to the page with a caption | |
| st.image(source_file, | |
| caption="Uploaded Image", | |
| use_column_width=True | |
| ) | |
| else: | |
| tfile = tempfile.NamedTemporaryFile(delete=False) | |
| tfile.write(source_file.read()) | |
| vidcap = cv2.VideoCapture(tfile.name) | |
| try: | |
| model = YOLO(model_path) | |
| except Exception as ex: | |
| st.error( | |
| f"Unable to load model. Check the specified path: {model_path}") | |
| st.error(ex) | |
| if st.sidebar.button('Detect Objects'): | |
| if source_file.type.split('/')[0] == 'image': | |
| res = model.predict(uploaded_image, | |
| conf=confidence | |
| ) | |
| boxes = res[0].boxes | |
| res_plotted = res[0].plot()[:, :, ::-1] | |
| with col2: | |
| st.image(res_plotted, | |
| caption='Detected Image', | |
| use_column_width=True | |
| ) | |
| try: | |
| with st.expander("Detection Results"): | |
| for box in boxes: | |
| st.write(box.xywh) | |
| except Exception as ex: | |
| st.write("No image is uploaded yet!") | |
| else: | |
| # Open the video file | |
| success, image = vidcap.read() | |
| while success: | |
| res = model.predict(image, | |
| conf=confidence | |
| ) | |
| boxes = res[0].boxes | |
| res_plotted = res[0].plot()[:, :, ::-1] | |
| with col2: | |
| st.image(res_plotted, | |
| caption='Detected Frame', | |
| use_column_width=True | |
| ) | |
| try: | |
| with st.expander("Detection Results"): | |
| for box in boxes: | |
| st.write(box.xywh) | |
| except Exception as ex: | |
| st.write("No video is uploaded yet!") | |
| success, image = vidcap.read() | |