From ddb8860528577be75bfd47d520e0c50f858bbf35 Mon Sep 17 00:00:00 2001 From: Quentin Fuxa Date: Fri, 28 Feb 2025 18:49:45 +0100 Subject: [PATCH] move files --- src/diarization/diarization_online.py | 90 ---- src/web/demo.png | Bin 206910 -> 0 bytes src/web/live_transcription.html | 425 ------------------ src/whisper_streaming/backends.py | 292 ------------ src/whisper_streaming/online_asr.py | 444 ------------------- src/whisper_streaming/silero_vad_iterator.py | 163 ------- src/whisper_streaming/timed_objects.py | 27 -- src/whisper_streaming/whisper_online.py | 235 ---------- 8 files changed, 1676 deletions(-) delete mode 100644 src/diarization/diarization_online.py delete mode 100644 src/web/demo.png delete mode 100644 src/web/live_transcription.html delete mode 100644 src/whisper_streaming/backends.py delete mode 100644 src/whisper_streaming/online_asr.py delete mode 100644 src/whisper_streaming/silero_vad_iterator.py delete mode 100644 src/whisper_streaming/timed_objects.py delete mode 100644 src/whisper_streaming/whisper_online.py diff --git a/src/diarization/diarization_online.py b/src/diarization/diarization_online.py deleted file mode 100644 index 8d2c136..0000000 --- a/src/diarization/diarization_online.py +++ /dev/null @@ -1,90 +0,0 @@ -import asyncio -import re -import threading -import numpy as np - -from diart import SpeakerDiarization -from diart.inference import StreamingInference -from diart.sources import AudioSource -from src.whisper_streaming.timed_objects import SpeakerSegment - -def extract_number(s: str) -> int: - m = re.search(r'\d+', s) - return int(m.group()) if m else None - - -class WebSocketAudioSource(AudioSource): - """ - Custom AudioSource that blocks in read() until close() is called. - Use push_audio() to inject PCM chunks. - """ - def __init__(self, uri: str = "websocket", sample_rate: int = 16000): - super().__init__(uri, sample_rate) - self._closed = False - self._close_event = threading.Event() - - def read(self): - self._close_event.wait() - - def close(self): - if not self._closed: - self._closed = True - self.stream.on_completed() - self._close_event.set() - - def push_audio(self, chunk: np.ndarray): - if not self._closed: - self.stream.on_next(np.expand_dims(chunk, axis=0)) - - -class DiartDiarization: - def __init__(self, sample_rate: int): - self.processed_time = 0 - self.segment_speakers = [] - self.speakers_queue = asyncio.Queue() - self.pipeline = SpeakerDiarization() - self.source = WebSocketAudioSource(uri="websocket_source", sample_rate=sample_rate) - self.inference = StreamingInference( - pipeline=self.pipeline, - source=self.source, - do_plot=False, - show_progress=False, - ) - # Attache la fonction hook et démarre l'inférence en arrière-plan. - self.inference.attach_hooks(self._diar_hook) - asyncio.get_event_loop().run_in_executor(None, self.inference) - - def _diar_hook(self, result): - annotation, audio = result - if annotation._labels: - for speaker, label in annotation._labels.items(): - start = label.segments_boundaries_[0] - end = label.segments_boundaries_[-1] - if end > self.processed_time: - self.processed_time = end - asyncio.create_task(self.speakers_queue.put(SpeakerSegment( - speaker=speaker, - start=start, - end=end, - ))) - else: - dur = audio.extent.end - if dur > self.processed_time: - self.processed_time = dur - - async def diarize(self, pcm_array: np.ndarray): - self.source.push_audio(pcm_array) - self.segment_speakers.clear() - while not self.speakers_queue.empty(): - self.segment_speakers.append(await self.speakers_queue.get()) - - def close(self): - self.source.close() - - def assign_speakers_to_tokens(self, end_attributed_speaker, tokens: list) -> list: - for token in tokens: - for segment in self.segment_speakers: - if not (segment.end <= token.start or segment.start >= token.end): - token.speaker = extract_number(segment.speaker) + 1 - end_attributed_speaker = max(token.end, end_attributed_speaker) - return end_attributed_speaker diff --git a/src/web/demo.png b/src/web/demo.png deleted file mode 100644 index aa20afced4a4d45fd2c347278cb8c5dd94b63c6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206910 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≶0*lS>U#kgf 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�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 KG8IxLpZ^P=yk~U) diff --git a/src/web/live_transcription.html b/src/web/live_transcription.html deleted file mode 100644 index 09d7408..0000000 --- a/src/web/live_transcription.html +++ /dev/null @@ -1,425 +0,0 @@ - - - - - - - Audio Transcription - - - - - -

- -

