import gradio as gr import numpy as np import librosa import tensorflow as tf # Configuracoes do audio TARGET_SR = 48000 TEMPO_MAX = 10 N_FFT = 4096 HOP_LENGTH = 1024 N_MELS = 128 FMAX = TARGET_SR // 2 CLASS_NAMES = ["REFERENCIA", "DESALINHAMENTO", "DESBALANCEAMENTO", "SOBRECARGA"] # Carregar o modelo model = tf.keras.models.load_model('modelo_classificacao_audios.h5') def carregar_audio_fixo(caminho, sr=TARGET_SR, duracao=TEMPO_MAX): audio, _ = librosa.load(caminho, sr=sr, mono=True) amostras = int(sr * duracao) if len(audio) < amostras: audio = np.pad(audio, (0, amostras - len(audio)), mode='constant') else: audio = audio[:amostras] return audio def classificar_audio(caminho_audio): if caminho_audio is None: return "Por favor, envie um arquivo de audio." try: audio = carregar_audio_fixo(caminho_audio) mel_spec = librosa.feature.melspectrogram( y=audio, sr=TARGET_SR, n_fft=N_FFT, hop_length=HOP_LENGTH, n_mels=N_MELS, fmax=FMAX, power=2.0 ) log_mel_spec = librosa.power_to_db(mel_spec, ref=np.max) x_input = log_mel_spec[np.newaxis, ..., np.newaxis] preds = model.predict(x_input)[0] return {CLASS_NAMES[i]: float(preds[i]) for i in range(len(CLASS_NAMES))} except Exception as e: return f"Erro no processamento: {str(e)}" interface = gr.Interface( fn=classificar_audio, inputs=gr.Audio(type="filepath", label="Arraste ou grave o audio aqui"), outputs=gr.Label(num_top_classes=4, label="Predicoes"), title="Classificador de Falhas em Maquinas por Audio (Gradio Lite)", description="Aplicacao estatica rodando direto no seu navegador." ) interface.launch() tensorflow librosa soundfile numpy matplotlib