原文:http://oxygene.sk/lukas/2011/01/how-does-chromaprint-work/
- 图片在此算法中扮演了一个很重要的角色,当人们“看到”音频时,它通常都是形如下面的波形图:
- 但是这种图对分析起来没有什么太大用,更有效的一种表现形式是声谱图,它描述了特定频率的强度随着时间的变化:
可以通过把原始视频切割为许多重叠的帧并在其上应用傅立叶变换(或者快速傅立叶变换)来得到这种图片。许多声纹识别算法都是利用这种图片来工作的,有的是比较频率和时间的不同,有的则是寻找波峰。
- Chromaprint则更近一步将频率转换为音符来处理。Chromaprint只关心音符,而不关注八度音,因此结果就是12音域,每个音符对应一个音域。这种信息被称为“Chroma特征”(其实就是一个12维的特征向量)。再经过一些过滤和标准化,最终会得到下面这种样式的图片:
- 既然有了音频的表现形式,那么比较这类图片并计算其相似度也不是太困难的事了,但是如果我们想在数据库中搜索它们,我们则需要压缩它们,也就是需要一个更为紧凑的形式。Chromaprint的方式是在Pairwise Boosted Audio Fingerprint这篇论文中提到的方法上修改的。
- 然后你可以想象你拥有一个16×12像素的滑动窗口从左到右来滑过整个图片,每次只滑动一个像素,这样就得到了许多子图。针对每一个子图应用预定义好的16个过滤器来捕获滑过的音符和时间的强度的差别。过滤器就是计算子图的灰度图的特定区域的和,然后比较两个和。有6中不同的区域
通过使用上面这种类似于掩码的图片,把它置于子图任何一个位置,然后计算黑色和白色区域的和,再同另一个和相减,结果是一个单精度实数。每个过滤器都有3个系数,最终结果会是一个0到3之间的整型数。每个过滤器的系数都是通过机器学习算法在音频文件的训练集上训练得到的。
- 现在我们有16个过滤器,每个过滤器都可以把结果编码为2位。我们把这些结果组合在一起,得到一个32位的整型数字。
- 如果对所有滑动窗口滑过的子图都应用上述办法,我们就得到了整个音频的声纹了。识别声纹最简单的办法就是针对声纹计算位错误率。
实验结果:
Heaven FLAC
Heaven 32kbps MP3
Differences between Heaven FLAC and Heaven 32kbps MP3
Under The Ice FLAC
Under The Ice 32kbps MP3
Differences between Under The Ice FLAC and Under The Ice 32kbps MP3
Differences between Heaven FLAC and Under The Ice FLAC
由上面可以看出,针对同一首歌的FLAC和MP3差别很小,而不同首歌之间差别很大,结果还是挺好的。
Topic:
sohulinux
最新评论