如果您在使用 Speech-to-Text 时遇到问题,请查阅以下实用的问题排查步骤。
无法通过针对 Speech-to-Text 的身份验证
您可能会收到一条错误消息,指出您的“应用默认凭据”不可用,或者您可能想了解如何获取 API 密钥以在调用 Speech-to-Text 时使用。
Speech-to-Text 使用应用默认凭据 (ADC) 进行身份验证。
ADC 凭据必须在您调用 Speech-to-Text API 的上下文中可用。例如,如果您在终端中设置 ADC,但在 IDE 的调试程序中运行代码,则代码的执行上下文可能无权访问凭据。在这种情况下,对 Speech-to-Text 的请求可能会失败。
如需了解如何向 ADC 提供凭据,请参阅设置应用默认凭据。
Speech-to-Text 返回一个空响应
Speech-to-Text 可能返回空响应的原因有很多。问题的根源可能是 RecognitionConfig
或音频本身。
RecognitionConfig
问题排查
RecognitionConfig
对象(或 StreamingRecognitionConfig
)是 Speech-to-Text 识别请求的一部分。为了正确执行转录,必须设置两个主要类别的字段:
- 音频配置。
- 模型和语言。
空响应(例如,您收到空的 {}
JSON 响应)的最常见原因之一是提供有关音频元数据的信息错误。如果音频配置字段未正确设置,转录很可能失败,识别模型将返回空的结果。
音频配置包含所提供音频的元数据。您可以使用 ffprobe
命令(它是 FFMPEG 的一部分)来获取音频文件的元数据。
以下示例演示了如何使用 ffprobe 来获取 https://storage.googleapis.com/cloud-samples-tests/speech/commercial_mono.wav 的元数据。
$ ffprobe commercial_mono.wav
[...]
Input #0, wav, from 'commercial_mono.wav':
Duration: 00:00:35.75, bitrate: 128 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, 1 channels, s16, 128 kb/s
通过使用上述命令,我们可以看到该文件包含:
- sample_rate_hertz:8000
- 渠道:1
- 编码 LINEAR16 (s16)
您可以在 RecognitionConfig
中使用此信息。
空响应的其他与音频相关的原因可能与音频编码有关。以下是一些其他工具和可以尝试的操作:
播放文件并听一听输出。音频是否清晰,语音是否易于理解?
如需播放文件,您可以使用 SoX (Sound eXchange)
play
命令。下面显示了基于不同音频编码的几个示例。FLAC 文件含有文件头,用于指示采样率、编码类型和声道数量。此类文件可通过以下命令进行播放:
play audio.flac
LINEAR16 文件不含文件头。要播放此类文件,您必须指定采样率、编码类型和声道数量。LINEAR16 编码必须是 16 位带符号整数,小端字节序。
play --channels=1 --bits=16 --rate=16000 --encoding=signed-integer \ --endian=little audio.raw
MULAW 文件也不含文件头,通常使用较低的采样率。
play --channels=1 --rate=8000 --encoding=u-law audio.raw
检查数据的音频编码是否与您在
RecognitionConfig
中发送的参数相匹配。例如,如果您的请求指定了"encoding":"FLAC"
和"sampleRateHertz":16000
,则 SoXplay
命令列出的音频数据参数应与这些参数匹配,如下所示:play audio.flac
列出的参数应为:
Encoding: FLAC Channels: 1 @ 16-bit Sampleratehertz: 16000Hz
如果 SoX 列表显示的
Sampleratehertz
并非16000Hz
,请更改InitialRecognizeRequest
中的"sampleRateHertz"
以便匹配。如果Encoding
不是FLAC
或Channels
不是1 @ 16-bit
,则不能直接使用此文件,需要将其转换为兼容的编码(请参阅下一步)。如果音频文件不是 FLAC 编码,请尝试使用 SoX 将其转换为 FLAC,然后重复上述步骤播放该文件并验证编码、sampleRateHertz 和声道数。以下是将各种音频文件格式转换为 FLAC 编码的一些示例。
sox audio.wav --channels=1 --bits=16 audio.flac sox audio.ogg --channels=1 --bits=16 audio.flac sox audio.au --channels=1 --bits=16 audio.flac sox audio.aiff --channels=1 --bits=16 audio.flac
要将原始文件转换为 FLAC,您需要知道该文件的音频编码。例如,要将 16000Hz 的立体声 16 位带符号小端字节序转换为 FLAC,可使用以下代码:
sox --channels=2 --bits=16 --rate=16000 --encoding=signed-integer \ --endian=little audio.raw --channels=1 --bits=16 audio.flac
模型和语言配置
选择正确的模型是获得高质量转录结果的关键。Speech-to-Text 提供了多种模型,这些模型已针对不同的使用场景进行了调整,必须选择最适合您的音频的模型。例如,某些模型(如 latest_short
和 command_and_search
)是短形式模型,这意味着更适合简短的音频和提示。这些模型可能会在检测到静默期后立即返回结果。另一方面,长模型(例如 latest_short, phone_call, video and default
)更适合较长的音频,并且将静默解读音频结尾的敏感度略低。
如果识别结束得太突然或未快速返回,您可能需要进行检查并用其他模型进行试验,以确定是否可以获得更好的转录质量。您可以使用语音界面试验多个模型。
语音识别的意外结果
如果 Speech-to-Text 返回的结果不符合您的预期,请执行以下操作: