File size: 2,525 Bytes
7b18d60
 
502159a
eb134bd
0659665
7b18d60
68a9c43
 
 
 
 
0c0c610
 
68a9c43
0c0c610
 
0659665
 
 
 
 
 
 
 
 
0c0c610
0659665
 
 
ebd3d99
65129d9
0659665
ebd3d99
0c0c610
0659665
ebd3d99
eb134bd
542278b
eb134bd
0c0c610
ebd3d99
0c0c610
 
 
 
 
 
 
12974e0
0c0c610
 
12974e0
0c0c610
 
 
 
 
12974e0
0c0c610
 
12974e0
0c0c610
 
 
12974e0
0c0c610
 
 
 
 
12974e0
0c0c610
 
 
 
 
12974e0
 
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
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_function(audio, state, uploaded_audio, 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_var: state, transcription_var: state}  # Return a meaningful message

    try:
        time.sleep(3)
        text = p(audio, chunk_length_s= 50)["text"]
        state += text + "\n"
        return {state_var: state, transcription_var: state}
    except Exception as e:
        return {transcription_var: "An error occurred during transcription.", state_var: state}  # Handle other exceptions

# ... [most of your code remains unchanged]

def reset_output(transcription, state):
    """Function to reset the state to an empty string."""
    return "", ""

with gr.Blocks() as demo:
    state_var = gr.State("")

    with gr.Row():
        with gr.Column():
            microphone = gr.Audio(source="microphone", type="filepath", label="Microphone")
            uploaded_audio = gr.Audio(label="Upload Audio File", type="filepath", source="upload")
            m3u8_url = gr.Textbox(label="m3u8 URL | E.g.: from kvf.fo or logting.fo")

        with gr.Column():
            transcription_var = gr.Textbox(type="text", label="Transcription", readonly=True)

    with gr.Row():
        transcribe_button = gr.Button("Transcribe")
        reset_button = gr.Button("Reset output")

    transcribe_button.click(
        transcribe_function,
        [microphone, state_var, uploaded_audio, m3u8_url],
        [transcription_var, state_var]
    )

    reset_button.click(
        reset_output,
        [transcription_var, state_var],
        [transcription_var, state_var]
    )

demo.launch()