如何执行实时语音识别Google Cloud语音转文字

时间:2019-01-31 06:12:03

标签: node.js speech-recognition google-speech-api sox nodejs-stream

我正在尝试从扬声器中转录音频
我正在将声音从扬声器传递到node.js文件(https://askubuntu.com/a/850174

parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor --rate=16000 --channels=1 | node transcribe.js

这是我的transcribe.js

const speech = require('@google-cloud/speech');

const client = new speech.SpeechClient();

const encoding = 'LINEAR16';
const sampleRateHertz = 16000;
const languageCode = 'en-US';

const request = {
    config: {
        encoding: encoding,
        sampleRateHertz: sampleRateHertz,
        languageCode: languageCode,
    },
    interimResults: false, // If you want interim results, set this to true
};

const recognizeStream = client
    .streamingRecognize(request)
    .on('error', console.error)
    .on('data', data => {
        console.log(
            `Transcription: ${data.results[0].alternatives[0].transcript}`
        );
    });

process.stdin.pipe(recognizeStream);

但是Google Cloud语音转文本在大约1分钟内对流识别有限制。因此出现错误“超出最大允许流持续时间65秒。”

我如何将流分割成无声的分割器或30秒的持续时间?

1 个答案:

答案 0 :(得分:1)

我们可以将音频传输到sox实用程序,以便以0.3秒的持续时间且不超过55秒的静默方式对其进行分割

sox -t raw -r 16k -e signed -b 16 -c 1 - ./chunks/output.wav  silence 1 0.3 0.1% 1 0.3 0.1% trim 0 55 : newfile : restart

现在,我们可以查看块目录中的新文件,并将其流式传输到Google Cloud语音到文本API