on1onmangoes's picture
Update app.py
d1b9092 verified
import gradio as gr
import torch
import io
import base64
import numpy as np
import scipy.io.wavfile
from typing import Text
from pyannote.audio import Pipeline
from pyannote.audio import Audio
from pyannote.core import Segment
import gradio as gr
import os
import yt_dlp as youtube_dl
from gradio_client import Client
from transformers.pipelines.audio_utils import ffmpeg_read
HF_TOKEN = os.environ.get("HF_TOKEN")
# set up the diarization pipeline
diarization_pipeline = Pipeline.from_pretrained("pyannote/speaker-diarization-3.0", use_auth_token=HF_TOKEN)
if torch.cuda.is_available():
diarization_pipeline.to(torch.device("cuda"))
import gradio as gr
def transcribe(audio_path):
# Run diarization while we wait for Whisper JAX
diarization = diarization_pipeline(audio_path)
# Segments = diarization.for_json()["content"]
# Segments = str(diarization)
transcription = "SAML Output"
return diarization
title = "SAML Speaker Diarization ⚡️ "
description = """Combine the speed of Whisper JAX with pyannote speaker diarization to transcribe meetings in super fast time. Demo uses Whisper JAX as an [endpoint](https://twitter.com/sanchitgandhi99/status/1656665496463495168) and pyannote speaker diarization running locally. The Whisper JAX endpoint is run asynchronously, meaning speaker diarization is run in parallel to the speech transcription. The diarized timestamps are aligned with the Whisper output to give the final speaker-segmented transcription.
To duplicate the demo, first accept the pyannote terms of use for the [speaker diarization](https://huggingface.co/pyannote/speaker-diarization) and [segmentation](https://huggingface.co/pyannote/segmentation) models. Then, click [here](https://huggingface.co/spaces/sanchit-gandhi/whisper-jax-diarization?duplicate=true) to duplicate the demo, and enter your Hugging Face access token as a Space secret when prompted.
"""
article = """Whisper large-v2 model by OpenAI. Speaker diarization model by pyannote. Whisper JAX backend running JAX on a TPU v4-8 through the generous support of the [TRC](https://sites.research.google/trc/about/) programme. Whisper JAX [code](https://github.com/sanchit-gandhi/whisper-jax) and Gradio demo by 🤗 Hugging Face."""
import gradio as gr
def greet(name):
return "Hello " + name + "!!"
iface = gr.Interface(fn=transcribe, inputs=gr.inputs.Audio(source="upload", optional=True, label="Audio file", type="filepath"), outputs="text")
iface.launch(show_api=True)
# audio_file = gr.Interface(
# fn=transcribe,
# inputs=[
# gr.inputs.Audio(source="upload", optional=True, label="Audio file", type="filepath"),
# # gr.inputs.Radio(["transcribe", "translate"], label="Task", default="transcribe"),
# # gr.inputs.Checkbox(default=True, label="Group by speaker"),
# ],
# outputs=[
# gr.outputs.Textbox(label="Transcription").style(show_copy_button=True)
# ],
# allow_flagging="auto",
# title=title,
# description=description,
# article=article,
# )
# demo = gr.Blocks()
# with demo:
# gr.TabbedInterface([audio_file], ["Audio File"])
# demo.launch()
# def transcribe(audio_path, task="transcribe", group_by_speaker=True, progress=gr.Progress()):
# # run diarization while we wait for Whisper JAX
# progress(0, desc="Diarizing...")
# diarization = diarization_pipeline(audio_path)
# print(diarization)
# #segments = diarization.for_json()["content"]
# #segments = str(diarization)
# transcription = "SAML Output"
# return transcription
# title = "SAML Speaker Diarization ⚡️"
# description = """Combine the speed of Whisper JAX with pyannote speaker diarization to transcribe meetings in super fast time. Demo uses Whisper JAX as an [endpoint](https://twitter.com/sanchitgandhi99/status/1656665496463495168) and pyannote speaker diarization running locally. The Whisper JAX endpoint is run asynchronously, meaning speaker diarization is run in parallel to the speech transcription. The diarized timestamps are aligned with the Whisper output to give the final speaker-segmented transcription.
# To duplicate the demo, first accept the pyannote terms of use for the [speaker diarization](https://huggingface.co/pyannote/speaker-diarization) and [segmentation](https://huggingface.co/pyannote/segmentation) models. Then, click [here](https://huggingface.co/spaces/sanchit-gandhi/whisper-jax-diarization?duplicate=true) to duplicate the demo, and enter your Hugging Face access token as a Space secret when prompted.
# """
# article = "Whisper large-v2 model by OpenAI. Speaker diarization model by pyannote. Whisper JAX backend running JAX on a TPU v4-8 through the generous support of the [TRC](https://sites.research.google/trc/about/) programme. Whisper JAX [code](https://github.com/sanchit-gandhi/whisper-jax) and Gradio demo by 🤗 Hugging Face."
# audio_file = gr.Interface(
# fn=transcribe,
# inputs=[
# gr.inputs.Audio(source="upload", optional=True, label="Audio file", type="filepath"),
# gr.inputs.Radio(["transcribe", "translate"], label="Task", default="transcribe"),
# gr.inputs.Checkbox(default=True, label="Group by speaker"),
# ],
# outputs=[
# gr.outputs.Textbox(label="Transcription").style(show_copy_button=True)
# ],
# allow_flagging="never",
# title=title,
# description=description,
# article=article,
# )
# demo = gr.Blocks()
# with demo:
# gr.TabbedInterface([ audio_file], [ "Audio File"])
# demo.queue(max_size=10)
# demo.launch(show_api=True)
# # def greet(name):
# # return "Hello " + name + "!!"
# # iface = gr.Interface(fn=greet, inputs="text", outputs="text")
# # iface.launch()