我可以从 python SpeechRecognition 中的 numpy 数组进行识别吗?

Posted

技术标签:

【中文标题】我可以从 python SpeechRecognition 中的 numpy 数组进行识别吗?【英文标题】:Can I do recognition from numpy array in python SpeechRecognition? 【发布时间】:2020-05-22 18:26:32 【问题描述】:

我正在录制一个 numpy 数组 dt,然后通过如下代码将其写入 .wav:

dt = np.int16(dt/np.max(np.abs(dt)) * 32767)
scipy.io.wavfile.write("tmp.wav", samplerate, dt)

之后我阅读并通过代码识别

import speech_recognition as sr
r = sr.Recognizer()
with sr.AudioFile("tmp.wav") as source:
    audio_text = r.listen(source)
    return r.recognize_google(audio_text, language = lang)

我可以在不使用 wav 的情况下从 numpy 数组中进行识别吗?因为这需要额外的时间

【问题讨论】:

【参考方案1】:

假设这是您正在使用的模块,并且根据its documentation,您可以将任何类似文件的对象传递给AudioFile()。类文件对象是支持读写操作的对象。

您应该能够将 wav 文件的字节表示粘贴到支持这些操作的 io.BytesIO 对象中,并将其传递到您的语音识别模块中。 scipy.io.wavfile.write() 支持写入此类文件类对象。

我没有包或任何 WAV 文件来测试它,但如果这样的东西有效,请告诉我:

wav_bytes = io.BytesIO()
scipy.io.wavfile.write(wav_bytes, samplerate, dt)
with sr.AudioFile(wav_bytes) as source:
    ...

【讨论】:

我知道我应该将 numpy 数组转换为 SpeechRecognition 的某个对象,但我不知道怎么做,什么方法,哪些功能 好吧,我不会为你写代码。你有没有尝试过我的建议,使用BytesIO 它不起作用。 Scipy 仅适用于 ndarry,但here 有答案如何在 pyaudio 中播放 numpy 数组。新问题是如何在 SpeechRecognition 方法中使用 PyAudio 流 我明白你想做什么。 Numpy 数组 -> SpeechRecognition 方法。我要告诉您的是,您需要为此使用类似文件的对象,例如BytesIO。这实际上并没有写入任何文件,它都在内存中。您链接的答案做了类似的事情;他们还使用类似文件的对象。【参考方案2】:

你可以先用 AudioData 创建一个音频数据对象,这是识别器需要的类文件对象的来源:

import io
from scipy.io.wavfile import write
import speech_recognition

byte_io = io.BytesIO(bytes())
write(byte_io, sr, audio_array)
result_bytes = byte_io.read()

audio_data = speech_recognition.AudioData(result_bytes, sr, 2)
r = speech_recognition.Recognizer()
text = r.recognize_google(audio_data)

audio_array 是一维 numpy.ndarray,具有 int16 值,sr 是采样率。

【讨论】:

以上是关于我可以从 python SpeechRecognition 中的 numpy 数组进行识别吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以从 macOS 卸载 python2 吗?

我可以从 python 脚本中读取“导出”变量吗? [复制]

我可以在 python 中编写我的应用程序,然后从 C 中运行它们吗?

如何构建 Python C 扩展,以便我可以从模块中导入它

如何配置 Python 以便我可以直接从包中导入函数?

从python空闲的main方法访问变量