在 WAV 文件上使用 Speech-to-Text API 的空响应

Empty response using Speech-to-Text API on WAV file

我有一个使用 WebRTC 从流生成的 WAV 文件。示例演示 here 能够用结果转录它,但我的代码没有这样做,因为我得到的是一个空响应。这是我的配置:

​audio = speech.RecognitionAudio(content=content)

config = speech.RecognitionConfig(
    encoding=speech.RecognitionConfig.AudioEncoding.OGG_OPUS,
    sample_rate_hertz=48000,
    language_code="es-US",
    audio_channel_count=2,
    enable_separate_recognition_per_channel=True,
    use_enhanced=True,
    model="command_and_search"
)

Download audio

我使用您提供的配置测试了您的文件,结果也为空白。我不确定 Try it demo 后端的 API 使用什么代码或版本可以让您的音频文件无缝工作。但作为解决方法,我所做的是将您的文件转换为 FLAC 并且它起作用了。

为了转换文件,我使用了 FFMPEG。您可以使用任何您拥有的音频转换器工具,只要它能正确地将其转换为 FLAC。见命令:

ffmpeg -i hola.wav hola.flac

使用转换后的文件,我将配置中的音频编码更改为 flac,效果很好。请参阅下面的代码:

def transcribe_file(speech_file):
    from google.cloud import speech
    import io

    client = speech.SpeechClient()

    with io.open(speech_file, "rb") as audio_file:
        content = audio_file.read()

    audio = speech.RecognitionAudio(content=content)
    config = speech.RecognitionConfig(
        encoding=speech.RecognitionConfig.AudioEncoding.FLAC,
        sample_rate_hertz=48000,
        audio_channel_count=2,
        language_code="en-US",
        model="command_and_search"
    )

    response = client.recognize(config=config, audio=audio)
    print(response)

    for result in response.results:
        print(u"Transcript: {}".format(result.alternatives[0].transcript))

transcribe_file("./hola.flac")

输出:

也供参考,当遇到空结果并且您已尝试optimize the audio (split into mono) and still fails. Try converting the file to FLAC as suggested by troubleshooting docs