File size: 2,540 Bytes
4f92cf0
 
 
96acb32
2417027
21f6ca3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2417027
4f92cf0
96acb32
 
 
 
 
 
 
 
 
 
 
2417027
21f6ca3
 
96acb32
 
 
 
 
1e35524
21f6ca3
 
 
96acb32
 
 
 
 
 
 
 
 
 
21f6ca3
 
 
fb7d32a
0830206
96acb32
fb7d32a
2417027
4f92cf0
fb7d32a
4fd964c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import gradio as gr
from transformers import pipeline
from gradio_client import Client, file
import json

language_classifier = Client("adrien-alloreview/speechbrain-lang-id-voxlingua107-ecapa")
transcriber = Client("tensorlake/audio-extractors")
emotion_detector = pipeline(
    "audio-classification",
    model="HowMannyMore/wav2vec2-lg-xlsr-ur-speech-emotion-recognition",
)
model_name_rus = "IlyaGusev/rubertconv_toxic_clf"
toxic_detector = pipeline(
    "text-classification",
    model=model_name_rus,
    tokenizer=model_name_rus,
    framework="pt",
    max_length=512,
    truncation=True,
)


def detect_language(file_path):
    try:
        result = language_classifier.predict(param_0=file(file_path), api_name="/predict")
        language_result = result["label"].split(": ")[1]
        if language_result.lower() in ["russian", "belarussian", "ukrainian"]:
            selected_language = "russian"
        else:
            selected_language = "kazakh"
        return selected_language
    except Exception as e:
        print(f"Language detection failed: {e}")
        return None


def detect_emotion(audio):
    try:
        res = emotion_detector(audio)
        emotion_with_max_score = res[0]["label"]
        return emotion_with_max_score
    except Exception as e:
        return f"Emotion detection failed: {e}"


def detect_toxic_local(text_whisper):
    try:
        res = toxic_detector([text_whisper])[0]["label"]
        if res == "toxic":
            return True
        elif res == "neutral":
            return False
        else:
            return None
    except Exception as e:
        print(f"Toxicity detection failed: {e}")
        return None


def assessment(file_path, result_text):
    result_emotion = detect_emotion(file_path) or "unknown"
    result_toxic = detect_toxic_local(result_text) or False
    return json.dumps({"emotion": result_emotion, "toxic": result_toxic})


demo = gr.Blocks()
with demo:
    with gr.Tabs():
        with gr.TabItem('Language Detection'):
            language_detection_interface = gr.Interface(
                fn=detect_language,
                inputs=gr.Audio(sources=["upload"], type="filepath"),
                outputs='text',
            )
        with gr.TabItem('Toxic & Emotion Detection'):
            toxic_and_emotion_detection_interface = gr.Interface(
                fn=assessment,
                inputs=[gr.Audio(sources=["upload"], type="filepath"), gr.Textbox(label="Language")],
                outputs='json',
            )
demo.launch()