Skip to content

Commit 4e693b4

Browse files
authored
Merge pull request #92 from ks6088ts-labs/feature/issue-88_refactor-video
add get state function
2 parents 10e8e1b + 5dddf5a commit 4e693b4

File tree

1 file changed

+26
-10
lines changed

1 file changed

+26
-10
lines changed

apps/99_streamlit_examples/pages/12_Video_processing.py

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class ProcessorType(Enum):
1616
YOLOV8 = "yolov8"
1717

1818

19-
class InputSource(Enum):
19+
class InputSourceType(Enum):
2020
CAMERA = "camera"
2121
FILE = "file"
2222

@@ -28,6 +28,9 @@ def process(
2828
) -> cv2.UMat:
2929
raise NotImplementedError
3030

31+
def get_states(self) -> dict:
32+
return {}
33+
3134

3235
class BlurProcessor(Processor):
3336
def process(
@@ -91,6 +94,7 @@ def __init__(
9194
self.model = YOLO(model_name)
9295
self.confidence = confidence
9396
self.classes = classes
97+
self.num_of_persons = 0
9498

9599
def process(
96100
self,
@@ -101,6 +105,7 @@ def process(
101105
conf=self.confidence,
102106
classes=self.classes,
103107
)
108+
self.num_of_persons = len([x for x in results[0].boxes.cls if x == 0])
104109
output_img = results[0].plot(
105110
labels=True,
106111
conf=True,
@@ -110,6 +115,11 @@ def process(
110115
code=cv2.COLOR_BGR2RGB,
111116
)
112117

118+
def get_states(self):
119+
return {
120+
"num_of_persons": self.num_of_persons,
121+
}
122+
113123

114124
def get_processor(processor_type: ProcessorType) -> Processor:
115125
if processor_type == ProcessorType.BLUR:
@@ -127,21 +137,21 @@ def get_processor(processor_type: ProcessorType) -> Processor:
127137
with st.sidebar:
128138
tab_input, tab_mode = st.tabs(
129139
[
130-
"input",
131-
"mode",
140+
"source",
141+
"processor",
132142
]
133143
)
134144
with tab_input:
135-
source = st.radio(
145+
input_source_type = st.radio(
136146
label="input source",
137147
options=[
138-
InputSource.FILE,
139-
InputSource.CAMERA,
148+
InputSourceType.FILE,
149+
InputSourceType.CAMERA,
140150
],
141151
index=0,
142152
format_func=lambda x: x.value,
143153
)
144-
if source == InputSource.FILE:
154+
if input_source_type == InputSourceType.FILE:
145155
file = st.file_uploader(
146156
label="upload video file",
147157
type=[
@@ -155,7 +165,7 @@ def get_processor(processor_type: ProcessorType) -> Processor:
155165
with open(file_path, "wb") as f:
156166
f.write(file.read())
157167
device = file_path
158-
if source == InputSource.CAMERA:
168+
if input_source_type == InputSourceType.CAMERA:
159169
# device: https://docs.opencv.org/4.10.0/d8/dfe/classcv_1_1VideoCapture.html#a5d5f5dacb77bbebdcbfb341e3d4355c1
160170
device = st.text_input(
161171
label="input your video/camera device",
@@ -180,6 +190,9 @@ def get_processor(processor_type: ProcessorType) -> Processor:
180190

181191
st.title("Video processing")
182192

193+
st.text(f"source: {input_source_type.value}")
194+
st.text(f"processor: {processor_type.value}")
195+
183196
start_button = st.button("Start")
184197
stop = st.button("Stop")
185198

@@ -194,13 +207,16 @@ def get_processor(processor_type: ProcessorType) -> Processor:
194207
ret, frame = capture.read()
195208

196209
if not ret:
197-
message_loc.error("Failed to read frame")
198-
continue
210+
st.toast("End of video", icon="❗")
211+
break
199212

200213
processed_frame = processor.process(
201214
frame=frame,
202215
)
203216

217+
states = processor.get_states()
218+
message_loc.info(f"states: {states}")
219+
204220
image_loc.image(
205221
image=processed_frame,
206222
use_column_width=True,

0 commit comments

Comments
 (0)