Я пытаюсь написать сценарий Python-3.6, который отделял бы пустые аудиозаписи .aif (т.е. содержащие только окружающий шум) от тех, которые содержат речь. Моя цель - не распознавать речевой контент - во-первых, это не английский язык, а во-вторых, он не нужен для моих целей.
Тем не менее, мне не удалось придумать ничего лучше, чем использовать SpeechRecognition с pocketsphinx для решения этой проблемы. Моя идея была довольно примитивной:
import speech_recognition as sr
r = sr.Recognizer()
emptyRecords = []
for fname in os.listdir(TESTDIR):
with sr.AudioFile(TESTDIR + fname) as source:
recorded = r.record(source)
recognized = r.recognize_sphinx(recorded)
if len(recognized) <= 10:
print("{} seems to be an empty record.".format(fname))
emptyRecords.append(fname)
То есть я попытался преобразовать записанные аудиозаписи в списки строк и разделить эти списки в соответствии с «интуитивным» порогом в 10 слов, поскольку иногда pocketsphinx распознавал фоновый шум как разреженную последовательность из нескольких междометий. Однако это заняло очень много времени из-за ненужного процесса распознавания речи - для каждой записи мне нужно было только проверить, содержит ли она больше 10 слов и не более того. Насколько я понимаю из документов SpeechRecognition, класс Recognizer не содержит никаких атрибутов или методов, которые ограничивали бы количество распознаваемых слов.
Может ли кто-нибудь предложить лучшую идею для этой проблемы?
Заранее спасибо.