Spaces:
Sleeping
Sleeping
File size: 4,138 Bytes
bce068f eaa4e30 bce068f 4a7ddd0 15d5948 3a97db5 15d5948 4a7ddd0 bce068f 3a97db5 4a7ddd0 3d6c4b9 4a7ddd0 15d5948 3d6c4b9 3a97db5 3d6c4b9 15d5948 83bac04 8977576 83bac04 cf95c26 83bac04 3d6c4b9 cf95c26 3d6c4b9 cf95c26 3d6c4b9 15d5948 83bac04 15d5948 3d6c4b9 83bac04 3d6c4b9 83bac04 3d6c4b9 83bac04 |
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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# app.py
import streamlit as st
from processor import process_image, process_video, process_frame
import os
from PIL import Image
import tempfile
from streamlit_webrtc import VideoTransformerBase, webrtc_streamer, RTCConfiguration
import cv2
# Set page configuration
st.set_page_config(page_title="Traffic Violation Detection", layout="wide")
st.title("π¦ Motorbike Violation Detection App")
# Sidebar options
option = st.sidebar.radio("Select Option:", ("Image", "Video", "Live Camera"))
if option == "Image":
st.header("πΌοΈ Upload and Process Image")
uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])
if uploaded_file:
image = Image.open(uploaded_file)
st.image(image, caption='Uploaded Image.', use_column_width=True)
if st.button("Process Image"):
with st.spinner("Processing..."):
with tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") as tmp:
image.save(tmp.name)
frame = cv2.imread(tmp.name)
processed = process_image(tmp.name, "alfont_com_arial-1.ttf")
if processed is not None:
st.image(processed, caption='Processed Image.', use_column_width=True)
# Save processed image to temporary file for download
_, img_encoded = cv2.imencode('.jpg', processed)
st.download_button(
label="π₯ Download Image",
data=img_encoded.tobytes(),
file_name="processed_image.jpg",
mime="image/jpeg"
)
else:
st.error("Failed to process the image.")
elif option == "Video":
st.header("π₯ Upload and Process Video")
uploaded_video = st.file_uploader("Choose a video...", type=["mp4", "avi", "mov"])
if uploaded_video is not None:
# Save the uploaded video to a temporary file
with open("temp_video.mov", "wb") as f:
f.write(uploaded_video.read())
# Display the uploaded video
st.video("temp_video.mov")
if st.button("Process Video"):
with st.spinner("Processing Video..."):
processed_path = process_video("temp_video.mov")
if processed_path and os.path.exists(processed_path):
st.success("Video processed successfully!")
st.video(processed_path)
with open(processed_path, "rb") as file:
st.download_button(
label="π₯ Download Processed Video",
data=file,
file_name="processed_video.mov",
mime="video/mov"
)
else:
st.error("Failed to process the video.")
elif option == "Live Camera":
st.header("π· Live Camera Feed")
st.info("Live processing is active. Detected violations will be annotated on the video feed.")
# RTC Configuration for streamlit-webrtc
RTC_CONFIGURATION = RTCConfiguration({"iceServers": [{"urls": ["stun:stun.l.google.com:19302"]}]})
class VideoTransformer(VideoTransformerBase):
def __init__(self):
self.font_path = "alfont_com_arial-1.ttf"
def transform(self, frame):
img = frame.to_ndarray(format="bgr24") # Convert the frame to a numpy array
processed_img = process_frame(img, self.font_path) # Process the image using your custom function
return processed_img
# Start the WebRTC streaming
webrtc_ctx = webrtc_streamer(
key="live-camera",
rtc_configuration=RTC_CONFIGURATION,
video_transformer_factory=VideoTransformer,
media_stream_constraints={"video": True, "audio": False},
async_transform=True
)
# Optional: Provide a stop button to end the live stream
if webrtc_ctx.video_receiver:
st.button("Stop Live Camera", on_click=webrtc_ctx.stop_stream)
|