pub struct EmbeddingExtractor { /* private fields */ }Implementations§
Source§impl EmbeddingExtractor
impl EmbeddingExtractor
Sourcepub fn new<P: AsRef<Path>>(model_path: P) -> Result<Self>
pub fn new<P: AsRef<Path>>(model_path: P) -> Result<Self>
Examples found in repository?
examples/max_speakers.rs (line 9)
4fn main() -> Result<()> {
5 let audio_path = std::env::args().nth(1).expect("Please specify audio file");
6 let (samples, sample_rate) = read_wav(&audio_path)?;
7 let max_speakers = 6;
8
9 let extractor = EmbeddingExtractor::new("src/nn/speaker_identification/model.bpk")?;
10 let mut manager = EmbeddingManager::new(max_speakers);
11 let segmenter = Segmenter::new("src/nn/segmentation/model.bpk")?;
12
13 for segment in segmenter.iter_segments(&samples, sample_rate)? {
14 let segment = segment?;
15 let embedding = extractor.extract(&segment.samples, sample_rate)?;
16
17 let speaker = if manager.is_full() {
18 manager.best_match(&embedding)
19 } else {
20 manager.upsert(&embedding, 0.5)
21 }
22 .map(|s| s.to_string())
23 .unwrap_or_else(|| "?".into());
24
25 println!(
26 "start = {:.2}, end = {:.2}, speaker = {}",
27 segment.start, segment.end, speaker
28 );
29 }
30
31 Ok(())
32}More examples
examples/infinite.rs (line 39)
31fn main() -> Result<()> {
32 let audio_path = std::env::args().nth(1).expect("Please specify audio file");
33 let search_threshold = 0.5;
34
35 let embedding_model_path = "src/nn/speaker_identification/model.bpk";
36 let segmentation_model_path = "src/nn/segmentation/model.bpk";
37
38 let (samples, sample_rate) = pyannote_rs::read_wav(&audio_path)?;
39 let embedding_extractor = EmbeddingExtractor::new(embedding_model_path)?;
40 let mut embedding_manager = EmbeddingManager::new(usize::MAX);
41 let segmenter = Segmenter::new(segmentation_model_path)?;
42
43 for segment in segmenter.iter_segments(&samples, sample_rate)? {
44 match segment {
45 Ok(segment) => {
46 if let Err(error) = process_segment(
47 segment,
48 &embedding_extractor,
49 &mut embedding_manager,
50 search_threshold,
51 sample_rate,
52 ) {
53 eprintln!("Error processing segment: {:?}", error);
54 }
55 }
56 Err(error) => eprintln!("Failed to process segment: {:?}", error),
57 }
58 }
59
60 Ok(())
61}Sourcepub fn extract(&self, samples: &[i16], sample_rate: u32) -> Result<Embedding>
pub fn extract(&self, samples: &[i16], sample_rate: u32) -> Result<Embedding>
Examples found in repository?
examples/infinite.rs (line 15)
8fn process_segment(
9 segment: pyannote_rs::Segment,
10 embedding_extractor: &EmbeddingExtractor,
11 embedding_manager: &mut EmbeddingManager,
12 search_threshold: f32,
13 sample_rate: u32,
14) -> Result<()> {
15 let embedding = embedding_extractor.extract(&segment.samples, sample_rate)?;
16
17 let speaker = embedding_manager
18 .upsert(&embedding, search_threshold)
19 .or_else(|| embedding_manager.best_match(&embedding))
20 .map(|r| r.to_string())
21 .unwrap_or("?".into());
22
23 println!(
24 "start = {:.2}, end = {:.2}, speaker = {}",
25 segment.start, segment.end, speaker
26 );
27
28 Ok(())
29}More examples
examples/max_speakers.rs (line 15)
4fn main() -> Result<()> {
5 let audio_path = std::env::args().nth(1).expect("Please specify audio file");
6 let (samples, sample_rate) = read_wav(&audio_path)?;
7 let max_speakers = 6;
8
9 let extractor = EmbeddingExtractor::new("src/nn/speaker_identification/model.bpk")?;
10 let mut manager = EmbeddingManager::new(max_speakers);
11 let segmenter = Segmenter::new("src/nn/segmentation/model.bpk")?;
12
13 for segment in segmenter.iter_segments(&samples, sample_rate)? {
14 let segment = segment?;
15 let embedding = extractor.extract(&segment.samples, sample_rate)?;
16
17 let speaker = if manager.is_full() {
18 manager.best_match(&embedding)
19 } else {
20 manager.upsert(&embedding, 0.5)
21 }
22 .map(|s| s.to_string())
23 .unwrap_or_else(|| "?".into());
24
25 println!(
26 "start = {:.2}, end = {:.2}, speaker = {}",
27 segment.start, segment.end, speaker
28 );
29 }
30
31 Ok(())
32}pub fn extract_f32( &self, samples: &[f32], sample_rate: u32, ) -> Result<Embedding>
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for EmbeddingExtractor
impl !RefUnwindSafe for EmbeddingExtractor
impl Send for EmbeddingExtractor
impl !Sync for EmbeddingExtractor
impl Unpin for EmbeddingExtractor
impl !UnwindSafe for EmbeddingExtractor
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more