VOSM:国人写的ASM/AAM人脸拟合库
上次说了开源人脸识别库FaceL,这次说说VOSM,一个开源的人脸拟合库,它的全称是Vision Open Statistical Models,主要实现了ASM(Active Shape Model)和AAM(Active Appearance Model)的经典算法及其几个变种,包括CMU Simon Baker和Iain Matthews的算法。虽然ASM和AAM是很早的算法,但是一直都没有一个靠谱好用的开源实现,OpenCV应该包含这个算法才对。偶然发现VOSM这个库,我觉得它是目前为止一个很好的的ASM/AAM实现。而且这个库是一位叫JIA Pei的中国人写的,他目前在著名的计算机视觉公司Point Grey供职。VOSM避免了我等投机取巧的人重新造轮子,“拿来主义”是王道!当然想要好好研究ASM的人读读他的代码也非常有益的,帮助理解算法,而且实现的时候应该会有很多trick。
VOSM由C++实现,核心算法借助OpenCV,IO操作模块用了Boost。在线文档很规整,是由Doxygen自动生成的。看代码作者的C++用的相当娴熟,STL模板多态再加上Boost一样不拉,让我这种把C++当C用的人来说看的相当羡慕啊。
VOSM需要OpenCV和Boost的支持,作者提供了Windows下Visual Studio的方案,在Ubuntu下编译也很简单,CMake生成的Makefile直接就编译通过了。在Mac下需要折腾一下,主要是库和头文件的路径问题。在iPhone下面跑就更折腾了,Boost和OpenCV都要编译成静态库,然后需要给CMake提供一个x86下给ARM交叉编译环境的Toolchain,还有部分代码也需要改,例如图片读取存储就不能直接用OpenCV的。因为Boost仅是处理文件IO,如果作者能不依赖这个库的话,VOSM会有更好的夸平台编译性能。
VOSM提供了training和fitting两个模块,作者的网站上提供了在各种人脸标注数据库上训练好的数据,很方便可以直接实用。不过数据有点大,都是ASCII存的浮点数据,200~400M,如果用binary估计要小很多,在iPhone上运行要load三四分钟,内存占用也比较大,已经到了iPhone程序运行的上限了,可能作者没有考虑到优化把各种算法的所有的数据都一次性load进内存了。效果可以看下面的视频。运行速度的话,在Intel E6600的CPU 60个跟踪点一帧需要~200ms,在iPhone4上需要~5s,点数少会更快一些。效果的话,我用的是现成的通用数据库,ASM/AAM实用person specific的数据效果会更好。