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)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|