当前位置: 首页 > 知识库问答 >
问题:

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

田俊爽
2023-03-14

我希望通过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个答案

常雪风
2023-03-14

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

使用时间偏移(时间戳):

时间偏移(时间戳)值可以包含在响应文本中,用于识别请求。时间偏移值显示所提供音频中识别的每个口语单词的开头和结尾。时间偏移值表示从音频开始经过的时间量,以100ms为增量。

时间偏移对于分析较长的音频文件特别有用,您可能需要在已识别的文本中搜索特定单词,并在原始音频中定位(seek)。我们所有的识别方法都支持时间偏移:recognize、streamingrecognize和longrunningrecognize。有关LongRunningRecognite…..的示例,请参见下文。。。。。

这是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))

希望这有帮助。

 类似资料:
  • 问题内容: 上面是我的查询,我想获取一个人每天的记录。该记录应具有当天的最小日期时间。我需要该日期时间的完整记录 我的预期输出在这里 我尝试使用 但是对于“ t1”,我得到id = 1和第一行的输入日期。 请帮帮我。如果重复,则提供链接。 问题答案: 演示

  • 问题内容: 我在表中有以下几列: SCORE_PERSON_ID是一个变量。我需要对每个SCORE_PERSON_ID的SCORE_VOTE求和。 您能建议一个好的方法吗? 问题答案: 您需要一个和聚合函数,例如或

  • 可以使用Google的语音识别API来获取音频文件(WAV、MP3等)的转录。)通过请求 示例:我在WAV文件中说过“一二三五”。谷歌API给了我这个: 问:有没有可能得到每个单词说出的时间(以秒为单位)? 以我的例子: 即单词一已经在时间00:00:00.23和00:00:00.80之间说了, 单词二已经在时间00:00:01.03和00:00:01.45之间说了(以秒为单位)。 PS:寻找支持

  • 问题内容: 因此,我试图生成的是特定时间范围内的所有小时。 因此,鉴于范围从上午11点到下午2:00,我将得到: 我试图避免必须在商店每隔特定的小时存储一次,而只存储范围(我需要将小时数与其他时间进行比较) 谢谢 问题答案: 如果您有数字表(如果没有,请单击链接以创建一个表)… 如果这是专门的,则可以创建仅包含24个值的小时表。

  • 问题内容: 我正在尝试反转每个句子的第二个单词 如果给定的字符串是: 所需的输出应为: 我当前的输出是: 我无法达到所需的输出。不知道我在做什么错 这是我的代码 问题答案: 您可以解决各种问题的简便方法!只需使用一个将指示 偶数 或 奇数 位置的变量,更准确地说是任何单词都将被反转! 查看我在您的代码中进行的以下修改,仅添加了三行: 输入项 我叫xyz 输出: 我的eman是zyx

  • 问题内容: 我正在尝试使程序执行以下操作: 假设我们有一个被设置为的被叫。我想输出给用户,每个单词的第一个字符。我尝试使用该方法,但是没有成功。 我的代码: 我试图检测是否有空格,那么我可以简单地获取下一个索引。谁能告诉我我在做什么错? 问题答案: 尝试按(空格)分割,然后获取每个单词的(第一个字符)并按如下方式打印: