Потоковая передача Google Speech API NodeJs

Я пытался настроить службу узла для потоковой передачи звука в реальном времени в Google Speech API, но столкнулся с проблемой, которая, как мне кажется, может быть связана с аутентификацией.

Служба написана в узле с использованием Express и BinaryServer, я получаю данные без каких-либо проблем (и смог сохранить их на локальный диск, но этого фрагмента кода нет в приведенном ниже примере), но когда я пытаюсь для отправки в Google API я ничего не получаю в ответ (хотя, если я удалю keyFileName из запроса, я получаю «Ошибка: не удалось загрузить учетные данные по умолчанию», что достаточно справедливо, потому что я работаю вне GCE)

var express = require("express");
var app = express();
var port = 54180;
var BinaryServer = require('binaryjs').BinaryServer;

var server = BinaryServer({
    port: port
});

app.listen(port, function () {
    console.log('server open on port ' + port);
});

binaryServer = BinaryServer({
    port: 9001
});

binaryServer.on('connection', function (client) {
    console.log('Binary Server connection started');

    client.on('stream', function (stream, meta) {
        console.log('>>>Incoming audio stream');

        var speech = require('@google-cloud/speech')({
            projectId: 'MYPROJECT-1234'
                //keyFilename: '/config/KeyFile.json'
        });

        const request = {
            config: {
                encoding: 'LINEAR16',
                sampleRate: 16000
            },
            singleUtterance: false,
            interimResults: true
        };

        // Create a recognize stream
        const recognizeStream = speech.createRecognizeStream(request)
            .on('error', function (error) {
                console.log('Error');
                console.log(error)
            })
            .on('data', function (data) {
                console.log('Data');
                console.log(data);
            });

        // Send the microphone input to the Speech API
        stream.pipe(recognizeStream);

        stream.on('end', function () {
            fileWriter.end();
            recognizeStream.end();
            console.log('||| Audio stream ended');
        });
    });
});

Я также признаю, что это первый раз, когда я пытался повторно подключиться к другому API, так что, возможно, я напортачил с этой частью, но сообщение с учетными данными по умолчанию заставляет меня думать, что все в порядке, и оно просто отклоняет мою просьбу без объяснения причин.

Может ли кто-нибудь заметить, что я ошибаюсь?

Ваше здоровье.


person Neil Hill    schedule 06.02.2017    source источник
comment
Я тоже ищу подобное решение. Вот мой вопрос stackoverflow.com/questions/43505524/   -  person Siva Kumar    schedule 19.04.2017


Ответы (1)


См. вопрос Шива для ответа на эту проблему

NodeJS Преобразование двоичного буфера Int16Array в кодировку LINEAR16 необработанный поток для Google Speech API

Кодовый ответ, который он дал, был

Мы можем записать буфер непосредственно в распознавательный поток, созданный из GoogleSpeech, следующим образом:

const recognizer = getGoogleSpeechStreamRecognizer();

recognizer.write(int16ArrayBuffer)
person Neil Hill    schedule 23.06.2017