FunASR/funasr/runtime/python/grpc/grpc_main_client_mic.py
huangmingming 49c00a7d6c grpc client remove VAD
Remove webrtc-vad in grpc, do it with specified vad-model in server instead.
2023-03-13 12:07:11 +08:00

102 lines
3.1 KiB
Python

import pyaudio
import grpc
import json
import time
import asyncio
import argparse
from grpc_client import transcribe_audio_bytes
from paraformer_pb2_grpc import ASRStub
async def deal_chunk(sig_mic):
global stub,SPEAKING,asr_user,language,sample_rate
SPEAKING = True
resp = transcribe_audio_bytes(stub, sig_mic, user=asr_user, language=language, speaking = True, isEnd = False) #speaking, send audio to server.
if "decoding" == resp.action: #partial result
print(json.loads(resp.sentence))
elif "finish" == resp.action: #final result
print (json.loads(resp.sentence))
async def record(host,port,sample_rate,mic_chunk,record_seconds,asr_user,language):
with grpc.insecure_channel('{}:{}'.format(host, port)) as channel:
global stub
stub = ASRStub(channel)
for i in range(0, int(sample_rate / mic_chunk * record_seconds)):
sig_mic = stream.read(mic_chunk,exception_on_overflow = False)
await asyncio.create_task(deal_chunk(sig_mic))
#end grpc
response = transcribe_audio_bytes(stub, None, user=asr_user, language=language, speaking = False, isEnd = True)
print (response.next().action)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("--host",
type=str,
default="127.0.0.1",
required=True,
help="grpc server host ip")
parser.add_argument("--port",
type=int,
default=10095,
required=True,
help="grpc server port")
parser.add_argument("--user_allowed",
type=str,
default="project1_user1",
help="allowed user for grpc client")
parser.add_argument("--sample_rate",
type=int,
default=16000,
help="audio sample_rate from client")
parser.add_argument("--mic_chunk",
type=int,
default=160,
help="chunk size for mic")
parser.add_argument("--record_seconds",
type=int,
default=120,
help="run specified seconds then exit ")
args = parser.parse_args()
SPEAKING = False
asr_user = args.user_allowed
sample_rate = args.sample_rate
language = 'zh-CN'
FORMAT = pyaudio.paInt16
CHANNELS = 1
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=args.sample_rate,
input=True,
frames_per_buffer=args.mic_chunk)
print("* recording")
asyncio.run(record(args.host,args.port,args.sample_rate,args.mic_chunk,args.record_seconds,args.user_allowed,language))
stream.stop_stream()
stream.close()
p.terminate()
print("recording stop")