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()