async def recognize(websocket, path): rec = None audio = b'' sample_rate = model.GetSampleFrequecy() # get default sample frequency metadata = worker.METADATA while True: try: data = await websocket.recv() # Load configuration if provided if isinstance(data, str) and 'config' in data: jobj = json.loads(data)['config'] if 'sample_rate' in jobj: sample_rate = float(jobj['sample_rate']) if 'metadata' in jobj: metadata = bool(jobj['metadata']) continue # Create the recognizer, word list is temporary disabled since not every model supports it if not rec: rec = KaldiRecognizer(model, spkModel, sample_rate, worker.ONLINE) if not isinstance(data, str): audio = audio + data response, stop = process_chunk(rec, data) await websocket.send(response) if stop: if metadata: obj = rec.GetMetadata() data = json.loads(obj) response = worker.process_metadata(data, audio) await websocket.send(response) break except Exception as e: break
def transcribe(): try: worker.log.info('[%s] New user entry on /transcribe' % (strftime("%d/%b/%d %H:%M:%S", gmtime()))) is_metadata = False # get response content type if request.headers.get('accept').lower() == 'application/json': is_metadata = True elif request.headers.get('accept').lower() == 'text/plain': is_metadata = False else: raise ValueError('Not accepted header') # get input file if 'file' in request.files.keys(): file = request.files['file'] worker.getAudio(file) rec = KaldiRecognizer(model, spkModel, worker.rate, worker.ONLINE) rec.AcceptWaveform(worker.data) data_ = rec.FinalResult() confidence = rec.uttConfidence() if is_metadata: data_ = rec.GetMetadata() data = worker.get_response(data_, confidence, is_metadata) worker.clean() else: raise ValueError('No audio file was uploaded') return data, 200 except ValueError as error: return str(error), 400 except Exception as e: worker.log.error(e) return 'Server Error', 500