可扩展多媒体分析平台 
【版权声明】本文中的所有文字和图片涉及柏林工业大学(Technische Universitaet Berlin)的知识产权。如果需要转载务请先行与我联系。

从 2005 年中算起的话,我在学校的 MMSA 组已经混了近两年的时间。在项目即将赴汉诺威(Hannover)参加 CeBit 电脑展的前夕,我也姑且写一些东西,权当作给自己的一个交代。

MMSA 即是多媒体信号分析之意。我们的目标实际上是把视频信号自动按照内容归类。比如说分类成新闻、体育、音乐、卡通等等所谓的风格(Genre)。其中涉及的内容很多,从视频解码一直到模式识别【图一】。


【图一】视频分类系统

在我产生为此开发一个平台的念头之前,2005 年有大约一半的时间我是在写一个 MPEG-2 的解码器。万事开头难,尤其是那个学期我同时进修了两个课程设计(课题是 MPEG-2 和 MPEG-7)和一个实验课(通信技术)。一个学期下来我几乎只剩下半条命……现在回想起来几乎有点不可思议。

从数据分流(Demux)到霍夫曼(Huffman)解码,从余弦变换(IDCT)到运动补偿(Motion Compensation),所有的细节统统都亲历亲为,实在是一件非常艰巨的事情。不过最后解码器好歹是写出来了,尽管非常慢 ^_^bbb。但是在当时,那是我们能够找到的唯一提供了运动矢量(Motion Vector)导出功能的解码器。这使得其他的同事们开发基于运动矢量的识别算法提供了可能。这个解码器一直沿用到了我修改了 mpeg2lib 的代码使之能够导出附加编码信息为止。关于 MPEG-2 我以后或许会另外写一些东西,这里就不赘述了。

2006 年我便开始做我的研究作业(Student Research Project),课题是一个具有高度复用性的框架。因为当时各位同学们的作业都是用五花八门的编程语言制作的,所以接口也就千奇百怪。这么一来这些成果的可复用性几乎为零;另外对于一个初学者来说,自己编写 GUI 是一件非常耗时的工作,而且往往还做不好。这样我的另一个目标就是将用户界面进行封装,用统一的制式界面把其他人从繁重的 GUI 编码中解放出来。

从另一个方面来说,因为目前尚缺乏理论的指导,在进行多媒体识别的时候,大家基本上都是采取“摸着石头过河”的撞大运方式。这样一来就需要进行大量的实验去把各种方案进行对比和筛选。如果缺乏统一接口的话,进行这种实验将在重复编码方便耗费大量的时间。

于是乎,可扩展多媒体分析平台(eXtensible Platform for Multimedia Analysis)应运而生。其实 XPMA 在 2006 年的 8 月就已经处于准完成状态,而后的“舾装”则一直延续至今。平台最初的名字是 Universal Classification Platform,后来又更名为 General Classification Platform。直到2006年底才最终修订为现在的名字【图二】。


【图二】XPMA 版本及授权信息

简单的说来,XPMA 实际上是一个基于数据帧的可编程信号处理器。平台的功能由插件来实现【图三】,而最终用户则可以凭借 XML 按照自己的需求来对这个平台进行编程,使之完成自己想做的事情。为了简化插件开发者的工作,平台对数据容器进行了封装,并提供了一系列的 API 来使得数据操作变得简单。同时平台还维护着一个通信机制,使得 .NET 和 Win32 的插件能够协同工作。


【图三】程序主窗口以及插件总览

XPMA 编程的原理其实很简单。一个系统是由若干个独立的模块(Module)组成的,各个模块之间进行数据交换。抽象的说来,每一个功能模块都有诸如输入、输出、选项等属性,这些属性都有一些预定义的名字。用户的工作就是凭借这些名字,用 XML 把这些模块的输入端和输出端联系起来【图四】。


【图四】源代码编辑器——以一个视频播放器的源代码为例

作为一个多媒体的实验平台,XPMA 提供了对任务流程的“启动”、“暂停”以及“步进”等功能。除此之外,你可以在 Hierarchy 页面查看所有接口数据的值【图五】,也可以在 Flow 页面查看所有模块运行的效率【图六】。如果你定义了可视化的模块的话,你还可以在 Visualization 页面中查看已经被图形化了的数据(图像、文本、曲线等)【图七】。


【图五】运行时界面之数据浏览


【图六】运行时界面之模块效率


【图七】运行时界面之可视化效果

因为所有的数据都是通过名字来进行索引的,因此模块的文档就显得十分重要。XPMA 也同时考虑到了这一点。在插件浏览器(Library Explorer)中,用户能够即时查看到所有的插件详细描述【图八】。


【图八】插件浏览器以及插件文档

XPMA 目前的版本是 1.1.0.83。使用的视频解码器有 MPEG2Lib 和 FFMpeg。这两个著名的解码库都经过了我的修改。前者能够提供 MPEG-2 的附加信息,但是可惜却不支持音频解码;而后者则能够解码几乎所有的常见视频格式,并把所有的音频帧重新同步对齐到视频帧,因而适合于需要视频音频同步分析的场合。

近两年的时间里,我主要负责的是平台和接口的设计以及解码插件的制作,而有很多具体的描述以及识别功能则是由另几位同学贡献的。此外,我还制作了一个能够通过数学表达式定义输出的音频信号发生器。在信号处理的教学中,诸如讲解调制方式时,大家可以通过实时的频谱观察得到最直观的体验【图九】。


【图九】调幅(上)与调频(下)的波形及频谱(载波频率4KHz,信号频率1KHz)

从下个学期开始,XPMA 将作为学校《识别技术(Classification Techniques)》这门课的实验平台,并且将在识别模型方面有关键性的扩展。同时,我们也很乐意与其他的学校或企业展开合作。如果你对这个平台有兴趣的话不妨与我联系:)

[ 查看全文 ] ( 18 评论 / 2115 次浏览 )   |  永久链接  |   ( 3.1 / 4422 )