From 33d3d2084403fd34b79c835d2f2fe04f6cd8f738 Mon Sep 17 00:00:00 2001
From: 游雁 <zhifu.gzf@alibaba-inc.com>
Date: 星期三, 13 九月 2023 09:33:54 +0800
Subject: [PATCH] Merge branch 'main' of github.com:alibaba-damo-academy/FunASR add
---
funasr/runtime/onnxruntime/src/fsmn-vad-online.cpp | 21 +++++++++++++++++----
1 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/funasr/runtime/onnxruntime/src/fsmn-vad-online.cpp b/funasr/runtime/onnxruntime/src/fsmn-vad-online.cpp
index 0346916..b9cda4b 100644
--- a/funasr/runtime/onnxruntime/src/fsmn-vad-online.cpp
+++ b/funasr/runtime/onnxruntime/src/fsmn-vad-online.cpp
@@ -55,7 +55,7 @@
int frame_from_waves = (waves.size() - frame_sample_length_) / frame_shift_sample_length_ + 1;
int minus_frame = reserve_waveforms_.empty() ? (lfr_m - 1) / 2 : 0;
int lfr_splice_frame_idxs = OnlineLfrCmvn(vad_feats, input_finished);
- int reserve_frame_idx = lfr_splice_frame_idxs - minus_frame;
+ int reserve_frame_idx = std::abs(lfr_splice_frame_idxs - minus_frame);
reserve_waveforms_.clear();
reserve_waveforms_.insert(reserve_waveforms_.begin(),
waves.begin() + reserve_frame_idx * frame_shift_sample_length_,
@@ -74,7 +74,11 @@
waves = reserve_waveforms_;
}
vad_feats = lfr_splice_cache_;
- OnlineLfrCmvn(vad_feats, input_finished);
+ if(vad_feats.size() == 0){
+ LOG(ERROR) << "vad_feats's size is 0";
+ }else{
+ OnlineLfrCmvn(vad_feats, input_finished);
+ }
}
}
if(input_finished){
@@ -86,7 +90,7 @@
int FsmnVadOnline::OnlineLfrCmvn(vector<vector<float>> &vad_feats, bool input_finished) {
vector<vector<float>> out_feats;
int T = vad_feats.size();
- int T_lrf = ceil((T - (lfr_m - 1) / 2) / lfr_n);
+ int T_lrf = ceil((T - (lfr_m - 1) / 2) / (float)lfr_n);
int lfr_splice_frame_idxs = T_lrf;
vector<float> p;
for (int i = 0; i < T_lrf; i++) {
@@ -128,12 +132,18 @@
std::vector<std::vector<int>>
FsmnVadOnline::Infer(std::vector<float> &waves, bool input_finished) {
+ std::vector<std::vector<int>> vad_segments;
std::vector<std::vector<float>> vad_feats;
std::vector<std::vector<float>> vad_probs;
ExtractFeats(vad_sample_rate_, vad_feats, waves, input_finished);
+ if(vad_feats.size() == 0){
+ return vad_segments;
+ }
fsmnvad_handle_->Forward(vad_feats, &vad_probs, &in_cache_, input_finished);
+ if(vad_probs.size() == 0){
+ return vad_segments;
+ }
- std::vector<std::vector<int>> vad_segments;
vad_segments = vad_scorer(vad_probs, waves, input_finished, true, vad_silence_duration_, vad_max_len_,
vad_speech_noise_thres_, vad_sample_rate_);
return vad_segments;
@@ -175,6 +185,9 @@
vad_silence_duration_ = vad_silence_duration;
vad_max_len_ = vad_max_len;
vad_speech_noise_thres_ = vad_speech_noise_thres;
+
+ // 2pass
+ audio_handle = make_unique<Audio>(1);
}
FsmnVadOnline::~FsmnVadOnline() {
--
Gitblit v1.9.1