Spaces:
Runtime error
Runtime error
File size: 3,331 Bytes
d008cad 94ec7f8 063e974 99cbfbc 63beaa0 8f954b0 a406b0b b2a4dc4 6c938cd 28cc6c6 8cd428d 0c0344f 4db3eab 8f954b0 6c938cd f758117 8f954b0 e2c4c0e 0532438 8f888de b75a31b 8f954b0 b75a31b 8f888de cf4974d ab9c217 32bfd0d b75a31b fdfcd4d b75a31b 8f888de 9ca3c5c 8583d6e b75a31b 8583d6e b75a31b 8583d6e |
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
import streamlit as st
from st_audiorec import st_audiorec
import matplotlib.pyplot as plt
import sounddevice as sd
import numpy as np
import pandas as pd
import torch
import torch.nn as nn
import torchaudio
import wave
import io
from scipy.io import wavfile
import pydub
import time
import os
import atexit
import librosa
import torchaudio.functional as F
import torchaudio.transforms as T
# MODEL LOADING and INITIALISATION
n_fft = 1024
win_length = None
hop_length = 32
# Input tensor shape was ([1,16000])
class SnoreNet(nn.Module):
def __init__(self):
super().__init__()
self.transform = torchaudio.transforms.Spectrogram(n_fft = n_fft,win_length = win_length,hop_length = hop_length,center = True ,pad_mode = "reflect",power = 2.0,)
self.fc1 = nn.Linear(257013, 512)
self.act1 = nn.Tanh()
self.fc2 = nn.Linear(512, 2)
self.logs1 = nn.LogSoftmax(dim=1)
def forward(self, raw_audio_tensor):
# print(raw_audio_tensor.shape)
spectrogram = self.transform(raw_audio_tensor)
# print(spectrogram.shape)
spectrogram = spectrogram.reshape(spectrogram.size(0), -1)
# print(spectrogram.shape)
output = self.act1(self.fc1(spectrogram))
output = self.fc2(output)
output = torch.abs(self.logs1(output))
return output
model = SnoreNet()
model.load_state_dict(torch.load('snoreNetv1.pt'))
model.eval()
# Audio parameters
def process_data(waveform_chunks):
snore = 0
other = 0
for chunk in waveform_chunks:
input_tensor = torch.tensor(chunk).unsqueeze(0).to(torch.float32)
# st.write(input_tensor[0][98])
with torch.no_grad():
result = model(input_tensor)
# st.write(result)
if np.abs(result[0][0]) > np.abs(result[0][1]):
other += 1
else:
snore += 1
return snore, other
st.sidebar.markdown(
"""
<div align="justify">
<h4>ABOUT</h4>
<p>Transform your sleep experience with the cutting-edge Snore Detector by Hypermind Labs!
Discover the power to monitor and understand your nighttime sounds like never before.
Take control of your sleep quality and uncover the secrets of your peaceful slumber with our innovative app.</p>
</div>
""",
unsafe_allow_html=True,
)
st.title('Real-Time Snore Detection App 😴')
uploaded_file = st.file_uploader("Upload Sample", type=["wav"])
if uploaded_file is not None:
st.write("Analsysing...")
audio_bytes = uploaded_file.getvalue()
audio_array = np.frombuffer(audio_bytes, dtype=np.int16)
chunk_size = 80000
num_chunks = len(audio_array) // chunk_size
waveform_chunks = np.array_split(audio_array[:num_chunks * chunk_size], num_chunks)
snore, other = process_data(waveform_chunks)
total = snore + other
snore_percentage = (snore / total) * 100
other_percentage = (other / total) * 100
categories = ["Snore"]
percentages = [snore_percentage]
plt.figure(figsize=(8, 4))
plt.barh(categories, percentages, color=['#ff0033'])
plt.xlabel('Percentage')
plt.title('Percentage of Snoring')
plt.xlim(0, 100)
for i, percentage in enumerate(percentages):
plt.text(percentage, i, f' {percentage:.2f}%', va='center')
st.write("DONE")
st.pyplot(plt) |