Spaces:
Sleeping
Sleeping
| # Python In-built packages | |
| from pathlib import Path | |
| import PIL | |
| # External packages | |
| import streamlit as st | |
| # Local Modules | |
| import settings | |
| import helper | |
| # Setting page layout | |
| st.set_page_config( | |
| page_title="OIViz", | |
| layout="wide", | |
| initial_sidebar_state="expanded" | |
| ) | |
| # Main page heading | |
| st.title("OIViz 📬🤖") | |
| st.markdown("I'm OIViz, an AI-powered video analytics tool that can help you analyze videos and images.") | |
| # Sidebar | |
| st.sidebar.header("Model Configuration") | |
| # Model Options | |
| model_type = st.sidebar.radio( | |
| "Select Task", ['Detection', 'Segmentation', 'Pose']) | |
| confidence = float(st.sidebar.slider( | |
| "Select Model Confidence", 25, 100, 40)) / 100 | |
| # Selecting Detection Or Segmentation | |
| if model_type == 'Detection': | |
| model_path = Path(settings.DETECTION_MODEL) | |
| elif model_type == 'Segmentation': | |
| model_path = Path(settings.SEGMENTATION_MODEL) | |
| elif model_type == 'Pose': | |
| model_path = Path(settings.POSE_MODEL) | |
| # Load Pre-trained ML Model | |
| try: | |
| model = helper.load_model(model_path) | |
| except Exception as ex: | |
| st.error(f"Unable to load model. Check the specified path: {model_path}") | |
| st.error(ex) | |
| st.sidebar.header("New / Existing Video") | |
| new_existing = st.sidebar.radio("Select Video/Image Type", ['New', 'Existing']) | |
| st.sidebar.header("Image/Video Configuration") | |
| source_radio = st.sidebar.radio( | |
| "Select Source", settings.SOURCES_LIST) | |
| source_img = None | |
| #If new video is selected | |
| if new_existing == 'New': | |
| # If image is selected | |
| if source_radio == settings.IMAGE: | |
| source_img = st.sidebar.file_uploader( | |
| "Choose an image...", type=("jpg", "jpeg", "png", 'bmp', 'webp')) | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| try: | |
| if source_img is None: | |
| default_image_path = str(settings.DEFAULT_IMAGE) | |
| default_image = PIL.Image.open(default_image_path) | |
| st.image(default_image_path, caption="Default Image", | |
| use_column_width=True) | |
| else: | |
| uploaded_image = PIL.Image.open(source_img) | |
| st.image(source_img, caption="Uploaded Image", | |
| use_column_width=True) | |
| except Exception as ex: | |
| st.error("Error occurred while opening the image.") | |
| st.error(ex) | |
| with col2: | |
| if source_img is None: | |
| default_detected_image_path = str(settings.DEFAULT_DETECT_IMAGE) | |
| default_detected_image = PIL.Image.open( | |
| default_detected_image_path) | |
| st.image(default_detected_image_path, caption='Detected Image', | |
| use_column_width=True) | |
| else: | |
| if st.sidebar.button('Detect Objects'): | |
| res = model.predict(uploaded_image, | |
| conf=confidence | |
| ) | |
| boxes = res[0].boxes | |
| res_plotted = res[0].plot()[:, :, ::-1] | |
| st.image(res_plotted, caption='Detected Image', | |
| use_column_width=True) | |
| try: | |
| with st.expander("Detection Results"): | |
| for box in boxes: | |
| st.write(box.data) | |
| except Exception as ex: | |
| # st.write(ex) | |
| st.write("No image is uploaded yet!") | |
| elif source_radio == settings.VIDEO: | |
| #helper.play_stored_video(confidence, model) | |
| helper.try_displaying_whole_movie(confidence, model) | |
| elif source_radio == settings.WEBCAM: | |
| helper.play_webcam(confidence, model) | |
| elif source_radio == settings.RTSP: | |
| helper.play_rtsp_stream(confidence, model) | |
| elif source_radio == settings.YOUTUBE: | |
| helper.play_youtube_video(confidence, model) | |
| else: | |
| st.error("Please select a valid source type!") | |
| elif new_existing=='Existing': | |
| # display a summary of previously stored outputs from YOLOv8 | |
| helper.display_summary(project, name) | |
| video_path = st.sidebar.file_uploader( | |
| "Choose a video...", type=("mp4", "avi", "mov", "wmv", "flv", "mkv")) | |
| if video_path is not None: | |
| helper.play_stored_video(confidence, model, video_path) | |
| else: | |
| st.error("Please select a valid video file!") | |