Update pages/7_record.py
Browse files- pages/7_record.py +14 -6
pages/7_record.py
CHANGED
@@ -11,11 +11,11 @@ from sample_utils.turn import get_ice_servers
|
|
11 |
|
12 |
|
13 |
def video_frame_callback(frame: av.VideoFrame) -> av.VideoFrame:
|
|
|
|
|
|
|
14 |
img = frame.to_ndarray(format="bgr24")
|
15 |
-
|
16 |
-
# perform edge detection
|
17 |
img = cv2.cvtColor(cv2.Canny(img, 100, 200), cv2.COLOR_GRAY2BGR)
|
18 |
-
|
19 |
return av.VideoFrame.from_ndarray(img, format="bgr24")
|
20 |
|
21 |
|
@@ -23,21 +23,28 @@ RECORD_DIR = Path("./records")
|
|
23 |
RECORD_DIR.mkdir(exist_ok=True)
|
24 |
|
25 |
|
26 |
-
def
|
|
|
|
|
|
|
27 |
if "prefix" not in st.session_state:
|
28 |
st.session_state["prefix"] = str(uuid.uuid4())
|
29 |
prefix = st.session_state["prefix"]
|
|
|
|
|
30 |
in_file = RECORD_DIR / f"{prefix}_input.flv"
|
31 |
out_file = RECORD_DIR / f"{prefix}_output.flv"
|
32 |
|
|
|
33 |
def in_recorder_factory() -> MediaRecorder:
|
34 |
return MediaRecorder(
|
35 |
str(in_file), format="flv"
|
36 |
-
)
|
37 |
|
38 |
def out_recorder_factory() -> MediaRecorder:
|
39 |
return MediaRecorder(str(out_file), format="flv")
|
40 |
|
|
|
41 |
webrtc_streamer(
|
42 |
key="record",
|
43 |
mode=WebRtcMode.SENDRECV,
|
@@ -51,6 +58,7 @@ def app():
|
|
51 |
out_recorder_factory=out_recorder_factory,
|
52 |
)
|
53 |
|
|
|
54 |
if in_file.exists():
|
55 |
with in_file.open("rb") as f:
|
56 |
st.download_button(
|
@@ -64,4 +72,4 @@ def app():
|
|
64 |
|
65 |
|
66 |
if __name__ == "__main__":
|
67 |
-
|
|
|
11 |
|
12 |
|
13 |
def video_frame_callback(frame: av.VideoFrame) -> av.VideoFrame:
|
14 |
+
"""
|
15 |
+
Process video frames: Perform edge detection on the incoming frames.
|
16 |
+
"""
|
17 |
img = frame.to_ndarray(format="bgr24")
|
|
|
|
|
18 |
img = cv2.cvtColor(cv2.Canny(img, 100, 200), cv2.COLOR_GRAY2BGR)
|
|
|
19 |
return av.VideoFrame.from_ndarray(img, format="bgr24")
|
20 |
|
21 |
|
|
|
23 |
RECORD_DIR.mkdir(exist_ok=True)
|
24 |
|
25 |
|
26 |
+
def virtual_keyboard_app():
|
27 |
+
"""
|
28 |
+
Streamlit application for recording video streams with a filter applied.
|
29 |
+
"""
|
30 |
if "prefix" not in st.session_state:
|
31 |
st.session_state["prefix"] = str(uuid.uuid4())
|
32 |
prefix = st.session_state["prefix"]
|
33 |
+
|
34 |
+
# Define input and output file paths
|
35 |
in_file = RECORD_DIR / f"{prefix}_input.flv"
|
36 |
out_file = RECORD_DIR / f"{prefix}_output.flv"
|
37 |
|
38 |
+
# Factory for creating MediaRecorder objects
|
39 |
def in_recorder_factory() -> MediaRecorder:
|
40 |
return MediaRecorder(
|
41 |
str(in_file), format="flv"
|
42 |
+
)
|
43 |
|
44 |
def out_recorder_factory() -> MediaRecorder:
|
45 |
return MediaRecorder(str(out_file), format="flv")
|
46 |
|
47 |
+
# Initialize WebRTC streamer
|
48 |
webrtc_streamer(
|
49 |
key="record",
|
50 |
mode=WebRtcMode.SENDRECV,
|
|
|
58 |
out_recorder_factory=out_recorder_factory,
|
59 |
)
|
60 |
|
61 |
+
# Display download buttons for recorded files
|
62 |
if in_file.exists():
|
63 |
with in_file.open("rb") as f:
|
64 |
st.download_button(
|
|
|
72 |
|
73 |
|
74 |
if __name__ == "__main__":
|
75 |
+
virtual_keyboard_app()
|