我可以从 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 数组进行识别吗?的主要内容,如果未能解决你的问题,请参考以下文章
我可以从 python 脚本中读取“导出”变量吗? [复制]