Google Cloud Speech API:如何获取超过1分钟的音频全文?

时间:2018-09-20 14:13:40

标签: speech-recognition speech-to-text google-speech-api

我使用Google Cloud Speech API(longrunningrecognize)成功获得了5分钟长的音频的笔录和替代品,但我没有得到这5分钟的全文,只是一个小笔录,如下所示:

{
  "name": "2340863807845687922",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata",
    "progressPercent": 100,
    "startTime": "2018-09-20T13:25:57.948053Z",
    "lastUpdateTime": "2018-09-20T13:28:18.406147Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse",
    "results": [
      {
        "alternatives": [
          {
            "transcript": "I am recording it. I think",
            "confidence": 0.9223639
          }
        ]
      },
      {
        "alternatives": [
          {
            "transcript": "these techniques properly stated",
            "confidence": 0.9190353
          }
        ]
      }
    ]
  }
}

如何获取转录产生的全文?

3 个答案:

答案 0 :(得分:0)

使用Google Speech API是一件非常痛苦的事情。除了无法翻译长文件外,他们还随机跳过转录中的大块音频。可能的解决方案是:

  1. 通过语音活动检测和 分别转录每个块
  2. 使用诸如Speechmatics之类的更合理的服务,它们将处理大文件而没有任何问题,并且准确性更高
  3. 使用像Kaldi这样的开源语音识别器。

答案 1 :(得分:0)

我成功解决了这个问题。我必须使用ffmpeg正确转换文件:

$ ffmpeg -i /home/user/audio_test.wav -ac 1 -ab 8k audio_test2.wav

***取消静音:

sox audio_test2.wav audio_no_silence4.wav silence -l 1 0.1 1% -1 2.0 1%

并修复我的sync-request.json:

{"config": {
      "encoding":"MULAW",
      "sampleRateHertz": 8000,
      "languageCode": "pt-BR",
      "enableWordTimeOffsets": false,
    "enableAutomaticPunctuation": false,
 "enableSpeakerDiarization": true,
    "useEnhanced": true,
`enter code here`"diarizationSpeakerCount":2,
 "audioChannelCount": 1},
  "audio": {
      "uri":"gs://storage/audio_no_silence4.wav"
  }
}

然后运行curl。现在它运行良好。

答案 2 :(得分:0)

Google Cloud语音转文字可提供非常准确的结果。对于某些较长的音频,它会提供记录,这些记录被分成大块,作为您观察到的替代数组。我所做的就是在我的识别配置中将MaxAlternatives设置为1,然后将Alternatives数组连接起来以获得完整的成绩单。下面给出了我在使用Google.Cloud.Speech.V1的C#中的识别配置

var config = new RecognitionConfig()


{
    Encoding = RecognitionConfig.Types.AudioEncoding.Linear16,
    //SampleRateHertz = 16000,
    LanguageCode = "en",
    EnableWordTimeOffsets = true,
    MaxAlternatives = 1
 };