From e2154e45996318c245b100d204bbb0ebdc8cadbe Mon Sep 17 00:00:00 2001
From: 游雁 <zhifu.gzf@alibaba-inc.com>
Date: 星期三, 31 一月 2024 10:09:36 +0800
Subject: [PATCH] websocket
---
runtime/python/websocket/funasr_client_api.py | 44 ++++++++++++++++++++++++++++++--------------
1 files changed, 30 insertions(+), 14 deletions(-)
diff --git a/runtime/python/websocket/funasr_client_api.py b/runtime/python/websocket/funasr_client_api.py
index d0992ff..093ed51 100644
--- a/runtime/python/websocket/funasr_client_api.py
+++ b/runtime/python/websocket/funasr_client_api.py
@@ -5,7 +5,7 @@
2022-2023 by zhaomingwork@qq.com
'''
# pip install websocket-client
-import ssl
+import ssl
from websocket import ABNF
from websocket import create_connection
from queue import Queue
@@ -20,7 +20,13 @@
python asr recognizer lib
'''
- def __init__(self, host="127.0.0.1", port="30035", is_ssl=True,chunk_size="5, 10, 5",chunk_interval=10,mode="offline",wav_name="default"):
+ def __init__(self, host="127.0.0.1",
+ port="30035",
+ is_ssl=True,
+ chunk_size="0, 10, 5",
+ chunk_interval=10,
+ mode="offline",
+ wav_name="default"):
'''
host: server host ip
port: server port
@@ -43,17 +49,21 @@
self.msg_queue = Queue() # used for recognized result text
print("connect to url",uri)
- self.websocket=create_connection(uri,ssl=ssl_context,sslopt=ssl_opt)
+ self.websocket=create_connection(uri, ssl=ssl_context, sslopt=ssl_opt)
- self.thread_msg = threading.Thread(target=Funasr_websocket_recognizer.thread_rec_msg,args=(self,))
+ self.thread_msg = threading.Thread(target=Funasr_websocket_recognizer.thread_rec_msg, args=(self,))
self.thread_msg.start()
chunk_size = [int(x) for x in chunk_size.split(",")]
- stride = int(60 * chunk_size[1]/ chunk_interval / 1000 * 16000 * 2)
+ stride = int(60 * chunk_size[1] / chunk_interval / 1000 * 16000 * 2)
chunk_num = (len(audio_bytes) - 1) // stride + 1
- message = json.dumps({"mode": args.mode, "chunk_size": args.chunk_size, "encoder_chunk_look_back": 4,
- "decoder_chunk_look_back": 1, "chunk_interval": args.chunk_interval,
- "wav_name": wav_name, "is_speaking": True})
+ message = json.dumps({"mode": mode,
+ "chunk_size": chunk_size,
+ "encoder_chunk_look_back": 4,
+ "decoder_chunk_look_back": 1,
+ "chunk_interval": chunk_interval,
+ "wav_name": wav_name,
+ "is_speaking": True})
self.websocket.send(message)
@@ -68,7 +78,7 @@
try:
while(True):
msg=self.websocket.recv()
- if msg is None or len(msg)==0:
+ if msg is None or len(msg) == 0:
continue
msg = json.loads(msg)
@@ -77,7 +87,7 @@
print("client closed")
# feed data to asr engine, wait_time means waiting for result until time out
- def feed_chunk(self, chunk,wait_time=0.01):
+ def feed_chunk(self, chunk, wait_time=0.01):
try:
self.websocket.send(chunk, ABNF.OPCODE_BINARY)
# loop to check if there is a message, timeout in 0.01s
@@ -89,6 +99,7 @@
return msg
except:
return ""
+
def close(self,timeout=1):
message = json.dumps({"is_speaking": False})
self.websocket.send(message)
@@ -103,9 +114,10 @@
return msg
if __name__ == '__main__':
+
print('example for Funasr_websocket_recognizer')
import wave
- wav_path="asr_example.wav"
+ wav_path = "/Users/zhifu/Downloads/modelscope_models/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/example/asr_example.wav"
with wave.open(wav_path, "rb") as wav_file:
params = wav_file.getparams()
frames = wav_file.readframes(wav_file.getnframes())
@@ -115,20 +127,24 @@
stride = int(60 * 10 / 10 / 1000 * 16000 * 2)
chunk_num = (len(audio_bytes) - 1) // stride + 1
# create an recognizer
- rcg=Funasr_websocket_recognizer(host="127.0.0.1",port="30035",is_ssl=True,mode="2pass")
+ rcg = Funasr_websocket_recognizer(host="127.0.0.1",
+ port="10095",
+ is_ssl=True,
+ mode="2pass",
+ chunk_size="0,10,5")
# loop to send chunk
for i in range(chunk_num):
beg = i * stride
data = audio_bytes[beg:beg + stride]
- text=rcg.feed_chunk(data,wait_time=0.02)
+ text = rcg.feed_chunk(data,wait_time=0.02)
if len(text)>0:
print("text",text)
time.sleep(0.05)
# get last message
- text=rcg.close(timeout=3)
+ text = rcg.close(timeout=3)
print("text",text)
--
Gitblit v1.9.1