MCPcopy
hub / github.com/kadirnar/whisper-plus

github.com/kadirnar/whisper-plus @v0.3.0 sqlite

repository ↗ · DeepWiki ↗ · release v0.3.0 ↗
59 symbols 205 edges 17 files 11 documented · 19%
README

WhisperPlus: Advancing Speech2Text and Text2Speech Feature 🚀

<img width="500" alt="teaser" src="https://github.com/kadirnar/whisper-plus/raw/v0.3.0/doc\openai-whisper.jpg">






<a href="https://pypi.org/project/whisperplus" target="_blank">
    <img src="https://img.shields.io/pypi/pyversions/whisperplus.svg?color=%2334D058" alt="Supported Python versions">
</a>
<a href="https://badge.fury.io/py/whisperplus"><img src="https://badge.fury.io/py/whisperplus.svg" alt="pypi version"></a>
<a href="https://huggingface.co/spaces/ArtGAN/Audio-WebUI"><img src="https://huggingface.co/datasets/huggingface/badges/raw/main/open-in-hf-spaces-sm.svg" alt="HuggingFace Spaces"></a>

🛠️ Installation

pip install whisperplus git+https://github.com/huggingface/transformers
pip install flash-attn --no-build-isolation

🤗 Model Hub

You can find the models on the HuggingFace Model Hub

🎙️ Usage

To use the whisperplus library, follow the steps below for different tasks:

🎵 Youtube URL to Audio

from whisperplus import SpeechToTextPipeline, download_and_convert_to_mp3
from transformers import BitsAndBytesConfig, HqqConfig


url = "https://www.youtube.com/watch?v=di3rHkEZuUw"
audio_path = download_and_convert_to_mp3(url)

hqq_config = HqqConfig(
    nbits=1,
    group_size=64,
    quant_zero=False,
    quant_scale=False,
    axis=0,
    offload_meta=False,
)  # axis=0 is used by default

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True,
)

pipeline = SpeechToTextPipeline(
    model_id="distil-whisper/distil-large-v3", quant_config=hqq_config
)  # or bnb_config

transcript = pipeline(
    audio_path=audio_path,
    chunk_length_s=30,
    stride_length_s=5,
    max_new_tokens=128,
    batch_size=100,
    language="english",
    return_timestamps=False,
)

print(transcript)

📰 Summarization

from whisperplus import TextSummarizationPipeline

summarizer = TextSummarizationPipeline(model_id="facebook/bart-large-cnn")
summary = summarizer.summarize(transcript)
print(summary[0]["summary_text"])

📰 Long Text Support Summarization

from whisperplus import LongTextSummarizationPipeline

summarizer = LongTextSummarizationPipeline(model_id="facebook/bart-large-cnn")
summary_text = summarizer.summarize(transcript)
print(summary_text)

💬 Speaker Diarization

from whisperplus import (
    ASRDiarizationPipeline,
    download_and_convert_to_mp3,
    format_speech_to_dialogue,
)

audio_path = download_and_convert_to_mp3("https://www.youtube.com/watch?v=mRB14sFHw2E")

device = "cuda"  # cpu or mps
pipeline = ASRDiarizationPipeline.from_pretrained(
    asr_model="openai/whisper-large-v3",
    diarizer_model="pyannote/speaker-diarization",
    use_auth_token=False,
    chunk_length_s=30,
    device=device,
)

output_text = pipeline(audio_path, num_speakers=2, min_speaker=1, max_speaker=2)
dialogue = format_speech_to_dialogue(output_text)
print(dialogue)

⭐ RAG - Chat with Video(LanceDB)

from whisperplus.pipelines.chatbot import ChatWithVideo

chat = ChatWithVideo(
    input_file="trascript.txt",
    llm_model_name="TheBloke/Mistral-7B-v0.1-GGUF",
    llm_model_file="mistral-7b-v0.1.Q4_K_M.gguf",
    llm_model_type="mistral",
    embedding_model_name="sentence-transformers/all-MiniLM-L6-v2",
)

query = "what is this video about ?"
response = chat.run_query(query)
print(response)

