| 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="Result Text")], |
| outputs='json', |
| ) |
| demo.launch() |
|
|