How to Google Speech-to-Text using Blob sent from Browser to Nodejs Server

我只是一个虾纸丫 提交于 2021-02-07 06:24:27

问题


I am trying to set up a server to receive audio from a client browser using SocketIO, then process it through Google Speech-to-Text, and finally reply back to the client with the text.

Originally and ideally, I wanted to set up to function somewhat like the tool on this page: https://cloud.google.com/speech-to-text/

I tried using getUserMedia and streaming it through SocketIO-Stream, but I couldn't figure out how to 'pipe' MediaStream.

Instead, now I've decided to use MediaRecorder on the client side, and then send the data altogether as a blob(seen in this example).

I then apply toString('base64') to the blob and call google-cloud/speech's client.recognize() on the blob.

Client Side(i'm using VueJS):

        new Vue({
            el: '#app',
            data: function () {
                return ({
                    msgs: [],
                    socket: null,
                    recorder: null,
                    : []
                })
            },
            mounted: function () {
                this.socket = io.connect('localhost:3000/user');
                console.log('Connected!')
                this.socket.on('text', function (text) {
                    this.msgs.push(text)
                })
            },
            methods: {
                startRecording: function () {
                    if (this.recorder && this.recorder.state == 'recording') {
                        console.log("Stopping!")
                        this.recorder.stop()
                    } else {
                        console.log("Starting!")
                        navigator.mediaDevices.getUserMedia({ audio: true, video: false })
                            .then(this.handleSuccess);
                    }
                },
                handleSuccess: function (stream) {
                    this.recorder = new MediaRecorder(stream)
                    this.recorder.start(10000)
                    this.recorder.ondataavailable = (e) => {
                        this.chunks.push(e.data)
                        console.log(e.data)
                    }
                    this.recorder.onstop = (e) => {
                        const blob = new Blob(this.chunks, { 'type': 'audio/webm; codecs=opus' })
                        this.socket.emit('audio', blob)
                    }
                }
            }
        })

Server Side:

const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient();

const io = require('socket.io').listen(3000)
const ss = require('socket.io-stream')

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

const audio = {
    content: null
}

const config = {
    encoding: encoding,
    sampleRateHertz: sampleRateHertz,
    languageCode: languageCode,
}

async function main() {
    const [response] = await client.recognize({
        audio: audio,
        config: config
    })
    const transcription = response.results
        .map(result => result.alternatives[0].transcript)
        .join('\n');
    console.log(`Transcription: ${transcription}`);
}

io.of('/user').on('connection', function (socket) {
    console.log('Connection made!')
    socket.on('audio', function (data) {
        audio.content = data.toString('base64')
        main().catch(console.error)
    });
});




The log from the main() function in the Server side is always:

"Transcription: "

-- which is empty!

It should contain the text from the audio sent. Thank you in advance!


回答1:


Your nodejs application asks for the processing of raw audio data, recorded as an array of 16-bit signed integers ('LINEAR16') at a rate if 16k samples/sec (16000) . This sort of audio representation is known as pulse-code modulation (PCM) for reasons lost in ancient telephony lore.

But the Blob you send from your client-side code is not that. It's a media object with the content-type audio/webm; codecs=opus. That means the audio track is compressed using the Opus codec and boxed (multiplexed) in the webm (Matroska, ebml) container format. The cloud text-to-speech code tries to interpret that as raw audio data, fails, throws up its hands and returns an empty transcription string. It's analogous to trying to view a zip file in a text editor: it's just gibberish.

To get text-to-speech to work with a media object, you have to extract the PCM audio from it first. This is a notorious pain in the neck to set up on a server; you have to use ffmpeg. There's a tutorial on it in the text-to-speech documentation. The tutorial mentions scraping the audio out of video files. Your Blob is, basically, a video file with no video track in it, so the same techniques work.

But, you'll be much better off returning to your first approach, using the MediaStream browser javascript APIs. In particular, your browser code should use elements of the Web Audio API to intercept the raw PCM audio data and send it to your server or directly from your browser to text-to-speech.

Explaining all this is way beyond the scope of a StackOverflow answer. Here are some hints. How to use web audio api to get raw pcm audio?




回答2:


The Google Text-To-Speech v1p1beta1 API end point supports MP3 files now. As O.Jones says, above MediaRecorder API is a good option, but now you can just get MP3 instead of raw PCM data, I found it difficult to implement the RecordRTC library with the intention of getting raw PCM because I ran into sound quality and cross-browser issues.

My solution: I used the mimeType audio/mp3 when creating my blob as such: const blob = new Blob(chunks, { 'type' : 'audio/mp3' }); Then I converted the blob to a base64 string like in this SO example. Then when you send an api call to Google's Speech-To-Text api, you have to specify the v1p1beta1 beta endpoint, as well as set the config as I have done in the cURL request below. Note that the default sampling rate for MediaRecorder is 16000Hz. An example CURL call could be the following (you must specify your api key):

curl --location --request POST 'https://speech.googleapis.com/v1p1beta1/speech:recognize?key=yourkey' \
--header 'Content-Type: application/json' \
--data-raw '{
  "config": {
      "encoding":"MP3",
      "sampleRateHertz": 16000,
      "languageCode": "en-US"
  },
  "audio": {
      "content":"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"
  }
}'

Also, this is working for me on Chrome, Firefox and Safari, but for Safari you must enable the MediaRecorder in Develop -> Experimental Features -> Media Recorder



来源:https://stackoverflow.com/questions/56453937/how-to-google-speech-to-text-using-blob-sent-from-browser-to-nodejs-server

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!