| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- from __future__ import annotations
- from pathlib import Path
- from typing import Any
- class WhisperWorker:
- """
- Langlebiger Whisper-Worker.
- Das Modell wird genau einmal geladen.
- """
- def __init__(self, settings):
- self.settings = settings
- self.model = None
- def start(self):
- from faster_whisper import WhisperModel
- self.model = WhisperModel(
- self.settings.whisper_model,
- device=self.settings.whisper_device,
- compute_type=self.settings.whisper_compute_type,
- )
- def transcribe(
- self,
- audio: str | Path,
- ) -> dict[str, Any]:
- if self.model is None:
- self.start()
- segments, info = self.model.transcribe(
- str(audio),
- language=self.settings.whisper_language,
- vad_filter=True,
- )
- result_segments = []
- for segment in segments:
- text = segment.text.strip()
- if not text:
- continue
- result_segments.append(
- {
- "start": segment.start,
- "end": segment.end,
- "text": text,
- }
- )
- text = " ".join(
- item["text"]
- for item in result_segments
- )
- return {
- "language": info.language,
- "language_probability": info.language_probability,
- "text": text,
- "segments": result_segments,
- }
|