🌠 RAG - Chat with Video(AutoLLM)

from whisperplus import AutoLLMChatWithVideo

# service_context_params
system_prompt = """
You are an friendly ai assistant that help users find the most relevant and accurate answers
to their questions based on the documents you have access to.
When answering the questions, mostly rely on the info in documents.
"""
query_wrapper_prompt = """
The document information is below.
---------------------
{context_str}
---------------------
Using the document information and mostly relying on it,
answer the query.
Query: {query_str}
Answer:
"""

chat = AutoLLMChatWithVideo(
    input_file="input_dir",  # path of mp3 file
    openai_key="YOUR_OPENAI_KEY",  # optional
    huggingface_key="YOUR_HUGGINGFACE_KEY",  # optional
    llm_model="gpt-3.5-turbo",
    llm_max_tokens="256",
    llm_temperature="0.1",
    system_prompt=system_prompt,
    query_wrapper_prompt=query_wrapper_prompt,
    embed_model="huggingface/BAAI/bge-large-zh",  # "text-embedding-ada-002"
)

query = "what is this video about ?"
response = chat.run_query(query)
print(response)

🎙️ Speech to Text

from whisperplus import TextToSpeechPipeline

tts = TextToSpeechPipeline(model_id="suno/bark")
audio = tts(text="Hello World", voice_preset="v2/en_speaker_6")

🎥 AutoCaption

from whisperplus import WhisperAutoCaptionPipeline

caption = WhisperAutoCaptionPipeline(model_id="openai/whisper-large-v3")
caption(video_path="test.mp4", output_path="output.mp4", language="turkish")

😍 Contributing

pip install -r dev-requirements.txt
pre-commit install
pre-commit run --all-files

📜 License

This project is licensed under the terms of the Apache License 2.0.

🤗 Citation

@misc{radford2022whisper,
  doi = {10.48550/ARXIV.2212.04356},
  url = {https://arxiv.org/abs/2212.04356},
  author = {Radford, Alec and Kim, Jong Wook and Xu, Tao and Brockman, Greg and McLeavey, Christine and Sutskever, Ilya},
  title = {Robust Speech Recognition via Large-Scale Weak Supervision},
  publisher = {arXiv},
  year = {2022},
  copyright = {arXiv.org perpetual, non-exclusive license}
}

Core symbols most depended-on inside this repo

from_pretrained
called by 8
whisperplus/pipelines/whisper_diarize.py
download_and_convert_to_mp3
called by 3
whisperplus/utils/download_utils.py
run_command
called by 2
scripts/package.py
get_requirements
called by 1
setup.py
get_long_description
called by 1
setup.py
get_version
called by 1
setup.py
get_author
called by 1
setup.py
get_license
called by 1
setup.py

Shape

Method 38
Function 13
Class 8

Languages

Python100%

Modules by API surface

whisperplus/pipelines/lancedb_chatbot.py8 symbols
whisperplus/pipelines/whisper_autocaption.py7 symbols
whisperplus/pipelines/long_text_summarization.py6 symbols
whisperplus/pipelines/autollm_chatbot.py6 symbols
whisperplus/pipelines/whisper_diarize.py5 symbols
whisperplus/pipelines/text2speech.py5 symbols
whisperplus/pipelines/summarization.py5 symbols
setup.py5 symbols
whisperplus/pipelines/whisper.py4 symbols
whisperplus/app.py4 symbols
scripts/package.py2 symbols
whisperplus/utils/text_utils.py1 symbols

Dependencies from manifests, versioned

Requests2.31.0 · 1×
autollm0.1.9 · 1×
gradio4.14.0 · 1×
langchain0.1.0 · 1×
moviepy1.0.3 · 1×
numpy1.24.1 · 1×
pre-commit3.4.0 · 1×
pyannote.audio3.1.0 · 1×
pyannote.core5.0.0 · 1×
pyannote.database5.0.1 · 1×
pyannote.metrics3.2.1 · 1×
pyannote.pipeline3.0.1 · 1×

For agents

$ claude mcp add whisper-plus \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact