Spaces:
Running
Running
import gradio as gr | |
import time | |
from transformers import pipeline | |
import torch | |
import ffmpeg # Make sure it's ffmpeg-python | |
# Check if GPU is available | |
use_gpu = torch.cuda.is_available() | |
# Configure the pipeline to use the GPU if available | |
if use_gpu: | |
p = pipeline("automatic-speech-recognition", | |
model="carlosdanielhernandezmena/wav2vec2-large-xlsr-53-faroese-100h", device=0) | |
else: | |
p = pipeline("automatic-speech-recognition", | |
model="carlosdanielhernandezmena/wav2vec2-large-xlsr-53-faroese-100h") | |
def extract_audio_from_m3u8(url): | |
try: | |
output_file = "output_audio.aac" | |
ffmpeg.input(url).output(output_file).run(overwrite_output=True) | |
return output_file | |
except Exception as e: | |
return f"An error occurred: {e}" | |
def transcribe(audio, state="", uploaded_audio=None, m3u8_url=""): | |
if m3u8_url: | |
audio = extract_audio_from_m3u8(m3u8_url) | |
if uploaded_audio is not None: | |
audio = uploaded_audio | |
if not audio: | |
return state, state # Return a meaningful message | |
try: | |
time.sleep(3) | |
text = p(audio, chunk_length_s= 50)["text"] | |
state += text + "\n" | |
return state, state | |
except Exception as e: | |
return "An error occurred during transcription.", state # Handle other exceptions | |
def reset(state): | |
state = '' | |
return state | |
demo = gr.Interface( | |
fn=transcribe, | |
inputs=[ | |
gr.components.Audio(source="microphone", type="filepath"), | |
'state', | |
gr.components.Audio(label="Upload Audio File", type="filepath", source="upload"), | |
gr.components.Textbox(label="m3u8 URL | E.g.: from kvf.fo or logting.fo") | |
], | |
outputs=[ | |
gr.components.Textbox(type="text"), | |
"state" | |
], | |
live=True) | |
demo.launch() | |