Spaces:
Runtime error
Runtime error
File size: 3,593 Bytes
d008cad 94ec7f8 063e974 99cbfbc 63beaa0 a406b0b b2a4dc4 6c938cd 28cc6c6 6c938cd f758117 63beaa0 d008cad cda85cb 75b78d9 cf4974d 28cc6c6 75b78d9 99cbfbc 75b78d9 f758117 063e974 99cbfbc |
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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
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 torchaudio
import wave
import io
from scipy.io import wavfile
import pydub
import time
# MODEL LOADING and INITIALISATION
model = torch.jit.load("snorenetv1_small.ptl")
model.eval()
# Audio parameters
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 😴')
upload_file = st.file_uploader("Upload wav file", type=["wav"])
if upload_file is not None:
file_details = {
"Filename": upload_file.name,
"Filesize":f"{upload_file.size / 1024:.2f} KB",
"File Type": upload_file.type,
}
st.write("File Details:", file_details)
# wav_audio_data = None
# if wav_audio_data is not None:
# data = np.frombuffer(wav_audio_data, dtype=np.int16)
# st.write(len(data))
# duration = len(data)//110000
# num_of_samples = len(data)
# sample_rate = num_of_samples // duration
# # data = np.array(wav_audio_data, dtype=float)
# max_abs_value = np.max(np.abs(data))
# np_array = (data/max_abs_value) * 32767
# scaled_data = np_array.astype(np.int16).tobytes()
# with io.BytesIO() as fp, wave.open(fp, mode="wb") as waveobj:
# waveobj.setnchannels(1)
# waveobj.setframerate(96000)
# waveobj.setsampwidth(2)
# waveobj.setcomptype("NONE", "NONE")
# waveobj.writeframes(scaled_data)
# wav_make = fp.getvalue()
# with open("output.wav", 'wb') as wav_file:
# wav_file.write(wav_make)
file_uploaded = False
if file_uploaded == False:
st.write("Uploading File.....")
audio = pydub.AudioSegment.from_wav(upload_file)
file_uploaded = True
time.sleep(2)
st.write("File Uploaded!")
if file_uploaded == True:
st.write("Analysing...")
audio.export(upload_file.name, format='wav')
sr, waveform = wavfile.read(upload_file.name)
snore = 0
other = 0
s=0
n=16000
endReached = False
while(endReached==False):
input_tensor = torch.tensor(waveform[s:n]).unsqueeze(0).to(torch.float32)
result = model(input_tensor)
if np.abs(result[0][0]) > np.abs(result[0][1]):
other += 1
else:
snore += 1
s += 16000
n += 16000
if(n >= len(waveform)):
endReached = True
# PERCENTAGE OF SNORING PLOT
total = snore + other
snore_percentage = (snore / total) * 100
other_percentage = (other / total) * 100
categories = ["Snore", "Other"]
percentages = [snore_percentage, other_percentage]
plt.figure(figsize=(8, 4))
plt.barh(categories, percentages, color=['#ff0033', '#00ffee'])
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)
|