File size: 2,482 Bytes
a3696e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d563616
a3696e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# import cv2
# import streamlit as st
# from streamlit_webrtc import webrtc_streamer, VideoHTMLAttributes
# import numpy as np
# import av

# st.title("OpenCV Filters on Video Stream")

# filter = "none"


# def transform(frame: av.VideoFrame):
#     img = frame.to_ndarray(format="bgr24")

#     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":
#         # We convert the image twice because the first conversion returns a 2D array.
#         # the second conversion turns it back to a 3D array.
#         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)
#     elif filter == "none":
#         pass

#     return av.VideoFrame.from_ndarray(img, format="bgr24")


# 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_streamer(
#     key="streamer",
#     video_frame_callback=transform,
#     sendback_audio=False
#     )

import streamlit as st
import cv2

def main():
    st.set_page_config(page_title="Streamlit WebCam App")
    st.title("Webcam Display Steamlit App")
    st.caption("Powered by OpenCV, Streamlit")
    cap = cv2.VideoCapture(0)
    frame_placeholder = st.empty()
    stop_button_pressed = st.button("Stop")
    while cap.isOpened() and not stop_button_pressed:
        ret, frame = cap.read()
        if not ret:
            st.write("Video Capture Ended")
            break
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        frame_placeholder.image(frame,channels="RGB")
        if cv2.waitKey(1) & 0xFF == ord("q") or stop_button_pressed:
            break
    cap.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    main()