长文件转录了两次(运行了两个操作)-错误

时间:2019-04-20 20:26:33

标签: javascript google-speech-api apollo-server

似乎任何长音频(> 4分钟)都会使API产生两个操作而不是一个操作。无论我在做什么(使用事件发射器模式或promises),总是这样。

结果是我的数据库有两个转录而不是一个(我什至不明白当第二个文本到达后端时,猫鼬模型是否会中断)

请帮我解决这个问题,大约两个月以来我一直在努力解决这个问题。

2019-04-20_21-18-54

环境细节
  • 操作系统:MacOS 10.14.4(18E226)
  • Node.js版本:11.2.0
  • npm版本:
  • @google-cloud/speech版本:2.3.0
重现步骤

运行代码:

async function transcribe(gcsuri, progressCB) {
  const reducerforSingleAlternative = (obj, item, index, array) => {
    item.alternatives[0].words.map(word => obj.words.push(word));
    obj.confidence += item.alternatives[0].confidence;
    obj.transcript += item.alternatives[0].transcript;
    if (index === (array.length - 1)) {
      obj.confidence /= array.length;
    }
    return obj;
  };

  process.env.GOOGLE_APPLICATION_CREDENTIALS = process.env.SPEECH_KEY;
  const speech = require('@google-cloud/speech').v1p1beta1;
  const client = new speech.SpeechClient();
  const audio = {
    uri: gcsuri,
  };
  const request = {
    audio,
    config: {
      encoding: 'OGG_OPUS',
      sampleRateHertz: 24000,
      languageCode: 'ru',
      enableSpeakerDiarization: true,
      enableWordConfidence: true,
      maxAlternatives: 1,
      enableWordTimeOffsets: true,
    },
  };

  const [operation] = await client.longRunningRecognize(request);

  operation.on('progress', (metadata, apiResponse) => {
    console.log('metadata', apiResponse);
    progressCB(metadata.progressPercent);
  });

  const [results] = await operation.promise();
  console.log('promise', typeof results, results);

  return results.results.reduce(reducerforSingleAlternative, { words: [], confidence: 0, transcript: '' });

1 个答案:

答案 0 :(得分:0)

对不起!我的错。这是我的Apollo服务器的问题,以某种方式它迫使API进行两项操作(可能与超时有关)。我已经尝试过纯粹的Node示例,并且一切正常。