Я пытаюсь написать скрипт 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 слов, поскольку иногда карманный сфинкс распознавал фоновый шум как разреженную последовательность из нескольких междометий. Однако это заняло очень много времени из-за ненужного процесса распознавания речи - для каждой записи мне нужно было только проверить, содержит ли она более 10 слов и ничего более. Насколько я понимаю из документов SpeechRecognition, класс Recognizer не содержит никаких атрибутов или методов, которые бы ограничивали количество распознаваемых слов.
Может кто-нибудь предложить лучшую идею для этого вопроса?
Заранее спасибо.