Spaces:
Sleeping
Sleeping
import torch | |
import streamlit as st | |
import torchaudio as ta | |
from io import BytesIO | |
from transformers import AutoProcessor, SeamlessM4TModel, WhisperProcessor, WhisperForConditionalGeneration | |
if torch.cuda.is_available(): | |
device = "cuda:0" | |
torch_dtype = torch.float16 | |
else: | |
device = "cpu" | |
torch_dtype = torch.float32 | |
SAMPLING_RATE=16000 | |
task = "transcribe" | |
print(f"{device} Active!") | |
# load Whisper model and processor | |
processor = WhisperProcessor.from_pretrained("openai/whisper-small") | |
model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-small") | |
# Title of the app | |
st.title("Audio Player with Live Transcription") | |
# Sidebar for file uploader and submit button | |
st.sidebar.header("Upload Audio Files") | |
uploaded_files = st.sidebar.file_uploader("Choose audio files", type=["mp3", "wav"], accept_multiple_files=True) | |
submit_button = st.sidebar.button("Submit") | |
# def transcribe_audio(audio_data): | |
# recognizer = sr.Recognizer() | |
# with sr.AudioFile(audio_data) as source: | |
# audio = recognizer.record(source) | |
# try: | |
# # Transcribe the audio using Google Web Speech API | |
# transcription = recognizer.recognize_google(audio) | |
# return transcription | |
# except sr.UnknownValueError: | |
# return "Unable to transcribe the audio." | |
# except sr.RequestError as e: | |
# return f"Could not request results; {e}" | |
if submit_button and uploaded_files is not None: | |
st.write("Files uploaded successfully!") | |
for uploaded_file in uploaded_files: | |
# Display file name and audio player | |
st.write(f"**File name**: {uploaded_file.name}") | |
st.audio(uploaded_file, format=uploaded_file.type) | |
# Transcription section | |
st.write("**Transcription**:") | |
# Read the uploaded file data | |
waveform, sampling_rate = ta.load(uploaded_file.getvalue()) | |
resampled_inp = ta.functional.resample(waveform, orig_freq=sampling_rate, new_freq=SAMPLING_RATE) | |
input_features = processor(resampled_inp[0], sampling_rate=16000, return_tensors='pt').input_features | |
## Here Generate specific language!!! | |
forced_decoder_ids = processor.get_decoder_prompt_ids(language="french", task="translate") | |
if task == "translate": | |
predicted_ids = model.generate(input_features, forced_decoder_ids=forced_decoder_ids) | |
else: | |
predicted_ids = model.generate(input_features) | |
# decode token ids to text | |
transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True) | |
st.write(transcription) | |
# print(waveform, sampling_rate) | |
# Run transcription function and display | |
# import pdb;pdb.set_trace() | |
# st.write(audio_data.getvalue()) | |