|
""" |
|
Speaker detector interface definition |
|
""" |
|
|
|
from abc import ABC, abstractmethod |
|
from typing import Dict, List, Optional |
|
from dataclasses import dataclass |
|
import numpy as np |
|
|
|
|
|
@dataclass |
|
class SpeakerSegment: |
|
"""Speaker segment data class""" |
|
start: float |
|
end: float |
|
speaker_id: str |
|
confidence: Optional[float] = None |
|
|
|
|
|
@dataclass |
|
class SpeakerProfile: |
|
"""Speaker profile data class""" |
|
speaker_id: str |
|
embedding: np.ndarray |
|
segments: List[SpeakerSegment] |
|
total_duration: float |
|
|
|
|
|
class ISpeakerDetector(ABC): |
|
"""Interface for speaker detection and diarization""" |
|
|
|
@abstractmethod |
|
async def detect_speakers( |
|
self, |
|
audio_file_path: str, |
|
audio_segments: Optional[List] = None |
|
) -> Dict[str, SpeakerProfile]: |
|
""" |
|
Detect and identify speakers in audio |
|
|
|
Args: |
|
audio_file_path: Path to audio file |
|
audio_segments: Optional pre-segmented audio |
|
|
|
Returns: |
|
Dictionary mapping speaker IDs to SpeakerProfile objects |
|
""" |
|
pass |
|
|
|
@abstractmethod |
|
def map_to_global_speakers( |
|
self, |
|
local_speakers: Dict[str, SpeakerProfile], |
|
source_file: str |
|
) -> Dict[str, str]: |
|
""" |
|
Map local speakers to global speaker identities |
|
|
|
Args: |
|
local_speakers: Local speaker profiles |
|
source_file: Source audio file path |
|
|
|
Returns: |
|
Mapping from local speaker ID to global speaker ID |
|
""" |
|
pass |
|
|
|
@abstractmethod |
|
def get_speaker_summary(self) -> Dict: |
|
"""Get summary of all detected speakers""" |
|
pass |