File size: 1,370 Bytes
6e0cc42
 
 
 
 
46e51b3
6e0cc42
 
46e51b3
6e0cc42
 
 
 
 
 
 
 
 
 
46e51b3
6e0cc42
 
 
 
 
46e51b3
6e0cc42
 
46e51b3
819e887
6e0cc42
46e51b3
6e0cc42
 
 
 
 
46e51b3
6e0cc42
 
46e51b3
6e0cc42
 
46e51b3
6e0cc42
 
46e51b3
6e0cc42
 
 
46e51b3
6e0cc42
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
import streamlit as st
import numpy as np
import librosa
import tensorflow as tf


model = tf.keras.models.load_model("audio_classifier.h5")


SAMPLE_RATE = 16000
N_MELS = 128
DURATION = 5
max_time_steps = 109

def preprocess_audio(file):
    audio, _ = librosa.load(file, sr=SAMPLE_RATE, duration=DURATION)
    mel_spectrogram = librosa.feature.melspectrogram(y=audio, sr=SAMPLE_RATE, n_mels=N_MELS)
    mel_spectrogram = librosa.power_to_db(mel_spectrogram, ref=np.max)

    
    if mel_spectrogram.shape[1] < max_time_steps:
        mel_spectrogram = np.pad(mel_spectrogram, ((0, 0), (0, max_time_steps - mel_spectrogram.shape[1])), mode='constant')
    else:
        mel_spectrogram = mel_spectrogram[:, :max_time_steps]

    mel_spectrogram = mel_spectrogram.reshape(N_MELS, max_time_steps, 1) 
    return mel_spectrogram


st.title("Deepfake Audio Classification App")


uploaded_file = st.file_uploader("Upload an audio file", type=["flac", "wav"])

if uploaded_file is not None:
    st.audio(uploaded_file, format="audio/wav")

    
    mel_spectrogram = preprocess_audio(uploaded_file)

    
    prediction = model.predict(np.array([mel_spectrogram]))

    
    predicted_class = np.argmax(prediction)

    
    label_map = {0: "Spoofed", 1: "Bonafide"}
    predicted_label = label_map[predicted_class]

    
    st.write(f"Predicted Label: {predicted_label}")