# -*- 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: teacher.write("Обработка") 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)