Spaces:
Sleeping
Sleeping
| import torch | |
| import gradio as gr | |
| from model import ECAPA_gender | |
| model = ECAPA_gender.from_pretrained("Beijuka/voice-gender-classifier") | |
| model.eval() | |
| device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
| model.to(device) | |
| def predict_gender_confidence(audio_file): | |
| if audio_file is None: | |
| return "No audio provided" | |
| try: | |
| # Load audio | |
| audio = model.load_audio(audio_file.name if hasattr(audio_file, "name") else audio_file) | |
| audio = audio.to(device) | |
| # Forward pass | |
| with torch.no_grad(): | |
| logits = model.forward(audio) | |
| probs = torch.softmax(logits, dim=1).cpu().numpy()[0] | |
| pred_idx = logits.argmax(dim=1).item() | |
| gender_pred = model.pred2gender[pred_idx].capitalize() | |
| confidence = probs[pred_idx] * 100 | |
| return f"{gender_pred} — {confidence:.1f}% confidence" | |
| except Exception as e: | |
| return f"Error: {e}" | |
| iface = gr.Interface( | |
| fn=predict_gender_confidence, | |
| inputs=gr.Audio(type="filepath", label="Upload audio file", sources=["upload"]), | |
| outputs=gr.Textbox(label="Predicted Gender with Confidence"), | |
| title="Voice Gender Classifier", | |
| description="Upload an audio file and the model predicts speaker gender with confidence.", | |
| allow_flagging="never" | |
| ) | |
| iface.launch(share=True) |