У меня часто возникает проблема при работе с библиотеками Python, у которых есть методы, требующие пути к файлам в качестве параметров. Это проблема, когда у меня есть некоторые данные в памяти, которые я хочу использовать с библиотечной функцией. В этих случаях я делаю следующее:Python избежать файла IO с помощью речевого распознавания или библиотек PocketSphinx
- напишите временный файл, содержащий данные.
- передать временный путь к библиотечной функции.
- удалите файл после возвращения функции.
Это работает достаточно хорошо, однако для приложений, чувствительных к времени, файл 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
имеет свой собственный API Python, но мне тоже не удавалось.
Может ли кто-нибудь помочь мне уменьшить этот файл IO?
Awesome, что работал. Огромное спасибо. Интересно, что это не сильно ускорило мой код - я собираюсь сделать некоторые профилирования, чтобы увидеть, где узкое место. Но спасибо независимо. –
Добро пожаловать! Возможно, вашей программе не пришлось ждать физического диска вообще, из-за кэширования диска и т. Д., Но немного чище, чтобы в любом случае не посыпать временные файлы. –
Да, я не думал об этом. Но да, я использую ваш код именно по этой причине. Это также делает код намного проще для многопоточных, поскольку io.BytesIO является потокобезопасным. Больше не беспокоиться о блокировках файлов. –