Python:将语音与空音频记录分开

问题描述 投票:0回答:2

我正在尝试编写一个Python-3.6脚本,它将空的.aif音频记录(即仅包含环境噪声)与包含语音的记录分开。我的目的不是承认语音内容 - 首先,它不是英语,其次,它不是我的目的所需要的。

尽管如此,我还没有发明一些比使用pocketsphinx的SpeechRecognition来解决这个问题更好的东西。我的想法很原始:

        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个单词的“直观”阈值将这些列表分开,因为有时pocketphinx将背景噪声识别为几个插入的稀疏序列。然而,由于不必要的语音识别过程,这花费了很长时间 - 对于每个记录,我只需要检查它是否包含超过10个单词而不是更多。据我所知,在SpeechRecognition的文档中,Recognizer类不包含任何限制要识别的单词数量的属性或方法。

有人可以为这个问题提出更好的建议吗?

提前致谢。

python anaconda speech-recognition pocketsphinx
2个回答
1
投票

试试webrtcvad lib。设置激进模式并使用您记录的数据进行测试。

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


0
投票

你可以使用STFT(短时傅里叶变换)

获取信号中的总能量,并将其与人体声音范围(300 Hz至3000 Hz)中的能量进行比较。 (https://en.wikipedia.org/wiki/Short-time_Fourier_transform

这是一个简单的stft使用numpy和fft大小1024,你可以使用它https://github.com/JPabloVasquez/SimpleAudioTools

© www.soinside.com 2019 - 2024. All rights reserved.