tonytz's picture
Update app.py
09044bc
raw
history blame
1.55 kB
# import library
import gradio as gr
import librosa
import pandas as pd
import numpy as np
import pickle
import os
import tensorflow as tf
from tensorflow.keras.layers.experimental import preprocessing
from tensorflow.keras.preprocessing.image import load_img, img_to_array
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D, BatchNormalization, Input
def get_waveform_label(file):
lab = tf.strings.split(file, os.path.sep)[-2]
audio_binary = tf.io.read_file(file)
audio, _ = tf.audio.decode_wav(audio_binary)
waveform=tf.squeeze(audio, axis=-1)
return waveform
def get_spectrogram_label(audio):
padding = tf.zeros([300000]-tf.shape(audio), dtype=tf.float32)
wave = tf.cast(audio, tf.float32)
eq_length = tf.concat([wave, padding], 0)
spectrogram = tf.signal.stft(eq_length, frame_length=210, frame_step=110)
spectrogram = tf.abs(spectrogram)
spectrogram = tf.expand_dims(spectrogram, -1)
return spectrogram
# %load saved model
model = pickle.load(open('audio_classifier_model.pkl', 'rb'))
def get_audio(audio):
audio_waveform = get_waveform_label(audio)
audio_spect = get_spectrogram_label(audio_waveform)
final_feat = np.array([audio_spect])
res = np.argmax(model.predict(final_feat),axis=1)
if res == 1:
res ="Dog Audio";
else:
res = "Cat Audio"
return res
iface = gr.Interface(fn=get_audio,inputs=["audio"],outputs=["text"],title="CAT/DOG AUDIO CLASSIFICATION").launch(inline=False)