Changed loading of transcriber objects to function. Adjusted tests.

This commit is contained in:
Marko Henning
2024-05-16 16:16:33 +02:00
parent ff6c0123b9
commit 07b9939446
3 changed files with 69 additions and 25 deletions
+4 -4
View File
@@ -38,7 +38,7 @@ from tqdm import trange
# Application-Specific Imports # Application-Specific Imports
from .audio import AudioProcessor from .audio import AudioProcessor
from .diarisation import Diariser from .diarisation import Diariser
from .transcriber import Transcriber, whisper from .transcriber import Transcriber, load_transcriber, whisper
from .transcript_exporter import Transcript from .transcript_exporter import Transcript
@@ -87,10 +87,10 @@ class Scraibe:
""" """
if whisper_model is None: if whisper_model is None:
self.transcriber = Transcriber.load_model( self.transcriber = load_transcriber(
"medium", whisper_type, **kwargs) "medium", whisper_type, **kwargs)
elif isinstance(whisper_model, str): elif isinstance(whisper_model, str):
self.transcriber = Transcriber.load_model( self.transcriber = load_transcriber(
whisper_model, whisper_type, **kwargs) whisper_model, whisper_type, **kwargs)
else: else:
self.transcriber = whisper_model self.transcriber = whisper_model
@@ -258,7 +258,7 @@ class Scraibe:
_old_model = self.transcriber.model_name _old_model = self.transcriber.model_name
if isinstance(whisper_model, str): if isinstance(whisper_model, str):
self.transcriber = Transcriber.load_model(whisper_model, **kwargs) self.transcriber = load_transcriber(whisper_model, **kwargs)
elif isinstance(whisper_model, Transcriber): elif isinstance(whisper_model, Transcriber):
self.transcriber = whisper_model self.transcriber = whisper_model
else: else:
+60 -17
View File
@@ -116,14 +116,16 @@ class Transcriber:
print(f'Transcript saved to {save_path}') print(f'Transcript saved to {save_path}')
@staticmethod @classmethod
def load_model(model: str = "medium", @abstractmethod
def load_model(cls,
model: str = "medium",
whisper_type: str = 'whisper', whisper_type: str = 'whisper',
download_root: str = WHISPER_DEFAULT_PATH, download_root: str = WHISPER_DEFAULT_PATH,
device: Optional[Union[str, device]] = None, device: Optional[Union[str, device]] = None,
in_memory: bool = False, in_memory: bool = False,
*args, **kwargs *args, **kwargs
) -> 'Union[WhisperTranscriber, WhisperXTranscriber]': ) -> None:
""" """
Load whisper model. Load whisper model.
@@ -153,19 +155,8 @@ class Transcriber:
kwargs: Additional keyword arguments only to avoid errors. kwargs: Additional keyword arguments only to avoid errors.
Returns: Returns:
Transcriber: A Transcriber object initialized with the specified model. None: abscract method.
""" """
if whisper_type.lower() == 'whisper':
_model = WhisperTranscriber.load_model(
model, download_root, device, in_memory, *args, **kwargs)
return _model
elif whisper_type.lower() == 'whisperx':
_model = WhisperXTranscriber.load_model(
model, download_root, device, *args, **kwargs)
return _model
else:
raise ValueError(f'Model type not recognized, exptected "whisper" '
f'or "whisperx", got {whisper_type}.')
pass pass
@staticmethod @staticmethod
@@ -216,7 +207,7 @@ class WhisperTranscriber(Transcriber):
device: Optional[Union[str, device]] = None, device: Optional[Union[str, device]] = None,
in_memory: bool = False, in_memory: bool = False,
*args, **kwargs *args, **kwargs
) -> 'Transcriber': ) -> 'WhisperTranscriber':
""" """
Load whisper model. Load whisper model.
@@ -316,7 +307,7 @@ class WhisperXTranscriber(Transcriber):
download_root: str = WHISPER_DEFAULT_PATH, download_root: str = WHISPER_DEFAULT_PATH,
device: Optional[Union[str, device]] = None, device: Optional[Union[str, device]] = None,
*args, **kwargs *args, **kwargs
) -> 'Transcriber': ) -> 'WhisperXTranscriber':
""" """
Load whisper model. Load whisper model.
@@ -383,3 +374,55 @@ class WhisperXTranscriber(Transcriber):
def __repr__(self) -> str: def __repr__(self) -> str:
return f"WhisperXTranscriber(model_name={self.model_name}, model={self.model})" return f"WhisperXTranscriber(model_name={self.model_name}, model={self.model})"
def load_transcriber(model: str = "medium",
whisper_type: str = 'whisper',
download_root: str = WHISPER_DEFAULT_PATH,
device: Optional[Union[str, device]] = None,
in_memory: bool = False,
*args, **kwargs
) -> Union[WhisperTranscriber, WhisperXTranscriber]:
"""
Load whisper model.
Args:
model (str): Whisper model. Available models include:
- 'tiny.en'
- 'tiny'
- 'base.en'
- 'base'
- 'small.en'
- 'small'
- 'medium.en'
- 'medium'
- 'large-v1'
- 'large-v2'
- 'large-v3'
- 'large'
whisper_type (str):
Type of whisper model to load. "whisper" or "whisperx".
download_root (str, optional): Path to download the model.
Defaults to WHISPER_DEFAULT_PATH.
device (Optional[Union[str, torch.device]], optional):
Device to load model on. Defaults to None.
in_memory (bool, optional): Whether to load model in memory.
Defaults to False.
args: Additional arguments only to avoid errors.
kwargs: Additional keyword arguments only to avoid errors.
Returns:
Union[WhisperTranscriber, WhisperXTranscriber]:
One of the Whisper variants as Transcrbier object initialized with the specified model.
"""
if whisper_type.lower() == 'whisper':
_model = WhisperTranscriber.load_model(
model, download_root, device, in_memory, *args, **kwargs)
return _model
elif whisper_type.lower() == 'whisperx':
_model = WhisperXTranscriber.load_model(
model, download_root, device, *args, **kwargs)
return _model
else:
raise ValueError(f'Model type not recognized, exptected "whisper" '
f'or "whisperx", got {whisper_type}.')
+5 -4
View File
@@ -1,5 +1,6 @@
import pytest import pytest
from scraibe import Transcriber, WhisperTranscriber, WhisperXTranscriber from scraibe import (Transcriber, WhisperTranscriber,
WhisperXTranscriber, load_transcriber)
import torch import torch
@@ -30,12 +31,12 @@ def test_transcriber(mock_load_model, audio_file, expected_transcription):
@pytest.fixture @pytest.fixture
def whisper_instance(): def whisper_instance():
return Transcriber.load_model('medium', whisper_type='whisper') return load_transcriber('medium', whisper_type='whisper')
@pytest.fixture @pytest.fixture
def whisperx_instance(): def whisperx_instance():
return Transcriber.load_model('medium', whisper_type='whisperx') return load_transcriber('medium', whisper_type='whisperx')
def test_whisper_base_initialization(whisper_instance): def test_whisper_base_initialization(whisper_instance):
@@ -56,7 +57,7 @@ def test_whisperx_transcriber_initialization(whisperx_instance):
def test_wrong_transcriber_initialization(): def test_wrong_transcriber_initialization():
with pytest.raises(ValueError): with pytest.raises(ValueError):
Transcriber.load_model('medium', whisper_type='wrong_whisper') load_transcriber('medium', whisper_type='wrong_whisper')
def test_get_whisper_kwargs(): def test_get_whisper_kwargs():