From 8dab6d184a034ca86eafa644ea0d2100aadfe27d Mon Sep 17 00:00:00 2001
From: jmwang66 <wangjiaming.wjm@alibaba-inc.com>
Date: 星期二, 09 五月 2023 10:58:33 +0800
Subject: [PATCH] Merge pull request #473 from alibaba-damo-academy/dev_smohan

---
 egs_modelscope/asr/paraformer/speech_paraformer_asr_nat-zh-cn-16k-common-vocab8404-online/infer.py |   69 ++++++++++++++--------------------
 1 files changed, 28 insertions(+), 41 deletions(-)

diff --git a/egs_modelscope/asr/paraformer/speech_paraformer_asr_nat-zh-cn-16k-common-vocab8404-online/infer.py b/egs_modelscope/asr/paraformer/speech_paraformer_asr_nat-zh-cn-16k-common-vocab8404-online/infer.py
index f2024fb..6672bbf 100644
--- a/egs_modelscope/asr/paraformer/speech_paraformer_asr_nat-zh-cn-16k-common-vocab8404-online/infer.py
+++ b/egs_modelscope/asr/paraformer/speech_paraformer_asr_nat-zh-cn-16k-common-vocab8404-online/infer.py
@@ -1,52 +1,39 @@
+import os
+import logging
 import torch
-import torchaudio
+import soundfile
+
 from modelscope.pipelines import pipeline
 from modelscope.utils.constant import Tasks
+from modelscope.utils.logger import get_logger
 
+logger = get_logger(log_level=logging.CRITICAL)
+logger.setLevel(logging.CRITICAL)
+
+os.environ["MODELSCOPE_CACHE"] = "./"
 inference_pipeline = pipeline(
     task=Tasks.auto_speech_recognition,
     model='damo/speech_paraformer_asr_nat-zh-cn-16k-common-vocab8404-online',
-    model_revision='v1.0.2')
+    model_revision='v1.0.4'
+)
 
-waveform, sample_rate = torchaudio.load("asr_example_zh.wav")
-speech_length = waveform.shape[1]
-speech = waveform[0]
+model_dir = os.path.join(os.environ["MODELSCOPE_CACHE"], "damo/speech_paraformer_asr_nat-zh-cn-16k-common-vocab8404-online")
+speech, sample_rate = soundfile.read(os.path.join(model_dir, "example/asr_example.wav"))
+speech_length = speech.shape[0]
 
-cache_en = {"start_idx": 0, "pad_left": 0, "stride": 10, "pad_right": 5, "cif_hidden": None, "cif_alphas": None}
-cache_de = {"decode_fsmn": None}
-cache = {"encoder": cache_en, "decoder": cache_de}
-param_dict = {}
-param_dict["cache"] = cache
-
-first_chunk = True
-speech_buffer = speech
-speech_cache = []
+sample_offset = 0
+chunk_size = [8, 8, 4] #[5, 10, 5] 600ms, [8, 8, 4] 480ms
+stride_size =  chunk_size[1] * 960
+param_dict = {"cache": dict(), "is_final": False, "chunk_size": chunk_size}
 final_result = ""
 
-while len(speech_buffer) > 0:
-    if first_chunk:
-        if len(speech_buffer) >= 14400:
-            rec_result = inference_pipeline(audio_in=speech_buffer[0:14400], param_dict=param_dict)
-            speech_buffer = speech_buffer[4800:]
-        else:
-            cache_en["stride"] = len(speech_buffer) // 960
-            cache_en["pad_right"] = 0
-            rec_result = inference_pipeline(audio_in=speech_buffer, param_dict=param_dict)
-            speech_buffer = []
-        cache_en["start_idx"] = -5
-        first_chunk = False
-    else:
-        cache_en["start_idx"] += 10
-        if len(speech_buffer) >= 4800:
-            cache_en["pad_left"] = 5
-            rec_result = inference_pipeline(audio_in=speech_buffer[:19200], param_dict=param_dict)
-            speech_buffer = speech_buffer[9600:]
-        else:
-            cache_en["stride"] = len(speech_buffer) // 960
-            cache_en["pad_right"] = 0
-            rec_result = inference_pipeline(audio_in=speech_buffer, param_dict=param_dict)
-            speech_buffer = []
-    if rec_result['text'] != "sil":
-        final_result += rec_result['text']
-    print(rec_result)
-print(final_result)
+for sample_offset in range(0, speech_length, min(stride_size, speech_length - sample_offset)):
+    if sample_offset + stride_size >= speech_length - 1:
+        stride_size = speech_length - sample_offset
+        param_dict["is_final"] = True
+    rec_result = inference_pipeline(audio_in=speech[sample_offset: sample_offset + stride_size],
+                                    param_dict=param_dict)
+    if len(rec_result) != 0:
+        final_result += rec_result['text'] + " "
+        print(rec_result)
+print(final_result.strip())

--
Gitblit v1.9.1