Delete pages
Browse files- pages/1_Video_Detection.py +0 -110
- pages/2_Video_Detection_Results.py +0 -39
- pages/3_Web_Camera_Photo.py +0 -75
pages/1_Video_Detection.py
DELETED
@@ -1,110 +0,0 @@
|
|
1 |
-
import tempfile
|
2 |
-
|
3 |
-
import streamlit as st
|
4 |
-
|
5 |
-
|
6 |
-
# ===================== Настройки страницы ======================
|
7 |
-
|
8 |
-
st.set_page_config(
|
9 |
-
layout='wide',
|
10 |
-
initial_sidebar_state='auto',
|
11 |
-
page_title='Face Emotion Recognition',
|
12 |
-
page_icon='👻',
|
13 |
-
)
|
14 |
-
|
15 |
-
st.write("#### Детекция лиц, эмоций, пола, расы и возраста на видео")
|
16 |
-
|
17 |
-
# загрузка и отображение видео с примером детекции
|
18 |
-
@st.cache_data
|
19 |
-
def load_main_video(video_path: str) -> bytes:
|
20 |
-
with open(video_path, 'rb') as file:
|
21 |
-
video_bytes = file.read()
|
22 |
-
return video_bytes
|
23 |
-
|
24 |
-
MAIN_VIDEO_PATH = 'media/result_video.mp4'
|
25 |
-
example_video_bytes = load_main_video(MAIN_VIDEO_PATH)
|
26 |
-
|
27 |
-
video_width = 60
|
28 |
-
video_side = 100
|
29 |
-
|
30 |
-
_, container, _ = st.columns([video_side, video_width, video_side])
|
31 |
-
container.video(data=example_video_bytes)
|
32 |
-
|
33 |
-
# ===================== Боковое меню настроек ======================
|
34 |
-
|
35 |
-
st.sidebar.header('Настройки')
|
36 |
-
st.sidebar.write('---')
|
37 |
-
|
38 |
-
face_conf_threshold = st.sidebar.slider(
|
39 |
-
label='Порог уверенности для детекции лиц',
|
40 |
-
min_value=0.0,
|
41 |
-
max_value=1.0,
|
42 |
-
value=0.7,
|
43 |
-
step=0.01,
|
44 |
-
)
|
45 |
-
st.sidebar.write('---')
|
46 |
-
|
47 |
-
# какие действия нужно детектить (пока не реализовано переключение)
|
48 |
-
actions = ['age', 'gender', 'race', 'emotion']
|
49 |
-
# применять ли дополнительное выравнивание
|
50 |
-
st.sidebar.write('Применять ли дополнительное выравнивание')
|
51 |
-
align = st.sidebar.checkbox(label='Align', value=False)
|
52 |
-
|
53 |
-
|
54 |
-
# загрузка и инициализация моделей
|
55 |
-
with st.spinner('Инициализация/загрузка моделей...'):
|
56 |
-
from detector import detector_model
|
57 |
-
|
58 |
-
# ==================== Загрузка видео и детекция =================
|
59 |
-
|
60 |
-
st_video = st.file_uploader(label='Выберите видео')
|
61 |
-
st.session_state['video_ready_to_convert'] = False
|
62 |
-
st.session_state['annotations_ready'] = False
|
63 |
-
|
64 |
-
if st_video:
|
65 |
-
if st.button('Детекция видео'):
|
66 |
-
progress_text = 'Детекция видео...'
|
67 |
-
progress_bar = st.progress(0, text=progress_text)
|
68 |
-
|
69 |
-
temp_file = tempfile.NamedTemporaryFile(delete=False)
|
70 |
-
temp_file.write(st_video.read())
|
71 |
-
video_file = temp_file.name
|
72 |
-
|
73 |
-
generator = detector_model.detect_video(
|
74 |
-
video_file=video_file,
|
75 |
-
actions=actions,
|
76 |
-
align=align,
|
77 |
-
face_conf_threshold=face_conf_threshold,
|
78 |
-
)
|
79 |
-
frame_count, total_frames = next(generator)
|
80 |
-
for (frame_count, _) in generator:
|
81 |
-
progress_text = f'Детекция видео, кадр {frame_count}/{total_frames}'
|
82 |
-
progress_bar.progress(frame_count / total_frames, text=progress_text)
|
83 |
-
|
84 |
-
progress_bar.empty()
|
85 |
-
st.session_state['video_ready_to_convert'] = True
|
86 |
-
detector_model.detections_to_df()
|
87 |
-
|
88 |
-
# ======= Конвертация видео для отображения в браузере =================
|
89 |
-
|
90 |
-
if st.session_state['video_ready_to_convert']:
|
91 |
-
convert_video_path = 'result_video_convert.mp4'
|
92 |
-
with st.spinner('Идет конвертация видео ...'):
|
93 |
-
detector_model.convert_mp4(detector_model.save_video_path, convert_video_path)
|
94 |
-
# st.video(convert_video_path, format='video/mp4')
|
95 |
-
|
96 |
-
with open(str(convert_video_path), 'rb') as file:
|
97 |
-
video_bytes = file.read()
|
98 |
-
|
99 |
-
_, container, _ = st.columns([video_side, video_width, video_side])
|
100 |
-
container.video(data=video_bytes)
|
101 |
-
|
102 |
-
# ======================= Кнопка скачать видео ===================
|
103 |
-
|
104 |
-
st.download_button(
|
105 |
-
label='Скачать видео',
|
106 |
-
data=video_bytes,
|
107 |
-
file_name=detector_model.save_video_path,
|
108 |
-
)
|
109 |
-
st.session_state['video_ready_to_convert'] = False
|
110 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pages/2_Video_Detection_Results.py
DELETED
@@ -1,39 +0,0 @@
|
|
1 |
-
from pathlib import Path
|
2 |
-
|
3 |
-
import pandas as pd
|
4 |
-
import streamlit as st
|
5 |
-
|
6 |
-
from draw_utils import draw_plots
|
7 |
-
|
8 |
-
|
9 |
-
st.set_page_config(
|
10 |
-
layout='wide',
|
11 |
-
initial_sidebar_state='auto',
|
12 |
-
page_title='Face Emotion Recognition',
|
13 |
-
page_icon='👻',
|
14 |
-
)
|
15 |
-
|
16 |
-
|
17 |
-
st.write("#### Отображение результатов детекции видео")
|
18 |
-
|
19 |
-
csv_path = 'video_annotations.csv'
|
20 |
-
|
21 |
-
@st.cache_data
|
22 |
-
def load_df():
|
23 |
-
df = pd.read_csv(csv_path)
|
24 |
-
return df
|
25 |
-
|
26 |
-
if Path('video_annotations.csv').exists():
|
27 |
-
df = load_df()
|
28 |
-
st.download_button(
|
29 |
-
label='Скачать csv аннотации',
|
30 |
-
data=df.to_csv().encode('utf-8'),
|
31 |
-
file_name=csv_path,
|
32 |
-
mime='text/csv',
|
33 |
-
)
|
34 |
-
draw_plots(df)
|
35 |
-
else:
|
36 |
-
st.write(
|
37 |
-
'#### Для отображения результатов детекции выберите видео ' \
|
38 |
-
'на вкладке Video Detection и нажмите "Детекция видео"'
|
39 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pages/3_Web_Camera_Photo.py
DELETED
@@ -1,75 +0,0 @@
|
|
1 |
-
import cv2
|
2 |
-
import numpy as np
|
3 |
-
from PIL import Image
|
4 |
-
import streamlit as st
|
5 |
-
|
6 |
-
from detector import detector_model
|
7 |
-
|
8 |
-
|
9 |
-
# ===================== Настройки страницы ======================
|
10 |
-
|
11 |
-
st.set_page_config(
|
12 |
-
layout='wide',
|
13 |
-
initial_sidebar_state='auto',
|
14 |
-
page_title='Face Emotion Recognition',
|
15 |
-
page_icon='👻',
|
16 |
-
)
|
17 |
-
|
18 |
-
|
19 |
-
st.write("#### Детекция лиц, эмоций, пола и возраста с веб-камеры")
|
20 |
-
|
21 |
-
# ===================== Боковое меню настроек ======================
|
22 |
-
|
23 |
-
st.sidebar.header('Настройки')
|
24 |
-
st.sidebar.write('---')
|
25 |
-
|
26 |
-
face_conf_threshold = st.sidebar.slider(
|
27 |
-
label='Порог уверенности для детекции лиц',
|
28 |
-
min_value=0.0,
|
29 |
-
max_value=1.0,
|
30 |
-
value=0.7,
|
31 |
-
step=0.01,
|
32 |
-
)
|
33 |
-
st.sidebar.write('---')
|
34 |
-
|
35 |
-
# какие действия нужно детектить (пока не реализовано переключение)
|
36 |
-
actions = ['age', 'gender', 'race', 'emotion']
|
37 |
-
# применять ли дополнительное выравнивание
|
38 |
-
st.sidebar.write('Применять ли дополнительное выравнивание')
|
39 |
-
align = st.sidebar.checkbox(label='Align', value=False)
|
40 |
-
|
41 |
-
# ================= Чтение видеопотока с камеры ===============
|
42 |
-
|
43 |
-
st_image = st.camera_input("Сделать фото")
|
44 |
-
st.session_state['detect_image_ready'] = False
|
45 |
-
|
46 |
-
# ====================== Детекция ===========================
|
47 |
-
|
48 |
-
if st_image:
|
49 |
-
pil_image = Image.open(st_image)
|
50 |
-
np_image_rgb = np.array(pil_image)
|
51 |
-
|
52 |
-
np_image_bgr = cv2.cvtColor(np_image_rgb, cv2.COLOR_RGB2BGR)
|
53 |
-
with st.spinner('Распознавание фото'):
|
54 |
-
detections = detector_model.detect_image(
|
55 |
-
np_image_bgr,
|
56 |
-
actions=actions,
|
57 |
-
align=align,
|
58 |
-
)
|
59 |
-
|
60 |
-
with st.spinner('Отрисовка результата'):
|
61 |
-
result_np_image = detector_model.draw_detections(
|
62 |
-
np_image_rgb=np_image_rgb,
|
63 |
-
detections=detections,
|
64 |
-
face_conf_threshold=face_conf_threshold,
|
65 |
-
)
|
66 |
-
st.session_state['detect_image_ready'] = True
|
67 |
-
|
68 |
-
# ============= Отрисовка результата ======================
|
69 |
-
|
70 |
-
if st_image and st.session_state['detect_image_ready']:
|
71 |
-
col1, col2 = st.columns(2)
|
72 |
-
with col1:
|
73 |
-
st.image(np_image_rgb, caption='Исходное фото', use_column_width=True)
|
74 |
-
with col2:
|
75 |
-
st.image(result_np_image, caption='Результат детекции', use_column_width=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|