Python 避免使用 speech_recognition 或 PocketSphinx 库进行文件 IO
Python avoid file IO with speech_recognition or PocketSphinx libraries
我在处理 Python 库时经常遇到问题,这些库的方法需要文件路径作为参数。当我在内存中有一些要与库函数一起使用的数据时,这是一个问题。在这些情况下我最终做的是:
- 写一个包含数据的临时文件。
- 将临时文件路径传递给库函数。
- 删除函数后的文件returns。
这工作得很好,但是,对于时间敏感的应用程序,涉及写入和读取临时文件的文件 IO 是一个交易破坏者。
有没有人能解决这个问题?我认为这里没有适合所有解决方案的单一尺寸,但我不想做任何假设。但是,让我描述一下我当前的用例,希望有人能够具体帮助我。
我正在使用 speech_recognition
库将大量音频文件转换为文本。我有二进制形式的音频文件数据。这是我的代码:
from os import path, remove
from scipy.io.wavfile import write
import speech_recognition as sr
audio_list = ... # get the audio
text_list = []
for item in audio_list:
temp_name = 'temp.wav'
# create temporary file, writing it as a wave for speech_recognition to read
write(temp_name, rate, item)
audio_file = path.join(path.dirname(path.realpath('__file__')), temp_name)
recognizer = sr.Recognizer()
# this is where I need to have the path to the file
with sr.AudioFile(audio_file) as source:
audio = recognizer.record(source)
text = recognizer.recognize_sphinx(audio)
text_list.append(text)
remove(temp_name)
speech_recognition
库使用 PocketSphinx
作为后端。 PocketSphinx
有它自己的 Python API 但我也没有运气。
谁能帮我减少这个文件的 IO?
sr.AudioFile
构造函数也接受一个 'file-like object',SciPy 应该可以写入一个。在您的情况下,听起来 io.BytesIO
很合适。它是一个围绕 in-memory 缓冲区构建的 file-like 对象。
制作一个,然后像使用任何其他 file-like 对象一样使用它:
import io
...
buffer = io.BytesIO()
...
write(buffer, rate, item)
...
with sr.AudioFile(buffer) as source:
audio = recognizer.record(source)
我在处理 Python 库时经常遇到问题,这些库的方法需要文件路径作为参数。当我在内存中有一些要与库函数一起使用的数据时,这是一个问题。在这些情况下我最终做的是:
- 写一个包含数据的临时文件。
- 将临时文件路径传递给库函数。
- 删除函数后的文件returns。
这工作得很好,但是,对于时间敏感的应用程序,涉及写入和读取临时文件的文件 IO 是一个交易破坏者。
有没有人能解决这个问题?我认为这里没有适合所有解决方案的单一尺寸,但我不想做任何假设。但是,让我描述一下我当前的用例,希望有人能够具体帮助我。
我正在使用 speech_recognition
库将大量音频文件转换为文本。我有二进制形式的音频文件数据。这是我的代码:
from os import path, remove
from scipy.io.wavfile import write
import speech_recognition as sr
audio_list = ... # get the audio
text_list = []
for item in audio_list:
temp_name = 'temp.wav'
# create temporary file, writing it as a wave for speech_recognition to read
write(temp_name, rate, item)
audio_file = path.join(path.dirname(path.realpath('__file__')), temp_name)
recognizer = sr.Recognizer()
# this is where I need to have the path to the file
with sr.AudioFile(audio_file) as source:
audio = recognizer.record(source)
text = recognizer.recognize_sphinx(audio)
text_list.append(text)
remove(temp_name)
speech_recognition
库使用 PocketSphinx
作为后端。 PocketSphinx
有它自己的 Python API 但我也没有运气。
谁能帮我减少这个文件的 IO?
sr.AudioFile
构造函数也接受一个 'file-like object',SciPy 应该可以写入一个。在您的情况下,听起来 io.BytesIO
很合适。它是一个围绕 in-memory 缓冲区构建的 file-like 对象。
制作一个,然后像使用任何其他 file-like 对象一样使用它:
import io
...
buffer = io.BytesIO()
...
write(buffer, rate, item)
...
with sr.AudioFile(buffer) as source:
audio = recognizer.record(source)