语音识别 (Python):如何解决“RequestError: Bad Request”?

问题描述

我的问题

我使用 python speech recognition library by Uberi 将 .wav 音频文件转录为纯文本。但是,当我运行我的代码时 - 使用 Google 语音识别 - 我收到一个 RequestError。
对于这个(特定的)错误,我在语音识别 GitHub 上发现了一个 Opened Issue,但没有任何答案。

我该如何解决这个问题?我知道我可以尝试使用不同的引擎而不是 Google;但是看起来它们都需要一个密钥,我希望在没有密钥的情况下转录我的文件

我的代码

import speech_recognition as sr

clip = "MyFile.wav"

#Initialize recognizer class (for recognizing the speech)
r = sr.Recognizer()

# Reading Audio file as source
# listening the audio file and store in audio_text variable

with sr.AudioFile(clip) as source:
    audio_text = r.record(source)

text = r.recognize_google(audio_text)
print(text)

错误

speech_recognition.RequestError: recognition request Failed: Bad Request

RequestError

一个想法

一个可能的原因可能是我的 .wav (~ 1 GB) 的大小。稍后我将尝试使用一个小的 .wav 来运行我的代码以进行检查。

解决方法

错误请求响应状态代码

超文本传输​​协议 (HTTP) 400 错误请求响应状态代码表示服务器无法或不会处理请求,因为某些被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧、或欺骗性请求路由)。

所以这实质上意味着这不是 Google 的错,也不是您的 Uberi 库的错。它在你的尽头。你说你的 .wav 文件太大了,这正是我的想法。这些系统本质上是获取音频文件并将其分解为文本。作为客户,您发送的文件太大。这些系统也可能在某个时间点超时,导致错误 400,因为这是通过 Internet 完成的,而不是离线处理。您拥有的程序编写得非常完美,应该可以使用稍微小一些的文件来实现。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...