SSCD / app.py
dashakoryakovskaya's picture
Update app.py
70e0f5e verified
Raw
History Blame Contribute Delete
2.67 kB
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()