Python 避免使用 speech_recognition 或 PocketSphinx 库进行文件 IO

Python avoid file IO with speech_recognition or PocketSphinx libraries

我在处理 Python 库时经常遇到问题,这些库的方法需要文件路径作为参数。当我在内存中有一些要与库函数一起使用的数据时,这是一个问题。在这些情况下我最终做的是:

  1. 写一个包含数据的临时文件。
  2. 将临时文件路径传递给库函数。
  3. 删除函数后的文件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)