- - -
- - - - - \ No newline at end of file diff --git a/src/whisper_streaming/backends.py b/src/whisper_streaming/backends.py deleted file mode 100644 index 96fdbed..0000000 --- a/src/whisper_streaming/backends.py +++ /dev/null @@ -1,292 +0,0 @@ -import sys -import logging -import io -import soundfile as sf -import math -import torch -from typing import List -import numpy as np -from src.whisper_streaming.timed_objects import ASRToken - -logger = logging.getLogger(__name__) - -class ASRBase: - sep = " " # join transcribe words with this character (" " for whisper_timestamped, - # "" for faster-whisper because it emits the spaces when needed) - - def __init__(self, lan, modelsize=None, cache_dir=None, model_dir=None, logfile=sys.stderr): - self.logfile = logfile - self.transcribe_kargs = {} - if lan == "auto": - self.original_language = None - else: - self.original_language = lan - self.model = self.load_model(modelsize, cache_dir, model_dir) - - def with_offset(self, offset: float) -> ASRToken: - # This method is kept for compatibility (typically you will use ASRToken.with_offset) - return ASRToken(self.start + offset, self.end + offset, self.text) - - def __repr__(self): - return f"ASRToken(start={self.start:.2f}, end={self.end:.2f}, text={self.text!r})" - - def load_model(self, modelsize, cache_dir, model_dir): - raise NotImplementedError("must be implemented in the child class") - - def transcribe(self, audio, init_prompt=""): - raise NotImplementedError("must be implemented in the child class") - - def use_vad(self): - raise NotImplementedError("must be implemented in the child class") - - -class WhisperTimestampedASR(ASRBase): - """Uses whisper_timestamped as the backend.""" - sep = " " - - def load_model(self, modelsize=None, cache_dir=None, model_dir=None): - import whisper - import whisper_timestamped - from whisper_timestamped import transcribe_timestamped - - self.transcribe_timestamped = transcribe_timestamped - if model_dir is not None: - logger.debug("ignoring model_dir, not implemented") - return whisper.load_model(modelsize, download_root=cache_dir) - - def transcribe(self, audio, init_prompt=""): - result = self.transcribe_timestamped( - self.model, - audio, - language=self.original_language, - initial_prompt=init_prompt, - verbose=None, - condition_on_previous_text=True, - **self.transcribe_kargs, - ) - return result - - def ts_words(self, r) -> List[ASRToken]: - """ - Converts the whisper_timestamped result to a list of ASRToken objects. - """ - tokens = [] - for segment in r["segments"]: - for word in segment["words"]: - token = ASRToken(word["start"], word["end"], word["text"]) - tokens.append(token) - return tokens - - def segments_end_ts(self, res) -> List[float]: - return [segment["end"] for segment in res["segments"]] - - def use_vad(self): - self.transcribe_kargs["vad"] = True - - def set_translate_task(self): - self.transcribe_kargs["task"] = "translate" - - -class FasterWhisperASR(ASRBase): - """Uses faster-whisper as the backend.""" - sep = "" - - def load_model(self, modelsize=None, cache_dir=None, model_dir=None): - from faster_whisper import WhisperModel - - if model_dir is not None: - logger.debug(f"Loading whisper model from model_dir {model_dir}. " - f"modelsize and cache_dir parameters are not used.") - model_size_or_path = model_dir - elif modelsize is not None: - model_size_or_path = modelsize - else: - raise ValueError("Either modelsize or model_dir must be set") - device = "cuda" if torch.cuda.is_available() else "cpu" - compute_type = "float16" if device == "cuda" else "float32" - - model = WhisperModel( - model_size_or_path, - device=device, - compute_type=compute_type, - download_root=cache_dir, - ) - return model - - def transcribe(self, audio: np.ndarray, init_prompt: str = "") -> list: - segments, info = self.model.transcribe( - audio, - language=self.original_language, - initial_prompt=init_prompt, - beam_size=5, - word_timestamps=True, - condition_on_previous_text=True, - **self.transcribe_kargs, - ) - return list(segments) - - def ts_words(self, segments) -> List[ASRToken]: - tokens = [] - for segment in segments: - if segment.no_speech_prob > 0.9: - continue - for word in segment.words: - token = ASRToken(word.start, word.end, word.word) - tokens.append(token) - return tokens - - def segments_end_ts(self, segments) -> List[float]: - return [segment.end for segment in segments] - - def use_vad(self): - self.transcribe_kargs["vad_filter"] = True - - def set_translate_task(self): - self.transcribe_kargs["task"] = "translate" - - -class MLXWhisper(ASRBase): - """ - Uses MLX Whisper optimized for Apple Silicon. - """ - sep = "" - - def load_model(self, modelsize=None, cache_dir=None, model_dir=None): - from mlx_whisper.transcribe import ModelHolder, transcribe - import mlx.core as mx - - if model_dir is not None: - logger.debug(f"Loading whisper model from model_dir {model_dir}. modelsize parameter is not used.") - model_size_or_path = model_dir - elif modelsize is not None: - model_size_or_path = self.translate_model_name(modelsize) - logger.debug(f"Loading whisper model {modelsize}. You use mlx whisper, so {model_size_or_path} will be used.") - else: - raise ValueError("Either modelsize or model_dir must be set") - - self.model_size_or_path = model_size_or_path - dtype = mx.float16 - ModelHolder.get_model(model_size_or_path, dtype) - return transcribe - - def translate_model_name(self, model_name): - model_mapping = { - "tiny.en": "mlx-community/whisper-tiny.en-mlx", - "tiny": "mlx-community/whisper-tiny-mlx", - "base.en": "mlx-community/whisper-base.en-mlx", - "base": "mlx-community/whisper-base-mlx", - "small.en": "mlx-community/whisper-small.en-mlx", - "small": "mlx-community/whisper-small-mlx", - "medium.en": "mlx-community/whisper-medium.en-mlx", - "medium": "mlx-community/whisper-medium-mlx", - "large-v1": "mlx-community/whisper-large-v1-mlx", - "large-v2": "mlx-community/whisper-large-v2-mlx", - "large-v3": "mlx-community/whisper-large-v3-mlx", - "large-v3-turbo": "mlx-community/whisper-large-v3-turbo", - "large": "mlx-community/whisper-large-mlx", - } - mlx_model_path = model_mapping.get(model_name) - if mlx_model_path: - return mlx_model_path - else: - raise ValueError(f"Model name '{model_name}' is not recognized or not supported.") - - def transcribe(self, audio, init_prompt=""): - if self.transcribe_kargs: - logger.warning("Transcribe kwargs (vad, task) are not compatible with MLX Whisper and will be ignored.") - segments = self.model( - audio, - language=self.original_language, - initial_prompt=init_prompt, - word_timestamps=True, - condition_on_previous_text=True, - path_or_hf_repo=self.model_size_or_path, - ) - return segments.get("segments", []) - - def ts_words(self, segments) -> List[ASRToken]: - tokens = [] - for segment in segments: - if segment.get("no_speech_prob", 0) > 0.9: - continue - for word in segment.get("words", []): - token = ASRToken(word["start"], word["end"], word["word"]) - tokens.append(token) - return tokens - - def segments_end_ts(self, res) -> List[float]: - return [s["end"] for s in res] - - def use_vad(self): - self.transcribe_kargs["vad_filter"] = True - - def set_translate_task(self): - self.transcribe_kargs["task"] = "translate" - - -class OpenaiApiASR(ASRBase): - """Uses OpenAI's Whisper API for transcription.""" - def __init__(self, lan=None, temperature=0, logfile=sys.stderr): - self.logfile = logfile - self.modelname = "whisper-1" - self.original_language = None if lan == "auto" else lan - self.response_format = "verbose_json" - self.temperature = temperature - self.load_model() - self.use_vad_opt = False - self.task = "transcribe" - - def load_model(self, *args, **kwargs): - from openai import OpenAI - self.client = OpenAI() - self.transcribed_seconds = 0 - - def ts_words(self, segments) -> List[ASRToken]: - """ - Converts OpenAI API response words into ASRToken objects while - optionally skipping words that fall into no-speech segments. - """ - no_speech_segments = [] - if self.use_vad_opt: - for segment in segments.segments: - if segment["no_speech_prob"] > 0.8: - no_speech_segments.append((segment.get("start"), segment.get("end"))) - tokens = [] - for word in segments.words: - start = word.start - end = word.end - if any(s[0] <= start <= s[1] for s in no_speech_segments): - continue - tokens.append(ASRToken(start, end, word.word)) - return tokens - - def segments_end_ts(self, res) -> List[float]: - return [s.end for s in res.words] - - def transcribe(self, audio_data, prompt=None, *args, **kwargs): - buffer = io.BytesIO() - buffer.name = "temp.wav" - sf.write(buffer, audio_data, samplerate=16000, format="WAV", subtype="PCM_16") - buffer.seek(0) - self.transcribed_seconds += math.ceil(len(audio_data) / 16000) - params = { - "model": self.modelname, - "file": buffer, - "response_format": self.response_format, - "temperature": self.temperature, - "timestamp_granularities": ["word", "segment"], - } - if self.task != "translate" and self.original_language: - params["language"] = self.original_language - if prompt: - params["prompt"] = prompt - proc = self.client.audio.translations if self.task == "translate" else self.client.audio.transcriptions - transcript = proc.create(**params) - logger.debug(f"OpenAI API processed accumulated {self.transcribed_seconds} seconds") - return transcript - - def use_vad(self): - self.use_vad_opt = True - - def set_translate_task(self): - self.task = "translate" \ No newline at end of file diff --git a/src/whisper_streaming/online_asr.py b/src/whisper_streaming/online_asr.py deleted file mode 100644 index 191cd39..0000000 --- a/src/whisper_streaming/online_asr.py +++ /dev/null @@ -1,444 +0,0 @@ -import sys -import numpy as np -import logging -from typing import List, Tuple, Optional -from src.whisper_streaming.timed_objects import ASRToken, Sentence, Transcript - -logger = logging.getLogger(__name__) - - -class HypothesisBuffer: - """ - Buffer to store and process ASR hypothesis tokens. - - It holds: - - committed_in_buffer: tokens that have been confirmed (committed) - - buffer: the last hypothesis that is not yet committed - - new: new tokens coming from the recognizer - """ - def __init__(self, logfile=sys.stderr): - self.committed_in_buffer: List[ASRToken] = [] - self.buffer: List[ASRToken] = [] - self.new: List[ASRToken] = [] - self.last_committed_time = 0.0 - self.last_committed_word: Optional[str] = None - self.logfile = logfile - - def insert(self, new_tokens: List[ASRToken], offset: float): - """ - Insert new tokens (after applying a time offset) and compare them with the - already committed tokens. Only tokens that extend the committed hypothesis - are added. - """ - # Apply the offset to each token. - new_tokens = [token.with_offset(offset) for token in new_tokens] - # Only keep tokens that are roughly “new” - self.new = [token for token in new_tokens if token.start > self.last_committed_time - 0.1] - - if self.new: - first_token = self.new[0] - if abs(first_token.start - self.last_committed_time) < 1: - if self.committed_in_buffer: - committed_len = len(self.committed_in_buffer) - new_len = len(self.new) - # Try to match 1 to 5 consecutive tokens - max_ngram = min(min(committed_len, new_len), 5) - for i in range(1, max_ngram + 1): - committed_ngram = " ".join(token.text for token in self.committed_in_buffer[-i:]) - new_ngram = " ".join(token.text for token in self.new[:i]) - if committed_ngram == new_ngram: - removed = [] - for _ in range(i): - removed_token = self.new.pop(0) - removed.append(repr(removed_token)) - logger.debug(f"Removing last {i} words: {' '.join(removed)}") - break - - def flush(self) -> List[ASRToken]: - """ - Returns the committed chunk, defined as the longest common prefix - between the previous hypothesis and the new tokens. - """ - committed: List[ASRToken] = [] - while self.new: - current_new = self.new[0] - if not self.buffer: - break - if current_new.text == self.buffer[0].text: - committed.append(current_new) - self.last_committed_word = current_new.text - self.last_committed_time = current_new.end - self.buffer.pop(0) - self.new.pop(0) - else: - break - self.buffer = self.new - self.new = [] - self.committed_in_buffer.extend(committed) - return committed - - def pop_committed(self, time: float): - """ - Remove tokens (from the beginning) that have ended before `time`. - """ - while self.committed_in_buffer and self.committed_in_buffer[0].end <= time: - self.committed_in_buffer.pop(0) - - - -class OnlineASRProcessor: - """ - Processes incoming audio in a streaming fashion, calling the ASR system - periodically, and uses a hypothesis buffer to commit and trim recognized text. - - The processor supports two types of buffer trimming: - - "sentence": trims at sentence boundaries (using a sentence tokenizer) - - "segment": trims at fixed segment durations. - """ - SAMPLING_RATE = 16000 - - def __init__( - self, - asr, - tokenize_method: Optional[callable] = None, - buffer_trimming: Tuple[str, float] = ("segment", 15), - logfile=sys.stderr, - ): - """ - asr: An ASR system object (for example, a WhisperASR instance) that - provides a `transcribe` method, a `ts_words` method (to extract tokens), - a `segments_end_ts` method, and a separator attribute `sep`. - tokenize_method: A function that receives text and returns a list of sentence strings. - buffer_trimming: A tuple (option, seconds), where option is either "sentence" or "segment". - """ - self.asr = asr - self.tokenize = tokenize_method - self.logfile = logfile - - self.init() - - self.buffer_trimming_way, self.buffer_trimming_sec = buffer_trimming - - if self.buffer_trimming_way not in ["sentence", "segment"]: - raise ValueError("buffer_trimming must be either 'sentence' or 'segment'") - if self.buffer_trimming_sec <= 0: - raise ValueError("buffer_trimming_sec must be positive") - elif self.buffer_trimming_sec > 30: - logger.warning( - f"buffer_trimming_sec is set to {self.buffer_trimming_sec}, which is very long. It may cause OOM." - ) - - def init(self, offset: Optional[float] = None): - """Initialize or reset the processing buffers.""" - self.audio_buffer = np.array([], dtype=np.float32) - self.transcript_buffer = HypothesisBuffer(logfile=self.logfile) - self.buffer_time_offset = offset if offset is not None else 0.0 - self.transcript_buffer.last_committed_time = self.buffer_time_offset - self.committed: List[ASRToken] = [] - - def insert_audio_chunk(self, audio: np.ndarray): - """Append an audio chunk (a numpy array) to the current audio buffer.""" - self.audio_buffer = np.append(self.audio_buffer, audio) - - def prompt(self) -> Tuple[str, str]: - """ - Returns a tuple: (prompt, context), where: - - prompt is a 200-character suffix of committed text that falls - outside the current audio buffer. - - context is the committed text within the current audio buffer. - """ - k = len(self.committed) - while k > 0 and self.committed[k - 1].end > self.buffer_time_offset: - k -= 1 - - prompt_tokens = self.committed[:k] - prompt_words = [token.text for token in prompt_tokens] - prompt_list = [] - length_count = 0 - # Use the last words until reaching 200 characters. - while prompt_words and length_count < 200: - word = prompt_words.pop(-1) - length_count += len(word) + 1 - prompt_list.append(word) - non_prompt_tokens = self.committed[k:] - context_text = self.asr.sep.join(token.text for token in non_prompt_tokens) - return self.asr.sep.join(prompt_list[::-1]), context_text - - def get_buffer(self): - """ - Get the unvalidated buffer in string format. - """ - return self.concatenate_tokens(self.transcript_buffer.buffer) - - - def process_iter(self) -> Transcript: - """ - Processes the current audio buffer. - - Returns a Transcript object representing the committed transcript. - """ - prompt_text, _ = self.prompt() - logger.debug( - f"Transcribing {len(self.audio_buffer)/self.SAMPLING_RATE:.2f} seconds from {self.buffer_time_offset:.2f}" - ) - res = self.asr.transcribe(self.audio_buffer, init_prompt=prompt_text) - tokens = self.asr.ts_words(res) # Expecting List[ASRToken] - self.transcript_buffer.insert(tokens, self.buffer_time_offset) - committed_tokens = self.transcript_buffer.flush() - self.committed.extend(committed_tokens) - completed = self.concatenate_tokens(committed_tokens) - logger.debug(f">>>> COMPLETE NOW: {completed.text}") - incomp = self.concatenate_tokens(self.transcript_buffer.buffer) - logger.debug(f"INCOMPLETE: {incomp.text}") - - if committed_tokens and self.buffer_trimming_way == "sentence": - if len(self.audio_buffer) / self.SAMPLING_RATE > self.buffer_trimming_sec: - self.chunk_completed_sentence() - - s = self.buffer_trimming_sec if self.buffer_trimming_way == "segment" else 30 - if len(self.audio_buffer) / self.SAMPLING_RATE > s: - self.chunk_completed_segment(res) - logger.debug("Chunking segment") - logger.debug( - f"Length of audio buffer now: {len(self.audio_buffer)/self.SAMPLING_RATE:.2f} seconds" - ) - return committed_tokens - - def chunk_completed_sentence(self): - """ - If the committed tokens form at least two sentences, chunk the audio - buffer at the end time of the penultimate sentence. - """ - if not self.committed: - return - logger.debug("COMPLETED SENTENCE: " + " ".join(token.text for token in self.committed)) - sentences = self.words_to_sentences(self.committed) - for sentence in sentences: - logger.debug(f"\tSentence: {sentence.text}") - if len(sentences) < 2: - return - # Keep the last two sentences. - while len(sentences) > 2: - sentences.pop(0) - chunk_time = sentences[-2].end - logger.debug(f"--- Sentence chunked at {chunk_time:.2f}") - self.chunk_at(chunk_time) - - def chunk_completed_segment(self, res): - """ - Chunk the audio buffer based on segment-end timestamps reported by the ASR. - """ - if not self.committed: - return - ends = self.asr.segments_end_ts(res) - last_committed_time = self.committed[-1].end - if len(ends) > 1: - e = ends[-2] + self.buffer_time_offset - while len(ends) > 2 and e > last_committed_time: - ends.pop(-1) - e = ends[-2] + self.buffer_time_offset - if e <= last_committed_time: - logger.debug(f"--- Segment chunked at {e:.2f}") - self.chunk_at(e) - else: - logger.debug("--- Last segment not within committed area") - else: - logger.debug("--- Not enough segments to chunk") - - def chunk_at(self, time: float): - """ - Trim both the hypothesis and audio buffer at the given time. - """ - logger.debug(f"Chunking at {time:.2f}s") - logger.debug( - f"Audio buffer length before chunking: {len(self.audio_buffer)/self.SAMPLING_RATE:.2f}s" - ) - self.transcript_buffer.pop_committed(time) - cut_seconds = time - self.buffer_time_offset - self.audio_buffer = self.audio_buffer[int(cut_seconds * self.SAMPLING_RATE):] - self.buffer_time_offset = time - logger.debug( - f"Audio buffer length after chunking: {len(self.audio_buffer)/self.SAMPLING_RATE:.2f}s" - ) - - def words_to_sentences(self, tokens: List[ASRToken]) -> List[Sentence]: - """ - Converts a list of tokens to a list of Sentence objects using the provided - sentence tokenizer. - """ - if not tokens: - return [] - - full_text = " ".join(token.text for token in tokens) - - if self.tokenize: - try: - sentence_texts = self.tokenize(full_text) - except Exception as e: - # Some tokenizers (e.g., MosesSentenceSplitter) expect a list input. - try: - sentence_texts = self.tokenize([full_text]) - except Exception as e2: - raise ValueError("Tokenization failed") from e2 - else: - sentence_texts = [full_text] - - sentences: List[Sentence] = [] - token_index = 0 - for sent_text in sentence_texts: - sent_text = sent_text.strip() - if not sent_text: - continue - sent_tokens = [] - accumulated = "" - # Accumulate tokens until roughly matching the length of the sentence text. - while token_index < len(tokens) and len(accumulated) < len(sent_text): - token = tokens[token_index] - accumulated = (accumulated + " " + token.text).strip() if accumulated else token.text - sent_tokens.append(token) - token_index += 1 - if sent_tokens: - sentence = Sentence( - start=sent_tokens[0].start, - end=sent_tokens[-1].end, - text=" ".join(t.text for t in sent_tokens), - ) - sentences.append(sentence) - return sentences - def finish(self) -> Transcript: - """ - Flush the remaining transcript when processing ends. - """ - remaining_tokens = self.transcript_buffer.buffer - final_transcript = self.concatenate_tokens(remaining_tokens) - logger.debug(f"Final non-committed transcript: {final_transcript}") - self.buffer_time_offset += len(self.audio_buffer) / self.SAMPLING_RATE - return final_transcript - - def concatenate_tokens( - self, - tokens: List[ASRToken], - sep: Optional[str] = None, - offset: float = 0 - ) -> Transcript: - sep = sep if sep is not None else self.asr.sep - text = sep.join(token.text for token in tokens) - if tokens: - start = offset + tokens[0].start - end = offset + tokens[-1].end - else: - start = None - end = None - return Transcript(start, end, text) - - -class VACOnlineASRProcessor: - """ - Wraps an OnlineASRProcessor with a Voice Activity Controller (VAC). - - It receives small chunks of audio, applies VAD (e.g. with Silero), - and when the system detects a pause in speech (or end of an utterance) - it finalizes the utterance immediately. - """ - SAMPLING_RATE = 16000 - - def __init__(self, online_chunk_size: float, *args, **kwargs): - self.online_chunk_size = online_chunk_size - self.online = OnlineASRProcessor(*args, **kwargs) - - # Load a VAD model (e.g. Silero VAD) - import torch - model, _ = torch.hub.load(repo_or_dir="snakers4/silero-vad", model="silero_vad") - from src.whisper_streaming.silero_vad_iterator import FixedVADIterator - - self.vac = FixedVADIterator(model) - self.logfile = self.online.logfile - self.init() - - def init(self): - self.online.init() - self.vac.reset_states() - self.current_online_chunk_buffer_size = 0 - self.is_currently_final = False - self.status: Optional[str] = None # "voice" or "nonvoice" - self.audio_buffer = np.array([], dtype=np.float32) - self.buffer_offset = 0 # in frames - - def clear_buffer(self): - self.buffer_offset += len(self.audio_buffer) - self.audio_buffer = np.array([], dtype=np.float32) - - def insert_audio_chunk(self, audio: np.ndarray): - """ - Process an incoming small audio chunk: - - run VAD on the chunk, - - decide whether to send the audio to the online ASR processor immediately, - - and/or to mark the current utterance as finished. - """ - res = self.vac(audio) - self.audio_buffer = np.append(self.audio_buffer, audio) - - if res is not None: - # VAD returned a result; adjust the frame number - frame = list(res.values())[0] - self.buffer_offset - if "start" in res and "end" not in res: - self.status = "voice" - send_audio = self.audio_buffer[frame:] - self.online.init(offset=(frame + self.buffer_offset) / self.SAMPLING_RATE) - self.online.insert_audio_chunk(send_audio) - self.current_online_chunk_buffer_size += len(send_audio) - self.clear_buffer() - elif "end" in res and "start" not in res: - self.status = "nonvoice" - send_audio = self.audio_buffer[:frame] - self.online.insert_audio_chunk(send_audio) - self.current_online_chunk_buffer_size += len(send_audio) - self.is_currently_final = True - self.clear_buffer() - else: - beg = res["start"] - self.buffer_offset - end = res["end"] - self.buffer_offset - self.status = "nonvoice" - send_audio = self.audio_buffer[beg:end] - self.online.init(offset=(beg + self.buffer_offset) / self.SAMPLING_RATE) - self.online.insert_audio_chunk(send_audio) - self.current_online_chunk_buffer_size += len(send_audio) - self.is_currently_final = True - self.clear_buffer() - else: - if self.status == "voice": - self.online.insert_audio_chunk(self.audio_buffer) - self.current_online_chunk_buffer_size += len(self.audio_buffer) - self.clear_buffer() - else: - # Keep 1 second worth of audio in case VAD later detects voice, - # but trim to avoid unbounded memory usage. - self.buffer_offset += max(0, len(self.audio_buffer) - self.SAMPLING_RATE) - self.audio_buffer = self.audio_buffer[-self.SAMPLING_RATE:] - - def process_iter(self) -> Transcript: - """ - Depending on the VAD status and the amount of accumulated audio, - process the current audio chunk. - """ - if self.is_currently_final: - return self.finish() - elif self.current_online_chunk_buffer_size > self.SAMPLING_RATE * self.online_chunk_size: - self.current_online_chunk_buffer_size = 0 - return self.online.process_iter() - else: - logger.debug("No online update, only VAD") - return Transcript(None, None, "") - - def finish(self) -> Transcript: - """Finish processing by flushing any remaining text.""" - result = self.online.finish() - self.current_online_chunk_buffer_size = 0 - self.is_currently_final = False - return result - - def get_buffer(self): - """ - Get the unvalidated buffer in string format. - """ - return self.online.concatenate_tokens(self.online.transcript_buffer.buffer).text diff --git a/src/whisper_streaming/silero_vad_iterator.py b/src/whisper_streaming/silero_vad_iterator.py deleted file mode 100644 index 6f633da..0000000 --- a/src/whisper_streaming/silero_vad_iterator.py +++ /dev/null @@ -1,163 +0,0 @@ -import torch - -# This is copied from silero-vad's vad_utils.py: -# https://github.com/snakers4/silero-vad/blob/f6b1294cb27590fb2452899df98fb234dfef1134/utils_vad.py#L340 -# (except changed defaults) - -# Their licence is MIT, same as ours: https://github.com/snakers4/silero-vad/blob/f6b1294cb27590fb2452899df98fb234dfef1134/LICENSE - - -class VADIterator: - def __init__( - self, - model, - threshold: float = 0.5, - sampling_rate: int = 16000, - min_silence_duration_ms: int = 500, # makes sense on one recording that I checked - speech_pad_ms: int = 100, # same - ): - """ - Class for stream imitation - - Parameters - ---------- - model: preloaded .jit silero VAD model - - threshold: float (default - 0.5) - Speech threshold. Silero VAD outputs speech probabilities for each audio chunk, probabilities ABOVE this value are considered as SPEECH. - It is better to tune this parameter for each dataset separately, but "lazy" 0.5 is pretty good for most datasets. - - sampling_rate: int (default - 16000) - Currently silero VAD models support 8000 and 16000 sample rates - - min_silence_duration_ms: int (default - 100 milliseconds) - In the end of each speech chunk wait for min_silence_duration_ms before separating it - - speech_pad_ms: int (default - 30 milliseconds) - Final speech chunks are padded by speech_pad_ms each side - """ - - self.model = model - self.threshold = threshold - self.sampling_rate = sampling_rate - - if sampling_rate not in [8000, 16000]: - raise ValueError( - "VADIterator does not support sampling rates other than [8000, 16000]" - ) - - self.min_silence_samples = sampling_rate * min_silence_duration_ms / 1000 - self.speech_pad_samples = sampling_rate * speech_pad_ms / 1000 - self.reset_states() - - def reset_states(self): - - self.model.reset_states() - self.triggered = False - self.temp_end = 0 - self.current_sample = 0 - - def __call__(self, x, return_seconds=False): - """ - x: torch.Tensor - audio chunk (see examples in repo) - - return_seconds: bool (default - False) - whether return timestamps in seconds (default - samples) - """ - - if not torch.is_tensor(x): - try: - x = torch.Tensor(x) - except: - raise TypeError("Audio cannot be casted to tensor. Cast it manually") - - window_size_samples = len(x[0]) if x.dim() == 2 else len(x) - self.current_sample += window_size_samples - - speech_prob = self.model(x, self.sampling_rate).item() - - if (speech_prob >= self.threshold) and self.temp_end: - self.temp_end = 0 - - if (speech_prob >= self.threshold) and not self.triggered: - self.triggered = True - speech_start = self.current_sample - self.speech_pad_samples - return { - "start": ( - int(speech_start) - if not return_seconds - else round(speech_start / self.sampling_rate, 1) - ) - } - - if (speech_prob < self.threshold - 0.15) and self.triggered: - if not self.temp_end: - self.temp_end = self.current_sample - if self.current_sample - self.temp_end < self.min_silence_samples: - return None - else: - speech_end = self.temp_end + self.speech_pad_samples - self.temp_end = 0 - self.triggered = False - return { - "end": ( - int(speech_end) - if not return_seconds - else round(speech_end / self.sampling_rate, 1) - ) - } - - return None - - -####################### -# because Silero now requires exactly 512-sized audio chunks - -import numpy as np - - -class FixedVADIterator(VADIterator): - """It fixes VADIterator by allowing to process any audio length, not only exactly 512 frames at once. - If audio to be processed at once is long and multiple voiced segments detected, - then __call__ returns the start of the first segment, and end (or middle, which means no end) of the last segment. - """ - - def reset_states(self): - super().reset_states() - self.buffer = np.array([], dtype=np.float32) - - def __call__(self, x, return_seconds=False): - self.buffer = np.append(self.buffer, x) - ret = None - while len(self.buffer) >= 512: - r = super().__call__(self.buffer[:512], return_seconds=return_seconds) - self.buffer = self.buffer[512:] - if ret is None: - ret = r - elif r is not None: - if "end" in r: - ret["end"] = r["end"] # the latter end - if "start" in r and "end" in ret: # there is an earlier start. - # Remove end, merging this segment with the previous one. - del ret["end"] - return ret if ret != {} else None - - -if __name__ == "__main__": - # test/demonstrate the need for FixedVADIterator: - - import torch - - model, _ = torch.hub.load(repo_or_dir="snakers4/silero-vad", model="silero_vad") - vac = FixedVADIterator(model) - # vac = VADIterator(model) # the second case crashes with this - - # this works: for both - audio_buffer = np.array([0] * (512), dtype=np.float32) - vac(audio_buffer) - - # this crashes on the non FixedVADIterator with - # ops.prim.RaiseException("Input audio chunk is too short", "builtins.ValueError") - audio_buffer = np.array([0] * (512 - 1), dtype=np.float32) - vac(audio_buffer) diff --git a/src/whisper_streaming/timed_objects.py b/src/whisper_streaming/timed_objects.py deleted file mode 100644 index b1baa0a..0000000 --- a/src/whisper_streaming/timed_objects.py +++ /dev/null @@ -1,27 +0,0 @@ -from dataclasses import dataclass -from typing import Optional - -@dataclass -class TimedText: - start: Optional[float] - end: Optional[float] - text: Optional[str] = '' - speaker: Optional[int] = -1 - -@dataclass -class ASRToken(TimedText): - def with_offset(self, offset: float) -> "ASRToken": - """Return a new token with the time offset added.""" - return ASRToken(self.start + offset, self.end + offset, self.text) - -@dataclass -class Sentence(TimedText): - pass - -@dataclass -class Transcript(TimedText): - pass - -@dataclass -class SpeakerSegment(TimedText): - pass \ No newline at end of file diff --git a/src/whisper_streaming/whisper_online.py b/src/whisper_streaming/whisper_online.py deleted file mode 100644 index b092cb1..0000000 --- a/src/whisper_streaming/whisper_online.py +++ /dev/null @@ -1,235 +0,0 @@ -#!/usr/bin/env python3 -import sys -import numpy as np -import librosa -from functools import lru_cache -import time -import logging -from .backends import FasterWhisperASR, MLXWhisper, WhisperTimestampedASR, OpenaiApiASR -from .online_asr import OnlineASRProcessor, VACOnlineASRProcessor - -logger = logging.getLogger(__name__) - - - -WHISPER_LANG_CODES = "af,am,ar,as,az,ba,be,bg,bn,bo,br,bs,ca,cs,cy,da,de,el,en,es,et,eu,fa,fi,fo,fr,gl,gu,ha,haw,he,hi,hr,ht,hu,hy,id,is,it,ja,jw,ka,kk,km,kn,ko,la,lb,ln,lo,lt,lv,mg,mi,mk,ml,mn,mr,ms,mt,my,ne,nl,nn,no,oc,pa,pl,ps,pt,ro,ru,sa,sd,si,sk,sl,sn,so,sq,sr,su,sv,sw,ta,te,tg,th,tk,tl,tr,tt,uk,ur,uz,vi,yi,yo,zh".split( - "," -) - - -def create_tokenizer(lan): - """returns an object that has split function that works like the one of MosesTokenizer""" - - assert ( - lan in WHISPER_LANG_CODES - ), "language must be Whisper's supported lang code: " + " ".join(WHISPER_LANG_CODES) - - if lan == "uk": - import tokenize_uk - - class UkrainianTokenizer: - def split(self, text): - return tokenize_uk.tokenize_sents(text) - - return UkrainianTokenizer() - - # supported by fast-mosestokenizer - if ( - lan - in "as bn ca cs de el en es et fi fr ga gu hi hu is it kn lt lv ml mni mr nl or pa pl pt ro ru sk sl sv ta te yue zh".split() - ): - from mosestokenizer import MosesSentenceSplitter - - return MosesSentenceSplitter(lan) - - # the following languages are in Whisper, but not in wtpsplit: - if ( - lan - in "as ba bo br bs fo haw hr ht jw lb ln lo mi nn oc sa sd sn so su sw tk tl tt".split() - ): - logger.debug( - f"{lan} code is not supported by wtpsplit. Going to use None lang_code option." - ) - lan = None - - from wtpsplit import WtP - - # downloads the model from huggingface on the first use - wtp = WtP("wtp-canine-s-12l-no-adapters") - - class WtPtok: - def split(self, sent): - return wtp.split(sent, lang_code=lan) - - return WtPtok() - - -def add_shared_args(parser): - """shared args for simulation (this entry point) and server - parser: argparse.ArgumentParser object - """ - parser.add_argument( - "--min-chunk-size", - type=float, - default=1.0, - help="Minimum audio chunk size in seconds. It waits up to this time to do processing. If the processing takes shorter time, it waits, otherwise it processes the whole segment that was received by this time.", - ) - parser.add_argument( - "--model", - type=str, - default="large-v3-turbo", - choices="tiny.en,tiny,base.en,base,small.en,small,medium.en,medium,large-v1,large-v2,large-v3,large,large-v3-turbo".split( - "," - ), - help="Name size of the Whisper model to use (default: large-v2). The model is automatically downloaded from the model hub if not present in model cache dir.", - ) - parser.add_argument( - "--model_cache_dir", - type=str, - default=None, - help="Overriding the default model cache dir where models downloaded from the hub are saved", - ) - parser.add_argument( - "--model_dir", - type=str, - default=None, - help="Dir where Whisper model.bin and other files are saved. This option overrides --model and --model_cache_dir parameter.", - ) - parser.add_argument( - "--lan", - "--language", - type=str, - default="auto", - help="Source language code, e.g. en,de,cs, or 'auto' for language detection.", - ) - parser.add_argument( - "--task", - type=str, - default="transcribe", - choices=["transcribe", "translate"], - help="Transcribe or translate.", - ) - parser.add_argument( - "--backend", - type=str, - default="faster-whisper", - choices=["faster-whisper", "whisper_timestamped", "mlx-whisper", "openai-api"], - help="Load only this backend for Whisper processing.", - ) - parser.add_argument( - "--vac", - action="store_true", - default=False, - help="Use VAC = voice activity controller. Recommended. Requires torch.", - ) - parser.add_argument( - "--vac-chunk-size", type=float, default=0.04, help="VAC sample size in seconds." - ) - parser.add_argument( - "--vad", - action="store_true", - default=False, - help="Use VAD = voice activity detection, with the default parameters.", - ) - parser.add_argument( - "--buffer_trimming", - type=str, - default="segment", - choices=["sentence", "segment"], - help='Buffer trimming strategy -- trim completed sentences marked with punctuation mark and detected by sentence segmenter, or the completed segments returned by Whisper. Sentence segmenter must be installed for "sentence" option.', - ) - parser.add_argument( - "--buffer_trimming_sec", - type=float, - default=15, - help="Buffer trimming length threshold in seconds. If buffer length is longer, trimming sentence/segment is triggered.", - ) - parser.add_argument( - "-l", - "--log-level", - dest="log_level", - choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"], - help="Set the log level", - default="DEBUG", - ) - -def backend_factory(args): - backend = args.backend - if backend == "openai-api": - logger.debug("Using OpenAI API.") - asr = OpenaiApiASR(lan=args.lan) - else: - if backend == "faster-whisper": - asr_cls = FasterWhisperASR - elif backend == "mlx-whisper": - asr_cls = MLXWhisper - else: - asr_cls = WhisperTimestampedASR - - # Only for FasterWhisperASR and WhisperTimestampedASR - size = args.model - t = time.time() - logger.info(f"Loading Whisper {size} model for language {args.lan}...") - asr = asr_cls( - modelsize=size, - lan=args.lan, - cache_dir=args.model_cache_dir, - model_dir=args.model_dir, - ) - e = time.time() - logger.info(f"done. It took {round(e-t,2)} seconds.") - - # Apply common configurations - if getattr(args, "vad", False): # Checks if VAD argument is present and True - logger.info("Setting VAD filter") - asr.use_vad() - - language = args.lan - if args.task == "translate": - asr.set_translate_task() - tgt_language = "en" # Whisper translates into English - else: - tgt_language = language # Whisper transcribes in this language - - # Create the tokenizer - if args.buffer_trimming == "sentence": - - tokenizer = create_tokenizer(tgt_language) - else: - tokenizer = None - return asr, tokenizer - -def online_factory(args, asr, tokenizer, logfile=sys.stderr): - if args.vac: - online = VACOnlineASRProcessor( - args.min_chunk_size, - asr, - tokenizer, - logfile=logfile, - buffer_trimming=(args.buffer_trimming, args.buffer_trimming_sec), - ) - else: - online = OnlineASRProcessor( - asr, - tokenizer, - logfile=logfile, - buffer_trimming=(args.buffer_trimming, args.buffer_trimming_sec), - ) - return online - -def asr_factory(args, logfile=sys.stderr): - """ - Creates and configures an ASR and ASR Online instance based on the specified backend and arguments. - """ - asr, tokenizer = backend_factory(args) - online = online_factory(args, asr, tokenizer, logfile=logfile) - return asr, online - -def set_logging(args, logger, others=[]): - logging.basicConfig(format="%(levelname)s\t%(message)s") # format='%(name)s - logger.setLevel(args.log_level) - - for other in others: - logging.getLogger(other).setLevel(args.log_level) - -