当前位置

博客

Acoustid 算法大致流程整理-王鑫

原文:http://oxygene.sk/lukas/2011/01/how-does-chromaprint-work/

  1. 图片在此算法中扮演了一个很重要的角色,当人们“看到”音频时,它通常都是形如下面的波形图:
  2. 但是这种图对分析起来没有什么太大用,更有效的一种表现形式是声谱图,它描述了特定频率的强度随着时间的变化:

    可以通过把原始视频切割为许多重叠的帧并在其上应用傅立叶变换(或者快速傅立叶变换)来得到这种图片。许多声纹识别算法都是利用这种图片来工作的,有的是比较频率和时间的不同,有的则是寻找波峰。

  3. Chromaprint则更近一步将频率转换为音符来处理。Chromaprint只关心音符,而不关注八度音,因此结果就是12音域,每个音符对应一个音域。这种信息被称为“Chroma特征”(其实就是一个12维的特征向量)。再经过一些过滤和标准化,最终会得到下面这种样式的图片:
  4. 既然有了音频的表现形式,那么比较这类图片并计算其相似度也不是太困难的事了,但是如果我们想在数据库中搜索它们,我们则需要压缩它们,也就是需要一个更为紧凑的形式。Chromaprint的方式是在Pairwise Boosted Audio Fingerprint这篇论文中提到的方法上修改的。
  5. 然后你可以想象你拥有一个16×12像素的滑动窗口从左到右来滑过整个图片,每次只滑动一个像素,这样就得到了许多子图。针对每一个子图应用预定义好的16个过滤器来捕获滑过的音符和时间的强度的差别。过滤器就是计算子图的灰度图的特定区域的和,然后比较两个和。有6中不同的区域

    通过使用上面这种类似于掩码的图片,把它置于子图任何一个位置,然后计算黑色和白色区域的和,再同另一个和相减,结果是一个单精度实数。每个过滤器都有3个系数,最终结果会是一个0到3之间的整型数。每个过滤器的系数都是通过机器学习算法在音频文件的训练集上训练得到的。

  6. 现在我们有16个过滤器,每个过滤器都可以把结果编码为2位。我们把这些结果组合在一起,得到一个32位的整型数字。
  7. 如果对所有滑动窗口滑过的子图都应用上述办法,我们就得到了整个音频的声纹了。识别声纹最简单的办法就是针对声纹计算位错误率。

实验结果:

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: 

PHP 的各个实现

挖个坑,备忘

  • Zend, 这个就不多说了
  • Quercus,原本是 resin 3 的一个特性,现在好似是作为一个独立项目运行... 看论坛上有人已经把它运行在 jetty 上了
  • P8,又一个运行在 JVM 上的 PHP 引擎,是一个 IBM 的项目,相比较 Quercus 而言,传说它比较好的支持了 PHP C 扩展。但这个项目的页面严重过时。另外它不是开源的
  • Phalanger,PHP on .NET,看起来正在积极的开发中,而且还有商业支持
  • PIPP,运行在 Parrot 上的 PHP,这个项目看起来已经死了,而且 Parrot 离被证明还很遥远
  • PHP 编译器,这个概念和前面的 Zend/JVM/Parrot 不太一样,着眼于直接编译出可执行代码,脱离 VM
    1. HipHop,地球人都知道
    2. phc
    3. Roadsend的Raven/rphp,基于 llvm
Topic: 

都不容易

暑假过了一个月,达达的心前所无比的野。不爱写作业,想尽办法偷懒

于是最近有那么段时间,几乎每天她妈都和达达发生剧烈冲突

白天我们上班后,奶奶和达达聊天

奶奶:......你说你妈妈容易吗?

达达:那我容易吗?

奶奶:你有什么不容易的

达达:我得让大人高兴

====
是啊,太不容易了

Topic: 

Haraka - a Node.js Mail Server

https://github.com/baudehlo/Haraka#readme

看作者的自述:Haraka is a project started by Matt Sergeant, a 10 year veteran of the email and anti-spam world. Previous projects have been the project leader for SpamAssassin and a hacker on Qpsmtpd, a perl based mail server which is quite similar to Haraka (but not as fast due to perl being slower than Javascript).

貌似不是一个蛋疼的项目... 刚刚发布 0.6.0 版本

Why Use Haraka?

Haraka's primary purpose is to provide you with a much easier to extend mail server than most available SMTP servers out there such as Postfix, Exim or Microsoft Exchange, yet while still running those systems for their excellent ability to deliver mail to users.

postfix 一直没有增加 libevent 的支持,对一个这么活跃的项目,以及这么被广泛使用的服务来说有点异乎寻常。从理论上来说,一个邮件系统的I/O能力是被其磁盘信件队列的I/O能力限制住了,所以网络I/O不追求高并发也可以理解。

但是考虑到垃圾邮件,潜在的DDoS攻击,在 postfix 之前弄一个这玩意确实值得考虑。

以前曾经想过用 twisted 做类似的东东,现在看来又多了一个新选择。

最后要说的是,node/v8 的 gc 确实很蛋疼

订阅 RSS - 博客