Spaces:
Sleeping
Sleeping
File size: 2,018 Bytes
a3696e2 9ad57a5 b2efa3a 9ad57a5 2628138 9ad57a5 2628138 9ad57a5 2628138 9ad57a5 2628138 b2efa3a 9ad57a5 2628138 9ad57a5 b2efa3a 2628138 9ad57a5 b2efa3a 2628138 |
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 |
import cv2
import streamlit as st
from streamlit_webrtc import webrtc_streamer, WebRtcMode, VideoHTMLAttributes
import numpy as np
import av
st.title("OpenCV Filters on Video Stream")
# Define the filter state variable
filter = "none"
def transform(frame: av.VideoFrame):
img = frame.to_ndarray(format="bgr24")
# Apply the selected filter
if filter == "blur":
img = cv2.GaussianBlur(img, (21, 21), 0)
elif filter == "canny":
img = cv2.cvtColor(cv2.Canny(img, 100, 200), cv2.COLOR_GRAY2BGR)
elif filter == "grayscale":
img = cv2.cvtColor(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY), cv2.COLOR_GRAY2BGR)
elif filter == "sepia":
kernel = np.array([[0.272, 0.534, 0.131], [0.349, 0.686, 0.168], [0.393, 0.769, 0.189]])
img = cv2.transform(img, kernel)
elif filter == "invert":
img = cv2.bitwise_not(img)
# Debugging: Check if the frame is being processed
print(f"Processing frame with filter: {filter}")
return av.VideoFrame.from_ndarray(img, format="bgr24")
# Streamlit buttons to choose filters
col1, col2, col3, col4, col5, col6 = st.columns([1, 1, 1, 1, 1, 1])
with col1:
if st.button("None"):
filter = "none"
with col2:
if st.button("Blur"):
filter = "blur"
with col3:
if st.button("Grayscale"):
filter = "grayscale"
with col4:
if st.button("Sepia"):
filter = "sepia"
with col5:
if st.button("Canny"):
filter = "canny"
with col6:
if st.button("Invert"):
filter = "invert"
# WebRTC constraints for video resolution (optional)
video_constraints = {
"facing_mode": "user", # Use the front camera
"width": {"ideal": 1280},
"height": {"ideal": 720}
}
# Display the video stream
webrtc_streamer(
key="streamer",
video_frame_callback=transform,
sendback_audio=False,
video_constraints=video_constraints, # Optional: set constraints
mode=WebRtcMode.SENDRECV # Ensure bidirectional communication (send/receive video)
)
|