EdControl / sidebars /video_analyse.py
Danil Islamov
Dev (#9)
5757396
raw
history blame
No virus
5.49 kB
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 5 23:45:21 2023
@author: M
"""
import cv2
import emrec_model as EM
import glob
import streamlit as st
import os
from plotlycharts import charts
#VIDEO_PATH = "C:\\Users\\ПК\\Videos"
README_IMG_FOLDER = "img"
README_FILE_PATH = "Readme_for_main_page.txt"
EMOTIONS_RU = {"angry":"Злость", "disgust":"Отвращение", "fear":"Страх",
"happy":"Счастье", "sad":"Грусть", "surprise":"Удивление"}
def draw_readme(column):
print(os.listdir("."))
with open(README_FILE_PATH, 'r') as f:
readme_line = f.readlines()
buffer = []
resourses = [os.path.basename(x) for x in glob.glob(README_IMG_FOLDER + "//*")]
for line in readme_line:
buffer.append(line)
for imgFolder in resourses:
if imgFolder in line:
column.markdown(''.join(buffer[:-1]))
column.image(os.path.join(README_IMG_FOLDER, imgFolder), use_column_width = True)
buffer.clear()
column.markdown(''.join(buffer))
def seconds_to_time(seconds):
seconds = seconds % (24 * 3600)
hour = seconds // 3600
seconds %= 3600
minutes = seconds // 60
seconds %= 60
time = "%d:%02d:%02d" % (hour, minutes, seconds)
return time
def count_video_length(path, name):
path_to_video = os.path.join(path, name)
cap = cv2.VideoCapture(path_to_video)
fps = cap.get(cv2.CAP_PROP_FPS)
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
duration = frame_count/fps
length = duration / 60 # duration in minutes
return length
#функция для отображения экспандеров до загрузки видео, аргумент - колонка, в которой все отображается
def default_expanders(teacher):
with teacher.expander(":red[ФИО_дата_время1.mp4]"):
st.write("...")
with teacher.expander(":green[ФИО_дата_время1.mp4]"):
st.write("...")
with teacher.expander(":orange[ФИО_дата_время1.mp4]"):
st.write("...")
#функция для отображения экспандеров после загрузки видео, аргументы-колонка и видеофайл
def add_expander(teacher, video, path, data):
with teacher.expander(":green[загруженное видео]"):
st.write("Аналитика")
info, timeStamps = st.columns([4, 6])
#video read
video_file = open(os.path.join(path, video.name), 'rb')
video_bytes = video_file.read()
#info.write("videoplayer")
info.video(video_bytes)
timeStamps.text("Вреременные отметки ⬇")
stampData = [{"время": "5:10", "Эмоция":"Удивление"},
{"время": "8:09", "Эмоция":"Грусть"},
{"время": "11:14", "Эмоция":"Счастье"}]
timeStamps.data_editor(stampData, disabled = True)
#selectbox выбора типа графика
radio = charts.radio_chart(data)
info.plotly_chart(radio, use_container_width=True)
bar = charts.bar_chart(data)
info.plotly_chart(bar, use_container_width=True)
with teacher.expander(":red[ФИО_дата_время1.mp4]"):
st.write("...")
with teacher.expander(":green[ФИО_дата_время1.mp4]"):
st.write("...")
with teacher.expander(":orange[ФИО_дата_время1.mp4]"):
st.write("...")
#view, отображаемая по нажатию на препода
def view_side_bar(name, teacher, path):
teacher.header("📸"+name)
rating, info = teacher.columns([3,5])
rating.header("Рейтинг")
rating.text("⭐⭐⭐")
info.header("Информация")
info.text("email, phone")
#upload файла
videoFile = teacher.file_uploader("Загрузить видео", type='mp4',\
accept_multiple_files=False)
#если видео загружено, сохраняем и отрисовываем больше экспандеров
if videoFile is not None:
#скачивание файла в дирректорию
with open(os.path.join(path, videoFile.name),"wb") as f:
f.write(videoFile.getbuffer())
videoLength = count_video_length(path, videoFile.name)
if videoLength <=3 and videoLength >= 0.01:
with teacher.status("Обработка"):
model = EM.VideoEmotionRecognizer(os.path.join(path, videoFile.name))
outputSummary = model.emotions_summary()
ruData = {}
for key, value in outputSummary.items():
ruData[EMOTIONS_RU[key]] = value
teacher.header("Выбор видео")
add_expander(teacher, videoFile, path, ruData)
else:
teacher.error("Длинное видео")
teacher.header("Выбор урока")
default_expanders(teacher)
#иначе отрисовываем дефолтное кол-во экспандеров
else:
teacher.header("Выбор видео")
default_expanders(teacher)