1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import logging as Log
- import grpc,argparse,time,sys,threading
- import mllp_grpc.asr_pb2_grpc as asr_pb2_grpc
- import mllp_grpc.asr_pb2 as asr_pb2
- import mllp_grpc.asr_common_pb2 as asr_common_pb2
- import google.protobuf.empty_pb2 as empty_pb2
- from pydub import AudioSegment
- from math import ceil
- def get_data(args,sys_id):
- Log.info("Loading '%s'"%args.wav)
- sound= AudioSegment.from_wav(args.wav)
-
- if (sound.frame_rate != 16000):
- sound= sound.set_frame_rate(16000)
-
- nbuffers= ceil(len(sound)/args.bsize)
- Log.info(('c: %d r: %d rate: %d len: %d nbuf:'+
- ' %d bsize: %d')%(sound.channels,
- sound.sample_width,
- sound.frame_rate,
- len(sound),
- nbuffers,
- args.bsize))
- sended= 0
- Log.info('Sending data')
- yield asr_pb2.DecodeRequest(system_id=sys_id)
- for n in range(0,nbuffers):
- buf= sound[n*args.bsize:(n+1)*args.bsize]
- yield asr_pb2.DecodeRequest(data=buf.raw_data)
- sended+= args.bsize
- if sended>=1000:
- sended-= 1000
- time.sleep(1)
- Log.info('Transmission completed')
-
- def parse_cmdline():
- p= argparse.ArgumentParser(description='ASR GRPC client')
- p.add_argument('host',type=str,help='server host')
- p.add_argument('port',type=int,help='server port')
- p.add_argument('wav',type=str,help='input 1 channel wav at 16KHz')
- p.add_argument('--bsize',type=int,default=250,
- help='buffer size')
- args= p.parse_args()
- return args
- def run(args):
- addr= '%s:%d'%(args.host,args.port)
- with grpc.insecure_channel(addr) as channel:
- stub= asr_pb2_grpc.ASRStub(channel)
- for info in stub.GetSystemsInfo(empty_pb2.Empty()):
- print(info)
- print_host= True
- for o in stub.Decode(get_data(args,1)):
- if print_host:
- print_host= False
- print(o.host_info)
- if o.status.code!=asr_common_pb2.DecodeResponse.Status.Code.OK:
- print(o)
- elif o.hyp_novar!='':
- sys.stdout.write(o.hyp_novar+' ')
- sys.stdout.flush()
- sys.stdout.write('\n')
- sys.stdout.flush()
-
- if __name__=='__main__':
- Log.basicConfig(level=Log.INFO)
- args= parse_cmdline()
- run(args)
|