Beispiel #1
0
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