通过 Google Cloud Speech API 获取每个转录单词的时间戳?

Posted

技术标签:

【中文标题】通过 Google Cloud Speech API 获取每个转录单词的时间戳?【英文标题】:Getting timestamps for each transcribed word through Google Cloud Speech API? 【发布时间】:2018-03-21 19:27:27 【问题描述】:

我希望通过 Google Cloud Speech API 转录音频文件。这个简单的脚本以 wav 作为输入并以相当高的准确度对其进行转录。

import os
import sys
import speech_recognition as sr

with open("~/Documents/speech-to-text/speech2textgoogleapi.json") as f:
  GOOGLE_CLOUD_SPEECH_CREDENTIALS = f.read()
name = sys.argv[1] # wav file
r = sr.Recognizer()
all_text = []
with sr.AudioFile(name) as source:
  audio = r.record(source)
  # Transcribe audio file
  text = r.recognize_google_cloud(audio, credentials_json=GOOGLE_CLOUD_SPEECH_CREDENTIALS)
all_text.append(text)
with open("~/Documents/speech-to-text/transcript.txt", "w") as f:
  f.write(str(all_text))

如何使用 API 从语音音频中提取其他有意义的信息?具体来说,我希望获得每个单词的时间戳,但其他信息(例如音高、幅度、说话者识别等)将非常受欢迎。提前致谢!

【问题讨论】:

【参考方案1】:

实际上在

中的 Speech API 中有一个关于如何执行此操作的示例

Using Time offsets(TimeStamps):

Time offset (timestamp) 值可以包含在响应文本中 为您的认可请求。时间偏移值显示开始和 在提供的音频中识别的每个口语单词的结尾。一种 时间偏移值表示从已过去的时间量 音频的开头,以 100 毫秒为增量。

时间偏移对于分析较长的音频文件特别有用, 您可能需要在已识别的单词中搜索特定单词 文本并在原始音频中找到(搜索)。时间偏移是 支持我们所有的识别方法:识别, 流式识别和长时间运行识别。请参阅下面的示例 的长期运行识别.....

这是 Python 的代码示例:

def transcribe_gcs_with_word_time_offsets(gcs_uri):
    """Transcribe the given audio file asynchronously and output the word time
    offsets."""
    from google.cloud import speech
    from google.cloud.speech import enums
    from google.cloud.speech import types
    client = speech.SpeechClient()

    audio = types.RecognitionAudio(uri=gcs_uri)
    config = types.RecognitionConfig(
        encoding=enums.RecognitionConfig.AudioEncoding.FLAC,
        sample_rate_hertz=16000,
        language_code='en-US',
        enable_word_time_offsets=True)

    operation = client.long_running_recognize(config, audio)

    print('Waiting for operation to complete...')
    result = operation.result(timeout=90)

    for result in result.results:
        alternative = result.alternatives[0]
        print('Transcript: '.format(alternative.transcript))
        print('Confidence: '.format(alternative.confidence))

        for word_info in alternative.words:
            word = word_info.word
            start_time = word_info.start_time
            end_time = word_info.end_time
            print('Word: , start_time: , end_time: '.format(
                word,
                start_time.seconds + start_time.nanos * 1e-9,
                end_time.seconds + end_time.nanos * 1e-9))

希望这会有所帮助。

【讨论】:

以上是关于通过 Google Cloud Speech API 获取每个转录单词的时间戳?的主要内容,如果未能解决你的问题,请参考以下文章

使用来自 Electron 的 gRPC 实时转录 Google Cloud Speech API

使用 C++ 的 Google Cloud Speech API,第一步是啥?

如何使用 Google Speech API 访问 Google Cloud Storage 中的文件?

Google Cloud Speech API 中转录的文件大小

如何从 Google Cloud text-to-speech API 获取 SSML <mark> 时间戳

如何从 Google Cloud API Text-to-Speech 获取音素