File size: 3,866 Bytes
6c226f9
8e787d3
6c226f9
d790c0b
ec615a5
d790c0b
88183ad
ef45b2f
6c226f9
a5bfe25
9d6fa91
ec615a5
 
 
6c226f9
 
 
 
 
 
 
 
 
3c0cd8e
 
ec615a5
 
3c0cd8e
ec615a5
 
ef45b2f
6c226f9
ef45b2f
9814301
ec615a5
ef45b2f
 
 
 
 
6c226f9
 
 
 
3c0cd8e
 
 
ef45b2f
 
 
 
 
 
 
 
 
3c0cd8e
 
 
 
 
 
609dcbe
6c226f9
 
 
9814301
a5bfe25
ec615a5
ef45b2f
 
 
ec615a5
 
6c226f9
 
 
 
7097513
 
ef45b2f
7097513
6c226f9
 
34bd5ac
a5bfe25
ec615a5
80d9bfc
 
 
ec615a5
 
6c226f9
 
ef45b2f
ec615a5
3c0cd8e
6c226f9
ef45b2f
7097513
ef45b2f
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
import gradio as gr
import yt_dlp as youtube_dl
from transformers import pipeline
from transformers.pipelines.audio_utils import ffmpeg_read

import tempfile
import os
import time  # Hinzugefügtes Modul für die Zeitberechnung

MODEL_NAME = "openai/whisper-large-v3"
BATCH_SIZE = 8
FILE_LIMIT_MB = 1000
YT_LENGTH_LIMIT_S = 3600  # limit to 1 hour YouTube files

device = 0 if torch.cuda.is_available() else "cpu"

pipe = pipeline(
    task="automatic-speech-recognition",
    model=MODEL_NAME,
    chunk_length_s=30,
    device=device,
)

def transcribe(inputs, task):
    if inputs is None:
        raise gr.Error("No audio file submitted! Please upload or record an audio file before submitting your request.")

    text = pipe(inputs, batch_size=BATCH_SIZE, generate_kwargs={"task": task}, return_timestamps=True)["text"]
    return  text

# ... (Fortsetzung des Codes für die Funktionen _return_yt_html_embed, download_yt_audio, yt_transcribe, etc.)

# Schritt 1: Definiere das gr.Blocks-Element für das Layout der Demo
demo = gr.Blocks(theme="TogetherAi/Alex2")

# Schritt 2: Ändere das Layout für das Blockelement auf "centered" und setze die Breite auf 500 Pixel
demo.layout = "centered"  # Layout auf "centered" ändern
demo.width = 500  # Breite auf 500 setzen

# Schritt 3: Erstelle die Schnittstellen wie zuvor für Audioaufnahmen, das Hochladen von Audiodateien und das Transkribieren von YouTube-Videos
mf_transcribe = gr.Interface(
    fn=transcribe,
    inputs=[
        gr.inputs.Audio(source="microphone", type="filepath", optional=True),
        gr.inputs.Radio(["transcribe", "translate"], label="Task", default="transcribe"),
    ],
    outputs="text",
    layout="horizontal",
    theme="TogetherAi/Alex2",
    title="Whisper Large V3: Audio transkribieren",
    description=(
        "Transkribiere lange Mikrofon- oder Audioeingaben mit einem Klick! Die Demo verwendet den"
        f" Checkpoint [{MODEL_NAME}](https://huggingface.co/{MODEL_NAME}) und 🤗 Transformers, um Audiodateien"
        " beliebiger Länge zu transkribieren."
    ),
    allow_flagging="never",
)

file_transcribe = gr.Interface(
    fn=transcribe,
    inputs=[
        gr.inputs.Audio(source="upload", type="filepath", optional=True, label="Audio file"),
        gr.inputs.Radio(["transcribe", "translate"], label="Task", default="transcribe"),
    ],
    outputs="text",
    layout="horizontal",
    theme="TogetherAi/Alex2",
    title="Whisper Large V3: Transcribe Audio",
    description=(
        "Transkribiere lange Mikrofon- oder Audioeingaben mit einem Klick! Die Demo verwendet den"
        f" Checkpoint [{MODEL_NAME}](https://huggingface.co/{MODEL_NAME}) und 🤗 Transformers, um Audiodateien"
        " beliebiger Länge zu transkribieren."
    ),
    allow_flagging="never",
)

yt_transcribe = gr.Interface(
    fn=yt_transcribe,
    inputs=[
        gr.inputs.Textbox(lines=1, placeholder="Paste the URL to a YouTube video here", label="YouTube URL"),
        gr.inputs.Radio(["transcribe", "translate"], label="Task", default="transcribe"),
    ],
    outputs=["html", "text"],
    layout="horizontal",
    theme="TogetherAi/Alex2",
    title="Whisper Large V3: Transcribe YouTube",
    description=(
        "Transkribiere lange Mikrofon- oder Audioeingaben mit einem Klick! Die Demo verwendet den"
        f" Checkpoint [{MODEL_NAME}](https://huggingface.co/{MODEL_NAME}) und 🤗 Transformers, um Audiodateien"
        " beliebiger Länge zu transkribieren."
    ),
    allow_flagging="never",
)

# Schritt 4: Erstelle eine TabbedInterface, um die verschiedenen Schnittstellen für Mikrofon, Hochladen von Audiodateien und YouTube-Transkription anzuzeigen
with demo:
    gr.TabbedInterface([mf_transcribe, file_transcribe, yt_transcribe], ["Microphone", "Audio file", "YouTube"])

# Schritt 5: Starte die Demo
demo.launch(enable_queue=True)