Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import cv2 | |
| import tempfile | |
| import numpy as np | |
| from collections import defaultdict | |
| # Import your existing functions here | |
| # from quadball_tracker import detect_balls, update_trackers, check_events, get_quadrant, COLOR_RANGES | |
| def process_video(video_path): | |
| cap = cv2.VideoCapture(video_path) | |
| frame_count = 0 | |
| ball_trackers = defaultdict(lambda: defaultdict(dict)) | |
| events = [] | |
| total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) | |
| progress_bar = st.progress(0) | |
| status_text = st.empty() | |
| while cap.isOpened(): | |
| ret, frame = cap.read() | |
| if not ret: | |
| break | |
| frame_count += 1 | |
| progress_bar.progress(frame_count / total_frames) | |
| status_text.text(f"Processing frame {frame_count}/{total_frames}") | |
| try: | |
| balls = detect_balls(frame) | |
| update_trackers(ball_trackers, balls, frame_count) | |
| new_events = check_events(ball_trackers, frame_count) | |
| events.extend(new_events) | |
| except Exception as e: | |
| st.error(f"Error processing frame {frame_count}: {str(e)}") | |
| cap.release() | |
| return events | |
| st.title('QuadBall Tracker π΄π’π΅π‘') | |
| st.write(""" | |
| Welcome to QuadBall Tracker! This application uses computer vision to track colored balls | |
| across different quadrants in a video. Upload your video to get started! | |
| """) | |
| uploaded_file = st.file_uploader("Choose a video file", type=["mp4", "avi", "mov"]) | |
| if uploaded_file is not None: | |
| tfile = tempfile.NamedTemporaryFile(delete=False) | |
| tfile.write(uploaded_file.read()) | |
| st.video(tfile.name) | |
| if st.button('Process Video'): | |
| events = process_video(tfile.name) | |
| st.success('Video processing complete!') | |
| st.subheader('Event Log') | |
| for event in events: | |
| st.write(f"Time: {event['time']}, Quadrant: {event['quadrant']}, " | |
| f"Color: {event['color']}, Type: {event['type']}") | |
| # Create a DataFrame for easy filtering | |
| import pandas as pd | |
| df = pd.DataFrame(events) | |
| st.subheader('Filter Events') | |
| color_filter = st.multiselect('Select colors', df['color'].unique()) | |
| quadrant_filter = st.multiselect('Select quadrants', df['quadrant'].unique()) | |
| filtered_df = df | |
| if color_filter: | |
| filtered_df = filtered_df[filtered_df['color'].isin(color_filter)] | |
| if quadrant_filter: | |
| filtered_df = filtered_df[filtered_df['quadrant'].isin(quadrant_filter)] | |
| st.dataframe(filtered_df) | |
| st.sidebar.title('About') | |
| st.sidebar.info('This application uses computer vision to track colored balls across video quadrants. ' | |
| 'Upload a video to see it in action!') |