From 6427c834dfd97b1f05c6659cdc7ccf010bf82fe1 Mon Sep 17 00:00:00 2001
From: 嘉渊 <wangjiaming.wjm@alibaba-inc.com>
Date: 星期一, 24 四月 2023 19:50:07 +0800
Subject: [PATCH] update

---
 egs_modelscope/asr/paraformer/speech_paraformer_asr_nat-zh-cn-16k-common-vocab8404-online/infer.py |   58 +++++++++++++++++++---------------------------------------
 1 files changed, 19 insertions(+), 39 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 c1c541b..2eb9cc8 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,57 +1,37 @@
+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
-import logging
+
 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')
 
-waveform, sample_rate = torchaudio.load("waihu.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
+step = 4800  #300ms
+param_dict = {"cache": dict(), "is_final": False}
 final_result = ""
 
-while len(speech_buffer) >= 960:
-    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 len(rec_result) !=0 and rec_result['text'] != "sil":
+for sample_offset in range(0, speech_length, min(step, speech_length - sample_offset)):
+    if sample_offset + step >= speech_length - 1:
+        step = speech_length - sample_offset
+        param_dict["is_final"] = True
+    rec_result = inference_pipeline(audio_in=speech[sample_offset: sample_offset + step],
+                                    param_dict=param_dict)
+    if len(rec_result) != 0 and rec_result['text'] != "sil" and rec_result['text'] != "waiting_for_more_voice":
         final_result += rec_result['text']
     print(rec_result)
 print(final_result)

--
Gitblit v1.9.1