From 28ccfbfc51068a663a80764e14074df5edf2b5ba Mon Sep 17 00:00:00 2001
From: kongdeqiang <kongdeqiang960204@163.com>
Date: 星期五, 13 三月 2026 17:41:41 +0800
Subject: [PATCH] 提交
---
runtime/python/grpc/grpc_main_client.py | 125 ++++++++++++++++++++---------------------
1 files changed, 62 insertions(+), 63 deletions(-)
diff --git a/runtime/python/grpc/grpc_main_client.py b/runtime/python/grpc/grpc_main_client.py
index 5c462a7..4606214 100644
--- a/runtime/python/grpc/grpc_main_client.py
+++ b/runtime/python/grpc/grpc_main_client.py
@@ -1,8 +1,8 @@
-'''
+"""
Copyright FunASR (https://github.com/alibaba-damo-academy/FunASR). All Rights
Reserved. MIT License (https://opensource.org/licenses/MIT)
2023 by burkliu(鍒樻煆鍩�) liubaiji@xverse.cn
-'''
+"""
import logging
import argparse
@@ -13,72 +13,71 @@
import paraformer_pb2_grpc
from paraformer_pb2 import Request, WavFormat, DecodeMode
+
class GrpcClient:
- def __init__(self, wav_path, uri, mode):
- self.wav, self.sampling_rate = sf.read(wav_path, dtype='int16')
- self.wav_format = WavFormat.pcm
- self.audio_chunk_duration = 1000 # ms
- self.audio_chunk_size = int(self.sampling_rate * self.audio_chunk_duration / 1000)
- self.send_interval = 100 # ms
- self.mode = mode
+ def __init__(self, wav_path, uri, mode):
+ self.wav, self.sampling_rate = sf.read(wav_path, dtype="int16")
+ self.wav_format = WavFormat.pcm
+ self.audio_chunk_duration = 1000 # ms
+ self.audio_chunk_size = int(self.sampling_rate * self.audio_chunk_duration / 1000)
+ self.send_interval = 100 # ms
+ self.mode = mode
- # connect to grpc server
- channel = grpc.insecure_channel(uri)
- self.stub = paraformer_pb2_grpc.ASRStub(channel)
-
- # start request
- for respond in self.stub.Recognize(self.request_iterator()):
- logging.info("[receive] mode {}, text {}, is final {}".format(
- DecodeMode.Name(respond.mode), respond.text, respond.is_final))
+ # connect to grpc server
+ channel = grpc.insecure_channel(uri)
+ self.stub = paraformer_pb2_grpc.ASRStub(channel)
- def request_iterator(self, mode = DecodeMode.two_pass):
- is_first_pack = True
- is_final = False
- for start in range(0, len(self.wav), self.audio_chunk_size):
- request = Request()
- audio_chunk = self.wav[start : start + self.audio_chunk_size]
+ # start request
+ for respond in self.stub.Recognize(self.request_iterator()):
+ logging.info(
+ "[receive] mode {}, text {}, is final {}".format(
+ DecodeMode.Name(respond.mode), respond.text, respond.is_final
+ )
+ )
- if is_first_pack:
- is_first_pack = False
- request.sampling_rate = self.sampling_rate
- request.mode = self.mode
- request.wav_format = self.wav_format
- if request.mode == DecodeMode.two_pass or request.mode == DecodeMode.online:
- request.chunk_size.extend([5, 10, 5])
+ def request_iterator(self, mode=DecodeMode.two_pass):
+ is_first_pack = True
+ is_final = False
+ for start in range(0, len(self.wav), self.audio_chunk_size):
+ request = Request()
+ audio_chunk = self.wav[start : start + self.audio_chunk_size]
- if start + self.audio_chunk_size >= len(self.wav):
- is_final = True
- request.is_final = is_final
- request.audio_data = audio_chunk.tobytes()
- logging.info("[request] audio_data len {}, is final {}".format(
- len(request.audio_data), request.is_final)) # int16 = 2bytes
- time.sleep(self.send_interval / 1000)
- yield request
+ if is_first_pack:
+ is_first_pack = False
+ request.sampling_rate = self.sampling_rate
+ request.mode = self.mode
+ request.wav_format = self.wav_format
+ if request.mode == DecodeMode.two_pass or request.mode == DecodeMode.online:
+ request.chunk_size.extend([5, 10, 5])
-if __name__ == '__main__':
- logging.basicConfig(filename="", format="%(asctime)s %(message)s", level=logging.INFO)
- parser = argparse.ArgumentParser()
- parser.add_argument("--host",
- type=str,
- default="127.0.0.1",
- required=False,
- help="grpc server host ip")
- parser.add_argument("--port",
- type=int,
- default=10100,
- required=False,
- help="grpc server port")
- parser.add_argument("--wav_path",
- type=str,
- required=True,
- help="audio wav path")
- args = parser.parse_args()
+ if start + self.audio_chunk_size >= len(self.wav):
+ is_final = True
+ request.is_final = is_final
+ request.audio_data = audio_chunk.tobytes()
+ logging.info(
+ "[request] audio_data len {}, is final {}".format(
+ len(request.audio_data), request.is_final
+ )
+ ) # int16 = 2bytes
+ time.sleep(self.send_interval / 1000)
+ yield request
- for mode in [DecodeMode.offline, DecodeMode.online, DecodeMode.two_pass]:
- mode_name = DecodeMode.Name(mode)
- logging.info("[request] start requesting with mode {}".format(mode_name))
- st = time.time()
- uri = '{}:{}'.format(args.host, args.port)
- client = GrpcClient(args.wav_path, uri, mode)
- logging.info("mode {}, time pass: {}".format(mode_name, time.time() - st))
+if __name__ == "__main__":
+ logging.basicConfig(filename="", format="%(asctime)s %(message)s", level=logging.INFO)
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ "--host", type=str, default="127.0.0.1", required=False, help="grpc server host ip"
+ )
+ parser.add_argument("--port", type=int, default=10100, required=False, help="grpc server port")
+ parser.add_argument("--wav_path", type=str, required=True, help="audio wav path")
+ args = parser.parse_args()
+
+ for mode in [DecodeMode.offline, DecodeMode.online, DecodeMode.two_pass]:
+ mode_name = DecodeMode.Name(mode)
+ logging.info("[request] start requesting with mode {}".format(mode_name))
+
+ st = time.time()
+ uri = "{}:{}".format(args.host, args.port)
+ client = GrpcClient(args.wav_path, uri, mode)
+ logging.info("mode {}, time pass: {}".format(mode_name, time.time() - st))
--
Gitblit v1.9.1