Ily*_*rov 9 python voice-recognition
我想编写一个自动同步未同步字幕的程序.我想到的解决方案之一就是以某种方式通过算法找到人类的语言,并将子弹进行调整.我找到的API(Google Speech API,Yandex SpeechKit)可以与服务器一起使用(对我来说不是很方便),并且(可能)做了很多不必要的工作来确定究竟说了什么,而我只需要知道某些东西已经有了有人说.
换句话说,我想给它音频文件,并得到这样的东西:
[(00:12, 00:26), (01:45, 01:49) ... , (25:21, 26:11)]
Run Code Online (Sandbox Code Playgroud)
是否有解决方案(最好是在python中)只能找到人类语音并在本地机器上运行?
webrtcvad是围绕 Google 出色的WebRTC语音活动检测 (VAD) 实现的 Python 包装器——它在正确分类人类语音方面做得最好,即使是嘈杂的音频也是如此。
要将它用于您的目的,您可以执行以下操作:
vad = webrtcvad.Vad()vad.is_speech(chunk, sample_rate)VAD 输出可能是“嘈杂的”,如果它将单个 30 毫秒的音频块分类为语音,您真的不想为此输出时间。您可能想查看过去 0.3 秒(左右)的音频,看看该时间段内 30 毫秒的块中的大部分是否被归类为语音。如果是,则输出该 0.3 秒时段的开始时间作为语音的开始。然后你做一些类似的事情来检测语音何时结束:等待 0.3 秒的音频周期,其中大部分 30 毫秒的块没有被 VAD 归类为语音——当发生这种情况时,输出结束时间作为语音结束.
您可能需要稍微调整时间以获得适合您的目的的良好结果——也许您决定需要 0.2 秒的音频,其中超过 30% 的块在触发之前被 VAD 分类为语音,以及 1.0 秒在您取消触发之前,超过 50% 的块被归类为非语音的音频。
环形缓冲区(collections.deque在 Python 中)是一种有用的数据结构,用于跟踪最后 N 个音频块及其分类。
| 归档时间: |
|
| 查看次数: |
2718 次 |
| 最近记录: |