Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import plotly.express as px | |
| import pandas as pd | |
| import logging | |
| import torch | |
| import numpy as np | |
| import pandas as pd | |
| from inference import predict | |
| logging.basicConfig(level=logging.INFO) | |
| def plotly_plot_video(video_path): | |
| data_emo = pd.DataFrame() | |
| data_emo['Emotion'] = ['😠 злость', '🤢 отвращение', '😨 страх', '😄 радость', '😐 нейтральность', '😢 печаль', '😲 удивление'] | |
| data_per = pd.DataFrame() | |
| data_per['Personality'] = ['👐 открытость опыту', '💯 добросовестность', '🤗 доброжелательность', '🎉 экстраверсия', '🧘♀️ эмоциональная стабильность'] | |
| try: | |
| pred_emo, pred_per = predict(video_path) | |
| data_emo['Probability'] = pred_emo[0] | |
| data_per['Predict'] = pred_per[0] | |
| p_emo = px.bar(data_emo, x='Emotion', y='Probability', color="Probability") | |
| p_per = px.bar(data_per, x='Personality', y='Predict', color="Predict") | |
| return ( | |
| p_emo, p_per | |
| ) | |
| except Exception as e: | |
| logging.error(f"Processing failed: {e}") | |
| data_emo['Probability'] = [0] * data_emo.shape[0] | |
| data_per['Predict'] = [0] * data_per.shape[0] | |
| p_emo = px.bar(data_emo, x='Emotion', y='Probability', color="Probability") | |
| p_per = px.bar(data_per, x='Personality', y='Predict', color="Predict") | |
| return ( | |
| p_emo, p_per | |
| ) | |
| def create_demo_video(): | |
| with gr.Blocks(theme='Nymbo/rounded-gradient', css=".gradio-container {background-color: #F0F8FF}", title="Emotion and Personality Detection") as demo: | |
| gr.Markdown("# Предсказание эмоций и персональных качеств") | |
| with gr.Row(): | |
| video_input = gr.Video( | |
| sources=["upload", "webcam"], | |
| label="Record or Upload Video", | |
| format="mp4", | |
| interactive=True | |
| ) | |
| with gr.Row(): | |
| emo_plot = gr.Plot(label="Предсказание эмоций") | |
| per_plot = gr.Plot(label="Предсказание персональных качеств") | |
| video_input.change(fn=plotly_plot_video, inputs=video_input, outputs=[emo_plot, per_plot]) | |
| return demo | |
| def create_demo(): | |
| audio = create_demo_video() | |
| demo = gr.TabbedInterface( | |
| [audio], | |
| ["Предсказание эмоций и персональных качеств"], | |
| ) | |
| return demo | |
| if __name__ == "__main__": | |
| demo = create_demo() | |
| demo.launch() |