用于语音检测和鉴别的开源代码

时间:2011-04-22 18:07:20

标签: speech-recognition speech

我有15个录音带,其中一个我认为包含了我祖母和我自己说话的旧录音。寻找合适地点的快速尝试并未将其提升。我不想听20个小时的磁带来找到它。该位置可能不在其中一个磁带的开头。大多数内容似乎分为三类 - 按照总长度排列,最长的是:静音,语音广播和音乐。

我计划将所有磁带转换为数字格式,然后再次查看录制内容。显而易见的方法是在我做其他事情时在后台播放它们。这对我来说太简单了,所以:是否有任何开源库或其他代码可以让我找到,以便提高复杂性和实用性:

  1. 非沉默区域
  2. 包含人类语音的区域
  3. 包含我自己演讲的地区(以及我祖母的演讲)
  4. 我更喜欢Python,Java或C.

    由于我对这个领域一无所知,因此我们不会对答案失败,提供有关搜索字词的提示。

    据我所知,我可以轻松地花20多个小时。

8 个答案:

答案 0 :(得分:14)

大多数时候你可能会节省的是演讲者的日记。这可以通过使用扬声器ID对录音进行注释来实现,然后您可以轻松地手动映射到真人。错误率通常约为记录长度的10-15%,这听起来很糟糕,但这包括检测太多扬声器并将两个ID映射到同一个人,这并不难以修复。

一个这样的好工具是SHoUT toolkit(C ++),尽管它对输入格式有点挑剔。请参阅此工具的使用情况from author。它输出语音/语音活动检测元数据和扬声器分类,这意味着你得到第1和第2点(VAD / SAD)并且有点额外,因为它注释何时是相同的扬声器在录音中有效。

另一个有用的工具是LIUM spkdiarization(Java),它基本上也是这样做的,除了我还没有花足够的精力来计算如何获取VAD元数据。它具有很好的准备使用downloadable package

通过一些编译,这应该在一个小时内完成。

答案 1 :(得分:5)

最好的选择是找到一个开源模块,进行语音识别或说话人识别(不是语音识别)。说话者识别用于识别特定说话者,而语音识别用于将说出的音频转换为文本。可能有开源扬声器识别包,您可以尝试搜索SourceForge.net之类的“说话人识别”或“语音和生物识别”。由于我自己没有使用过,我不能推荐任何东西。

如果你找不到任何东西,但你有兴趣推出自己的一个,那么有很多开源FFT库适用于任何流行的语言。该技术将是:

  • 得到一个典型的录音,你正常说话,你的祖母通常以数字形式说话,尽可能少的背景噪音
    • 在目标录音中采用每秒音频的FFT
    • 从您创建的FFT配置文件阵列中筛选出低于某个平均能量阈值的任何值,因为它们很可能是噪声
    • 通过平均输出非滤波的FFT快照来构建主FFT配置文件
    • 然后在数字化目标音频(20小时的东西)上重复上面的FFT采样技术
    • 标记目标音频文件中任何时间的FFT快照索引与您和您祖母说话的主FFT配置文件类似的任何区域。您需要使用相似性设置,这样您就不会得到太多的误报。另请注意,您可能必须将FFT频率仓比较仅限制在主FFT配置文件中具有能量的那些频率仓。否则,如果您和您祖母的目标音频包含明显的背景噪音,它将会失去相似功能。
    • 列出手动检查的时间指数列表

注意,完成此项目的小时数可能很容易超过手动收听录音的20小时。但它比打磨20小时的音频更有趣,你可以使用你将来再制作的软件。

当然,如果音频从隐私角度来看不敏感,您可以将音频试听任务外包给亚马逊的机械特克。

答案 2 :(得分:4)

您还可以尝试pyAudioAnalysis

  1. 沉默消除:
  2. from pyAudioAnalysis import audioBasicIO as aIO from pyAudioAnalysis import audioSegmentation as aS [Fs, x] = aIO.readAudioFile("data/recording1.wav") segments = aS.silenceRemoval(x, Fs, 0.020, 0.020, smoothWindow = 1.0, Weight = 0.3, plot = True)

    segments包含非静默段的端点。

    1. 分类:语音与音乐歧视:pyAudioAnalysis还包括预训练分类器,可用于将未知片段分类为语音或音乐。

答案 3 :(得分:3)

如果你熟悉java,你可以尝试通过微小的方式提供音频文件并计算一些FFT频谱。可以通过定义样本幅度的最小水平(以排除噪声)来检测沉默。为了从音乐中分离语音,可以使用时间窗的FFT频谱。语音使用一些非常不同的频段称为共振峰 - 特别是对于音乐 - 音乐在频谱中更均匀地分布。

你可能不会100%分离语音/音乐块,但应该很好地标记文件并只听有趣的部分。

http://code.compartmental.net/tools/minim/

http://en.wikipedia.org/wiki/Formant

答案 4 :(得分:2)

两个想法:

  • 查看“语音识别”字段,例如CMUSphinx
  • Audacity有一个“截断静音”工具,可能很有用。

答案 5 :(得分:2)

我之前写了一篇关于使用Windows语音识别的博客文章。我有一个关于在C#中将音频文件转换为文本的基础教程。您可以查看here

答案 6 :(得分:0)

答案 7 :(得分:-2)

尝试使用audacity + view track作为频谱图(logf)+训练你的眼睛(!)来识别语音。您需要调整时间刻度和FFT窗口。