本周对视频编解码的几种框架进行了比较,给出了初步的方案设计,人脸识别方面,查阅了相关论文,对二十世纪七十年代至今的各种人脸识别算法做了总结,具体情况如下。
1 视频编解码方案设计
视频编解码部分,现已确定编码使用hevc-nvenc编码器,解码使用hevc-cuvid解码器,拼接使用CUDA编程在GPU内实现。关键在于使用哪个框架使得编程实现最方便,以下是几种编解码方案的介绍及对比情况。
1.1 Video Codec SDK
Video Codec SDK 是NVIDIA官方推出的开发工具包,使用该工具包可以直接调用NVIDIA支持的编解码器,目前最新版本是8.2.

其它所有支持NVIDIA硬编码的框架都是在这基础上进行的二次开发,如ffmpeg。直接使用该开发包进行编解码效率最高,但是参数众多,学习成本高。
1.2 使用opencv编解码
opencv编程简单,有类似matlab一般便利的函数接口使用起来非常方便,且内置视频编解码模块cudacodec。

但是进一步调查发现opencv对视频编解码的支持比较老旧,模块中包含的视频编解码器十分有限且不具备hevc-nvenc与hevc-cuvid,具体包含的编解器如下图。

若要使其支持,需要自己手动添加ffmpeg最新库使其支持,既麻烦也没有必要,所以编解码放弃使用opencv实现。
1.3 FFmpeg / libav
ffmpeg/libav库为NVIDIA官方推荐的视频编解码框架,支持所有NVIDIA最新的编解码器。在安装NVIDIA最新的视频编解码开发包Video Codec SDK 8.2之后便可以使用ffmpeg/libav调用NVIDIA的编码器/解码器。
1.4 总结
从上面的介绍可以看出,以上三个框架从底层到高层的顺序为:Video Codec SDK–>FFmpeg / libav–>OpenCV。其中OpenCV的封装最高级,使用起来最为方便,但是其最新版本不支持英伟达的HEVC编解码器,FFmpeg很好地支持英伟达最新编解码器,其使用起来相比Video Codec SDK方便,所以目前确定开放方案如下
- 编解码框架:ffmpeg
- 拼接:CUDA
- 开发环境:VisualStudio2015
疑问: ffmpeg在windows上使用MinGW编译器编译,CUDA程序使用NVCC编译器编译,目前还不清楚将FFmpeg与CUDA结合使用的具体方法???
1.5 参考资料
OpenCV Video Encoding/Decoding
2 人脸识别算法调研
最早的关于人脸识别的研究出现在20世纪50年代的心理学领域[Bruner and Tagiuri 1954],到20世纪60年代才逐渐有了一些工程上的文献出现[Bledsoe 1964]. 但真正关于机器自动识别的研究开始于20世纪70年代[Kelly 1970] ,Kanade [1973]。20世纪50年代以来,心理学家和神经科学家的研究对此领域影响重大,并出现了一系列重要的成果与算法。
2.1 人脸识别的主要步骤与影响因素
相比与指纹识别,虹膜,视网膜识别之类的技术。人脸识别不需要被识别者的主动配合,因此具有很大的商业价值,所以一直受到学者的重视。在这个领域中很难说哪一种算法比另一种更好,这取决于应用场景,背景简单或复杂,图像识别或者是视频识别,图像质量的好坏,数据集的多少都对算法有着很大地影响。通常来说,一个人脸识别系统包括人脸检测,特征提取,人脸识别/匹配三个部分,如下图所示。

影响人脸识别算法性能的问题有很多,其中最重要的两个问题为:
- 光照问题
- 姿势问题
2.2 人脸识别主要算法介绍
下面主要介绍近四十年来人脸识别领域的各种经典算法,关于人脸识别算法的分类方法很多,下面按照年代顺序介绍最为主要的一些算法
2.2.1 基于几何特征的人脸识别算法
作为最早的人脸识别方法,人们最先想到的便是对人脸的几何特征进行提取识别,使用眼睛、鼻子、嘴巴、下巴等重要特征的几何关系来描述人脸的轮廓。但实际效果并不乐观,识别能力与速度以及算法的鲁棒性都不够高,通常需要与其它方法结合使用。
2.2.2 主成分分析法(Principle-component-analysis,PCA)
主成分分析法是应用极为广泛的经典传统算法,包括Eigenface,fisherface,LBP(Local Binary Patterns)等经典方法。
2.2.2.1 EigenFace
EigenFace又称特征脸或者本征脸方法,是90年代初期由Turk和Pentland提出的目前最流行的算法之一,具有简单有效的特。
特征子脸技术的基本思想是:从统计的观点,寻找人脸图像分布的基本元素,即人脸图像样本集协方差矩阵的特征向量,以此近似地表征人脸图像。这些特征向量称为特征脸(Eigenface)。

2.2.2.2 FisherFace
FisherFace是另一种特征子空间的构建方法,和EigenFace的思想一致,在PCA的基础上加入了LDA(Linear Discriminant Analysis)构建的子空间
2.2.3 神经网络
在神经网络方法之前,都是采取人工提取特征+分类器分类的方式。如上面提到的EigenFace,FisherFace,LBP等特征提取,除此之外还HOG,SIFT,Gabor等特征提取方法。而神经网络不需要认为提取特征,通过在大量数据中模型自动学习特征,也是目前人脸识别中正确率最高的方法,但缺点是所需数据量大,在缺少数据的场合通常使用人工提取特征的方法。
2.2.4 其它算法

2.3 参考资料
- Zhao, Wenyi, et al. “Face recognition: A literature survey.” ACM computing surveys (CSUR) 35.4 (2003): 399-458.
- Pandya, Jigar M., Devang Rathod, and Jigna J. Jadav. “A survey of face recognition approach.” International Journal of Engineering Research and Applications (IJERA) 3.1 (2013): 632-635.
- Vijayakumari, V. “Face recognition techniques: A survey.” World journal of computer application and technology 1.2 (2013): 41-50.