Spaces:
Runtime error
Runtime error
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) | |