whisper.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. from __future__ import annotations
  2. from pathlib import Path
  3. from typing import Any
  4. class WhisperWorker:
  5. """
  6. Langlebiger Whisper-Worker.
  7. Das Modell wird genau einmal geladen.
  8. """
  9. def __init__(self, settings):
  10. self.settings = settings
  11. self.model = None
  12. def start(self):
  13. from faster_whisper import WhisperModel
  14. self.model = WhisperModel(
  15. self.settings.whisper_model,
  16. device=self.settings.whisper_device,
  17. compute_type=self.settings.whisper_compute_type,
  18. )
  19. def transcribe(
  20. self,
  21. audio: str | Path,
  22. ) -> dict[str, Any]:
  23. if self.model is None:
  24. self.start()
  25. segments, info = self.model.transcribe(
  26. str(audio),
  27. language=self.settings.whisper_language,
  28. vad_filter=True,
  29. )
  30. result_segments = []
  31. for segment in segments:
  32. text = segment.text.strip()
  33. if not text:
  34. continue
  35. result_segments.append(
  36. {
  37. "start": segment.start,
  38. "end": segment.end,
  39. "text": text,
  40. }
  41. )
  42. text = " ".join(
  43. item["text"]
  44. for item in result_segments
  45. )
  46. return {
  47. "language": info.language,
  48. "language_probability": info.language_probability,
  49. "text": text,
  50. "segments": result_segments,
  51. }