在节点js上使用谷歌语音将本地音频文件转录为文本时出现问题

问题描述 投票:0回答:0

我正在尝试使用 Node js 练习 google Speech to Text。 我想做的是使用 MediaRecorder 进行录音。我使用 multer 将音频上传到服务器,然后转录音频以获取文本。

问题在于,应该包含转录文本的变量实际上根本不包含任何内容。我几个小时以来一直试图找出问题的根源,但没有结果。

这是 html 和 javascript 代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <audio id="audio" controls></audio>
    <button name="record">record</button>
    <button name="stop">stop</button>

    <a id="myLink">Telecharger</a>

    <div id="transcription">Transcription: </div>

    <script>
        var btnStart = document.querySelector('button[name="record"]');
        var btnStop = document.querySelector('button[name="stop"]');
        var audio = document.querySelector('#audio');

        var myLink = document.getElementById('myLink');

        btnStart.addEventListener('click', async () => {
            let stream = await navigator.mediaDevices.getUserMedia({audio: true, video: false});
            let mediaRecorder = new MediaRecorder(stream);
            mediaRecorder.start();
            let chunks = [];
            mediaRecorder.ondataavailable = (e) => {
                 chunks.push(e.data);
            }
            //function to catch error
            mediaRecorder.onerror = (e) => {
                 alert(e.error);
            }

            mediaRecorder.onstop = async (e) => {
                 let blod = new Blob(chunks, { type: 'audio/wav' });

                 const formData = new FormData();
                 formData.append('audio', blod);

                 // Envoi du fichier audio au serveur Node.js
                const response = await fetch('/transcribe', {
                    method: 'POST',
                    body: formData,
                });

                let transcription = await response.text();
                transcriptionDiv.innerHTML = `Transcription: ${transcription}`;
            }
            btnStop.addEventListener('click',()=>{
                 mediaRecorder.stop();
            })
        })
    </script>
</body>
</html>

我使用multrer上传:

const multer = require('multer');


const storage = multer.diskStorage({

  destination: (req, file, callback) => {

    callback(null, 'uploads');

  },

  filename: (req, file, callback) => {

    const name = 'test-speech.wav';

    callback(null, name);

  }

});

module.exports = multer({storage: storage}).single('audio');

和节点js代码:

app.post('/transcribe', upload, async (req, res) => {

    try {

            const config = {
                encoding: 'LINEAR16',
                sampleRateHertz: 44100,
                languageCode: 'fr-FR', 
            };

            const audio = {
                content: fs.readFileSync('uploads/test-speech.wav').toString('base64'),
            };

            const request = {
                audio: audio,
                config: config,
            };


            const [response] = await client.recognize(request);
            const transcription = response.results.map(result => result.alternatives[0].transcript).join('\n');

            console.log('Transcription : ', transcription);

            res.send(transcription);

        } catch (err) {

            console.error('Error while transcribing :', err);

            res.status(500).send('Error while transcribing');
        }

});

正如我上面所说,变量

transcription
不包含任何值。有人可以帮助我吗?

javascript node.js speech-to-text web-mediarecorder
© www.soinside.com 2019 - 2024. All rights reserved.