Update app.py
Browse files
app.py
CHANGED
@@ -1,5 +1,8 @@
|
|
1 |
import streamlit as st
|
2 |
import speech_recognition as sr
|
|
|
|
|
|
|
3 |
|
4 |
def transcribe_audio(audio_file):
|
5 |
recognizer = sr.Recognizer()
|
@@ -15,18 +18,34 @@ def transcribe_audio(audio_file):
|
|
15 |
|
16 |
def filter_audio(audio_file, input_text):
|
17 |
transcribed_text = transcribe_audio(audio_file)
|
18 |
-
transcribed_words =
|
19 |
-
input_words =
|
20 |
|
21 |
-
|
22 |
-
filtered_words = transcribed_words.intersection(input_words)
|
23 |
|
24 |
-
|
25 |
-
filtered_transcription = " ".join(filtered_words)
|
26 |
|
27 |
-
|
|
|
28 |
|
29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
|
31 |
uploaded_audio = st.file_uploader("Upload an audio file", type=["wav", "mp3", "ogg"])
|
32 |
input_text = st.text_area("Enter input text")
|
@@ -36,10 +55,13 @@ if uploaded_audio is not None:
|
|
36 |
|
37 |
if st.button("Filter Audio"):
|
38 |
if uploaded_audio is not None:
|
39 |
-
|
40 |
-
st.subheader("
|
41 |
-
st.write(
|
|
|
|
|
|
|
42 |
|
43 |
st.write(
|
44 |
-
"Note: This app transcribes the uploaded audio
|
45 |
)
|
|
|
1 |
import streamlit as st
|
2 |
import speech_recognition as sr
|
3 |
+
import os
|
4 |
+
from pydub import AudioSegment
|
5 |
+
from tempfile import NamedTemporaryFile
|
6 |
|
7 |
def transcribe_audio(audio_file):
|
8 |
recognizer = sr.Recognizer()
|
|
|
18 |
|
19 |
def filter_audio(audio_file, input_text):
|
20 |
transcribed_text = transcribe_audio(audio_file)
|
21 |
+
transcribed_words = transcribed_text.split()
|
22 |
+
input_words = input_text.split()
|
23 |
|
24 |
+
filtered_words = [word for word in transcribed_words if word in input_words]
|
|
|
25 |
|
26 |
+
return " ".join(filtered_words)
|
|
|
27 |
|
28 |
+
def create_filtered_audio(original_audio, matching_words):
|
29 |
+
original_audio = AudioSegment.from_file(original_audio, format="wav")
|
30 |
|
31 |
+
matching_segments = []
|
32 |
+
matching_words = matching_words.split()
|
33 |
+
|
34 |
+
for word in matching_words:
|
35 |
+
word_start = transcribed_text.index(word)
|
36 |
+
word_end = word_start + len(word)
|
37 |
+
matching_segments.append(original_audio[word_start * 1000 : word_end * 1000])
|
38 |
+
|
39 |
+
filtered_audio = AudioSegment.silent(duration=len(original_audio))
|
40 |
+
for segment in matching_segments:
|
41 |
+
filtered_audio = filtered_audio.overlay(segment)
|
42 |
+
|
43 |
+
with NamedTemporaryFile(suffix=".wav", delete=False) as temp_audio_file:
|
44 |
+
filtered_audio.export(temp_audio_file.name, format="wav")
|
45 |
+
|
46 |
+
return temp_audio_file.name
|
47 |
+
|
48 |
+
st.title("Audio Word Filter and Regeneration")
|
49 |
|
50 |
uploaded_audio = st.file_uploader("Upload an audio file", type=["wav", "mp3", "ogg"])
|
51 |
input_text = st.text_area("Enter input text")
|
|
|
55 |
|
56 |
if st.button("Filter Audio"):
|
57 |
if uploaded_audio is not None:
|
58 |
+
matching_words = filter_audio(uploaded_audio, input_text)
|
59 |
+
st.subheader("Matching Words:")
|
60 |
+
st.write(matching_words)
|
61 |
+
filtered_audio = create_filtered_audio(uploaded_audio, matching_words)
|
62 |
+
st.subheader("Filtered Audio:")
|
63 |
+
st.audio(filtered_audio, format="audio/wav")
|
64 |
|
65 |
st.write(
|
66 |
+
"Note: This app transcribes the uploaded audio, filters it to retain only the words mentioned in the input text, and generates filtered audio without altering the original audio."
|
67 |
)
|