Python: выделение речи из пустых аудиозаписей - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь написать скрипт 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 не содержит никаких атрибутов или методов, которые бы ограничивали количество распознаваемых слов.

Может кто-нибудь предложить лучшую идею для этого вопроса?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Вы можете использовать STFT (кратковременное преобразование Фурье)

Получение полной энергии в сигнале и сравнение ее с энергией, которая находится в голосовом диапазоне человека (от 300 Гц до 3000 Гц). (https://en.wikipedia.org/wiki/Short-time_Fourier_transform)

Вот простой stft с использованием numpy и размером fft 1024, вы можете использовать его https://github.com/JPabloVasquez/SimpleAudioTools

0 голосов
/ 02 сентября 2018

Попробуйте webrtcvad lib. Установите режим агрессивности и проверьте записанные данные.

https://pypi.org/project/webrtcvad/

...