Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import librosa | |
| from transformers import pipeline | |
| # Step 2: Load the "Digital Ear" (The Model) | |
| # This model is specifically tuned to catch the "robotic hum" of AI voices | |
| a_detector = pipeline("audio-classification", model="mo-thecreator/Deepfake-audio-detection") | |
| # Step 3: Create the "Listener" Function | |
| def analyze_voice(audio_file): | |
| if not audio_file: | |
| return "ERROR: No audio provided." | |
| # Ask the AI: "Does this sound like a robot or a human?" | |
| # The model returns a list of dictionaries sorted by score | |
| results = a_detector(audio_file) | |
| # We look at the highest confidence prediction (the first item in the list) | |
| top_result = results[0] | |
| verdict = top_result['label'].lower() | |
| confidence = top_result['score'] | |
| # Most models use Label 0 for Fake/Spoof, and Label 1 for Real | |
| if verdict == "fake" or "spoof" in verdict or "label_0" in verdict: | |
| return f"🚨 WARNING: AI Voice Clone Detected! (Confidence: {confidence:.2%})" | |
| else: | |
| return f"✅ SUCCESS: Genuine Human Voice. (Confidence: {confidence:.2%})" | |
| # Step 4: Build the IOB Helpline Demo (Gradio) | |
| # I have added a Blocks interface here similar to the Video one for better presentation! | |
| with gr.Blocks(title="IOB Sentinel: Voice Shield") as demo: | |
| gr.Markdown("# IOB Sentinel: Audio Anti-Spoofing Engine") | |
| gr.Markdown("Detecting AI voice clones and synthesized speech to prevent Vishing (Voice Phishing).") | |
| with gr.Tabs(): | |
| with gr.TabItem("Upload Audio"): | |
| upload_input = gr.Audio(type="filepath", label="Upload Voice Clip") | |
| upload_output = gr.Textbox(label="Result") | |
| upload_btn = gr.Button("Analyze Uploaded Audio", variant="primary") | |
| upload_btn.click(fn=analyze_voice, inputs=upload_input, outputs=upload_output) | |
| with gr.TabItem("Record Audio (Microphone)"): | |
| # Gradio 4 syntax for microphone | |
| mic_input = gr.Audio(sources=["microphone"], type="filepath", label="Record Voice Clip Live") | |
| mic_output = gr.Textbox(label="Result") | |
| mic_btn = gr.Button("Analyze Live Audio", variant="primary") | |
| mic_btn.click(fn=analyze_voice, inputs=mic_input, outputs=mic_output) | |
| if __name__ == "__main__": | |
| demo.launch() | |