我正在尝试使用 Google Cloud Speech-To-Text API 和 Python 在我的应用程序中实现 Speech-To-Text。我正确地得到了转录,但是响应仅包含转录和置信度,而不包含单独的单词。如果我尝试访问这些单词,我会得到一个空列表。
为了访问结果,我使用以下代码:
best_alternative = result.alternatives[0]
word = best_alternative
transcript = best_alternative.transcript
confidence = best_alternative.confidence
print(f'Transcript: {transcript}')
print(f'Confidence: {confidence:.0%}')
打印出
best_alternative.__dict__
给了我成绩单和信心,但不是文字。有什么特殊的方法可以访问成绩单中的单词还是我遗漏了什么?
更新: 最初,我是这样初始化识别配置的:
config = speech.RecognitionConfig(
encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
sample_rate_hertz=RATE,
language_code=lan_code)
streaming_config = speech.StreamingRecognitionConfig(
config=config,
interim_results=True,
enable_speaker_diarization=True)
使用此配置,返回的响应不包含单词,仅包含文字记录和置信度。然后我将配置更改为:
config = speech.RecognitionConfig()
config.sample_rate_hertz = 16000
config.language_code = 'en-US'
config.encoding = speech.RecognitionConfig.AudioEncoding.LINEAR16
config.enable_speaker_diarization = True
这最终给了我文字、文字和信心。可以使用以下方式访问这些单词:
response.results[0].alternatives[0].words[i].word
根据 Cloud Speech-to-Text API REST documentation,
speech.recognize
方法针对每个转录结果 results[]
对象沿着 SpeechRecognitionResult返回语音识别响应,而 SpeechRecognitionAlternative 检索
transcript
、confidence
、 words[]
在特定假设内。
查看 Python Google google-cloud-speech 库实现,我承认对于真正的
SpeechRecognitionAlternative()
class,我们可以发现每个识别单词的特定于单词的信息列表 WordInfo。
print("Words: {}".format(result.alternatives[0].words[0].word))
设置 RecognitionFeatures 时,您需要指定 both
enable_word_time_offsets=True
和 enable_word_confidence=True
。仅请求时间偏移,words
字段对我们来说始终为空。
来源:我在 Cloud Speech-to-Text gRPC API 中遇到了同样的问题,WordInfo 数组始终为空。问题的UPDATE部分提供的答案有点神秘,但让我们相信这是默认配置值的一些问题。
我正在研究这个问题,花了很多时间后,我意识到音频文件必须满足speech.RecognitionConfig 格式。我采用了 FFmpeg 库并根据pepe.RecognitionConfig 格式转换了我的音频文件。对话完成后,我只需将audioBytes对话的输出文件路径传递给recognitionAudio,就得到了语音转录的文本。就是这样。