TogetherAI's picture
Update app.py
ef45b2f
raw
history blame
3.87 kB
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)