Длинная звуковая транскрипция возвращает только периодические фрагменты в течение всего времени файла - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужно было преобразовать некоторые файлы длинных телефонных звонков в текст, поэтому я создал скрипт в Node для его обработки с помощью Google Speech to Text API (асинхронный для длинного звука) и загрузил свои файлы в Google Cloud Storage.

Возвращает мою транскрипцию без ошибок (я просто копирую и вставляю из документов Google), однако содержит только периодические фрагменты из аудиофайла.Эти фрагменты взяты из всех частей файла, поэтому он определенно разбирается до конца файла.

Я проверил, что мои аудиофайлы не были повреждены и воспроизводились должным образом.У меня заданы правильный кодек и частота дискретизации (выдает ошибки, когда этого не было), поэтому я не уверен, где происходит сбой, так как API, похоже, не обнаруживает проблем с вводом.Я также не видел ни одного упоминания в Интернете о том, чтобы кто-то еще сталкивался с этой проблемой.

(примером этой проблемы может быть то, что моя транскрипция возвращается в виде 5-секундных фрагментов каждые 30 секунд аудиофайла)

var express = require("express");
var app = express();
var request = require("request");
var async = require("async");
var fs = require('fs');
const { Storage } = require('@google-cloud/storage');
const storage = new Storage({
    projectId: 'MY-PROJECT',
    keyFilename: './gcloud-auth.json'
});
const bucketName = 'MY-BUCKET';

var speech = require('@google-cloud/speech');
const client = new speech.SpeechClient({  
    projectId: 'MY-PROJECT',
    keyFilename: './gcloud-auth.json'
});


        var gcRequest = {
            config: {
                'encoding': "LINEAR16",
                'sampleRate': 44100,
                languageCode: "en-US",
                audioChannelCount: 2,
              },
            audio: {
                uri: 'gs://MY-BUCKET/test.wav'
              },
          };

          async function translate(gcRequest, fileName) {
            // Detects speech in the audio file. This creates a recognition job that you
            // can wait for now, or get its result later.
            var [operation] = await client.longRunningRecognize(gcRequest);
            // Get a Promise representation of the final result of the job
            var [response] = await operation.promise();
            var transcription = response.results
                .map(result => result.alternatives[0].transcript)
                .join('\n');
            console.log(`Transcription: ${transcription}`);
            fs.writeFile("text/" + fileName.substr(0, fileName.indexOf('.')) + ".txt", JSON.stringify(response), function(err, data) {
                if(err){
                    console.log(err);
                    fileFail.push(fileName)
                } else{
                    console.log("Successfully Written to File.");
                }

              });

          }
          translate(gcRequest, "test.wav")


...