2011-04-22 122 views
24

我有15个录音带,其中一个我认为包含我祖母的旧录音和我自己说话。快速尝试找到合适的地方并没有解决问题。我不想听20小时的磁带找到它。该位置可能不在其中一个磁带的开始处。大部分内容似乎分为三类 - 按总长度排列,最长排列:沉默,语音广播和音乐。语音检测和识别的开放源代码

我打算将所有磁带转换为数字格式,然后再次查看录制内容。显而易见的方法是在我做其他事情的同时在后台播放它们。这是迄今为止对我来说太简单,所以:是否有任何开放源代码库,或其他代码,这将让我发现,在日益复杂和实用性的顺序:

  1. 非静默区含
  2. 地区人类的语言包含我自己的语音(和我的祖母的)

我的选择是对的Python,Java或C.

未按答案

  • 地区,H因为我对这个领域一无所知。

    据我所知,我可以轻松地在此花费超过20个小时。

  • +9

    +1“我明白,我可以很容易地花费超过20小时。“ – 2011-04-22 18:19:07

    +1

    你的最后一行在这里指的是[漫画](https://xkcd.com/1319/)。 – jjj 2017-07-12 18:18:18

    回答

    2

    两个想法:

    • 看在“语音识别”领域,例如CMUSphinx
    • Audacity有一个“沉默截断”工具,可能是有用的。
    3

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

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

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

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

    5

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

    如果你找不到任何东西,但你有兴趣滚动你自己的东西,那么对于任何流行语言,都有大量的开源FFT库。该技术将是:

    • 得到你一个典型的记录正常说话,你的祖母以数字形式通常讲的东西用尽可能少的背景噪声尽可能
      • 以音频的每一秒左右的FFT在目标记录
      • 从已创建的FFT谱的阵列,滤除任何低于某一平均能量阈值,因为它们是最有可能的噪声
      • 生成通过平均出非滤波FFT快照
      • 主FFT分布
      • 然后重复FFT采样技术上面的数字化目标音频(20个小时的东西)
      • 国旗在目标音频文件中的任何区域,其中在任何时间指数的FFT快照类似,你的主人FFT分布为您和您的奶奶在说话。你将需要玩相似的设置,以免得到太多的误报。另请注意,您可能不得不将FFT频率箱比较限制为只有主FFT分析中具有能量的那些频率箱。否则,如果你和你的祖母谈话的目标音频含有明显的背景噪音,它会抛弃你的相似性功能。
      • 炮制出的人工检查

    注意,小时数来完成这个项目很容易超过20小时听录音手动的时间索引列表。但与通过20小时的音频打磨相比,它会更有趣,并且您可以使用未来再次构建的软件。

    当然,如果声音是不是从隐私角度来看敏感,你可以外包的音频试听任务,像亚马逊的Mechanical Turk。

    +2

    谢谢你的搜索条件 - MARF有一个发言者识别模块http://marf.sourceforge.net/ – 2011-04-22 19:59:11

    2

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

    +0

    它看起来像Wordpress在某些时候乱码我的代码块。我会在本周末尝试修复它们。重新阅读它,如果你想推出自己的语音处理器,我认为这是一个很好的开始。 – mrtsherman 2011-04-22 18:46:12

    +0

    也许奇怪的是,使用语音识别的方法并没有发生在我身上,所以谢谢你触发这个想法,即使你的答案建议使用不是开源的软件(进行快速搜索,似乎没有System.Speech的单声道实现)。 – 2011-04-22 19:25:06

    +0

    这太糟糕了。我希望我有一个开源的替代品! – mrtsherman 2011-04-22 19:48:16

    -2

    尝试的勇气+视图轨迹为频谱(logf)+训练你的眼睛(!)来识别语音。您需要调整时间刻度和FFT窗口。

    +0

    如果你有一个巨大的显示器和大量的屏幕空间,这并不是一个坏建议;和一个愿意盯着屏幕的人。 – Kickaha 2017-11-15 09:16:51

    14

    你大概可以节省大部分时间的是扬声器diarization。这可以通过使用发言者ID注释记录来实现,然后您可以用很少的努力手动映射到真实的人。错误率通常约为记录长度的10-15%,听起来很糟糕,但这包括检测太多扬声器并将两个ID映射到同一个人,这并不难以修补。

    这样一个很好的工具是SHoUT toolkit(C++),即使它是一个有点挑剔的输入格式。请参阅此工具的用法from author。它输出语音/语音活动检测元数据和扬声器diarization,这意味着你得到第一和第二点(VAD/SAD)和一些额外的,因为它诠释的时候是一样的扬声器活跃在录音。

    另一个有用的工具是LIUM spkdiarization(Java),它基本上是一样的,除了我还没有投入足够的精力去研究如何获得VAD元数据。它具有一个很好的准备使用downloadable package

    随着编制的一点点,这应该在一个小时内。

    4

    您也可以尝试pyAudioAnalysis到:

    1. 沉默去除:

    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包含非无声段的终点。

  • 分类:语音VS音乐歧视:pyAudioAnalysis还包括预训练的分类器,其可以被用于未知段以语音或音乐进行分类。
  • +0

    文件“/Library/Python/2.7/site-packages/pyAudioAnalysis/audioFeatureExtraction.py”,第572行,在stFeatureExtraction curFV [2] = stEnergyEntropy(x)#短期能量熵 文件“/ Library/Python /2.7/site-packages/pyAudioAnalysis/audioFeatureExtraction.py“,第48行,在stEnergyEntropy中 subWindows = frame.reshape(subWinLength,numOfShortBlocks,order ='F')。copy() ValueError:无法将大小为1920的数组重新组合形状(96,10) – baswaraj 2017-04-09 12:22:46

    +0

    无法提取功能 – baswaraj 2017-04-09 12:23:08