Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| import av | |
| import streamlit as st | |
| from streamlit_webrtc import WebRtcMode, webrtc_streamer | |
| import numpy as np | |
| st.set_page_config(page_title='Surveillance') | |
| with st.sidebar: | |
| st.write('# Settings') | |
| display_settings = { | |
| 'mirror': st.checkbox('mirror'), | |
| 'echo': st.checkbox('echo'), | |
| } | |
| def audio_frame_callback(frame: av.AudioFrame) -> av.AudioFrame: | |
| sound = frame.to_ndarray() | |
| # sound logic | |
| result_sound = sound if display_settings['echo'] else np.zeros_like(sound) | |
| result_frame = av.AudioFrame.from_ndarray(result_sound, layout=frame.layout.name) | |
| result_frame.sample_rate = frame.sample_rate | |
| return result_frame | |
| def video_frame_callback(frame: av.VideoFrame) -> av.VideoFrame: | |
| image = frame.to_ndarray(format='bgr24') | |
| mirrored = image[:,::-1,:] if display_settings['mirror'] else image | |
| # image logic | |
| return av.VideoFrame.from_ndarray(mirrored, format='bgr24') | |
| streamer = webrtc_streamer( | |
| key='surveillance', | |
| mode=WebRtcMode.SENDRECV, | |
| audio_frame_callback=audio_frame_callback, | |
| video_frame_callback=video_frame_callback, | |
| async_processing=True, | |
| ) |