Spaces:
Runtime error
Runtime error
File size: 2,237 Bytes
bd42292 a30caf2 bd42292 a30caf2 bd42292 a30caf2 bd42292 a30caf2 bd42292 a30caf2 bd42292 a30caf2 bd42292 a30caf2 bd42292 a30caf2 bd42292 a30caf2 |
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 |
from streamlit_webrtc import webrtc_streamer
import numpy as np
import streamlit as st
import time
import cv2
import numpy as np
import av
import threading
lock = threading.Lock()
class FrameRate:
def __init__(self) -> None:
self.c: int = 0
self.start_time: float = None
self.NO_FRAMES = 100
self.fps: float = -1
def reset(self) -> None:
self.start_time = time.time()
self.c = 0
self.fps = -1
def count(self) -> None:
self.c += 1
if self.c % self.NO_FRAMES == 0:
self.c = 0
end_time = time.time()
self.fps = self.NO_FRAMES / (end_time - self.start_time)
self.start_time = end_time
def show_fps(self, image: np.ndarray) -> np.ndarray:
if self.fps != -1:
return cv2.putText(
image,
f"FPS {self.fps:.0f}",
(50, 50),
cv2.FONT_HERSHEY_SIMPLEX,
fontScale=1,
color=(255, 0, 0),
thickness=2,
)
else:
return image
rtc_configuration = {
"iceServers": [
{
"urls": "turn:relay1.expressturn.com:3478",
"username": "efBRTY571ATWBRMP36",
"credential": "pGcX1BPH5fMmZJc5",
},
# {
# "urls": [
# "stun:stun1.l.google.com:19302",
# "stun:stun2.l.google.com:19302",
# "stun:stun3.l.google.com:19302",
# "stun:stun4.l.google.com:19302",
# ]
# },
],
}
class ImgContainer:
img: np.ndarray = None # raw image
frame_rate: FrameRate = FrameRate()
def video_frame_callback(frame: av.VideoFrame) -> av.VideoFrame:
img = frame.to_ndarray(format="bgr24")
with lock:
img_container.img = img
img_container.frame_rate.count()
img = img_container.frame_rate.show_fps(img)
return av.VideoFrame.from_ndarray(img, format="bgr24")
img_container = ImgContainer()
img_container.frame_rate.reset()
ctx = st.session_state.ctx = webrtc_streamer(
key="snapshot",
video_frame_callback=video_frame_callback,
rtc_configuration=rtc_configuration,
)
|