Node.js 中的 Google Speech-to-Text 抛出错误“{ 处的文件不存在,或者不是文件ENOENT:没有这样的文件或目录,lstat”

问题描述

我正在尝试在我的网络应用中实现 Google 的 Speech to Text 转录,但遇到了很多麻烦。

我决定从一楼开始,看看我是否可以至少为 node.js 实现他们的快速入门示例。在下面的两个示例中(一个旨在转录本地音频文件,另一个旨在转录 uri 中的音频),我最终在控制台中遇到了完全相同的错误

(node:4836) UnhandledPromiseRejectionWarning:错误:{ 处的文件不存在,或者不是文件。 ENOENT: 没有这样的文件或目录,lstat '[项目文件夹路径]/{'

URI 示例(基于 this

//Use dotenv to Pull in my Credentials
require('dotenv').config();


// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');

// Creates a client
const client = new speech.SpeechClient();

async function quickstart() {
  // The path to the remote LINEAR16 file
  const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw';

  // The audio file's encoding,sample rate in hertz,and BCP-47 language code
  const audio = {
    uri: gcsUri,};
  const config = {
    encoding: 'LINEAR16',sampleRateHertz: 16000,languageCode: 'en-US',};
  const request = {
    audio: audio,config: config,};

  // Detects speech in the audio file
  const [response] = await client.recognize(request);
  const transcription = response.results
    .map(result => result.alternatives[0].transcript)
    .join('\n');
  console.log(`Transcription: ${transcription}`);
}
quickstart();

本地音频文件示例(基于this

require('dotenv').config();

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

async function main() {
    const client = new speech.SpeechClient();
    const filename = './resources/Sample.mp3';

    const file = fs.readFileSync(filename);
    const audioBytes = file.toString('base64');

    const audio = {
        content: audioBytes
    };
    const config = {
        encoding: 'LINEAR16',languageCode: 'en-US'
    };
    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}`);
}
main().catch(console.error);

在这里错过了什么?提前致谢!

解决方法

好的!我想通了...

事实证明,在我的 .env 中,我将 GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为 json 服务帐户密钥的复制和粘贴内容,而不是将其设置为 json 文件的路径。

将其设置为密钥的路径解决了我的问题