forked from thewh1teagle/sherpa-rs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlanguage_id.rs
38 lines (30 loc) · 1.3 KB
/
language_id.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-whisper-tiny.tar.bz2
tar xvf sherpa-onnx-whisper-tiny.tar.bz2
rm sherpa-onnx-whisper-tiny.tar.bz2
wget https://github.com/thewh1teagle/sherpa-rs/releases/download/v0.1.0/16hz_mono_pcm_s16le.wav -O 16hz_mono_pcm_s16le.wav
cargo run --example language_id 16hz_mono_pcm_s16le.wav
*/
use eyre::{bail, Result};
use sherpa_rs::language_id;
use std::io::Cursor;
fn main() -> Result<()> {
let file_path = std::env::args().nth(1).expect("Missing file path argument");
let audio_data = std::fs::read(file_path)?;
let cursor = Cursor::new(audio_data);
let mut reader = hound::WavReader::new(cursor)?;
let sample_rate = reader.spec().sample_rate as i32;
if sample_rate != 16000 {
bail!("The sample rate must be 16000.");
}
let samples: Vec<f32> = reader
.samples::<i16>()
.map(|s| s.unwrap() as f32 / i16::MAX as f32)
.collect();
let encoder = "sherpa-onnx-whisper-tiny/tiny-encoder.onnx".into();
let decoder = "sherpa-onnx-whisper-tiny/tiny-decoder.onnx".into();
let mut extractor = language_id::SpokenLanguageId::new(encoder, decoder, None, None, None);
let language = extractor.compute(samples, sample_rate)?;
println!("Spoken language: {}", language);
Ok(())
}