from transformers import ASTFeatureExtractor, ASTForAudioClassification import torch import librosa import numpy as np import pandas as pd device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = ASTForAudioClassification.from_pretrained("MIT/ast-finetuned-audioset-10-10-0.4593").to(device) feature_extractor = ASTFeatureExtractor.from_pretrained("MIT/ast-finetuned-audioset-10-10-0.4593") def detect_siren(audio_path): audio, sr = librosa.load(audio_path, sr=16000) if len(audio.shape) == 1: audio = np.expand_dims(audio, axis=0) inputs = feature_extractor(audio, sampling_rate=16000, return_tensors="pt") inputs = {k: v.to(device) for k, v in inputs.items()} with torch.no_grad(): outputs = model(**inputs) logits = outputs.logits predicted_class_idx = logits.argmax(-1).item() return model.config.id2label[predicted_class_idx] # Example: Analyze multiple files audio_files = ["/kaggle/input/emergency-vehicle-siren-sounds/sounds/ambulance/sound_1.wav", "/kaggle/input/emergency-vehicle-siren-sounds/sounds/ambulance/sound_10.wav", "/kaggle/input/emergency-vehicle-siren-sounds/sounds/ambulance/sound_100.wav"] results = [] for file in audio_files: label = detect_siren(file) results.append({"file": file, "label": label}) # Save results df = pd.DataFrame(results) df.to_csv("detection_results.csv", index=False) # app.py import streamlit as st st.title("🚨 Emergency Vehicle Siren Detection") df = pd.read_csv("detection_results.csv") st.dataframe(df) for index, row in df.iterrows(): if "siren" in row['label'].lower(): st.error(f"🚨 {row['file']} => Siren Detected!") else: st.success(f"✅ {row['file']} => No Siren.")