目前来看,人工智能技术在图像处理领域发展得最好,其中人脸识别是最最成熟、应用最广的一项技术。国内大公司都已经推出了成熟的人脸识别云服务,以便分享这一块大蛋糕。然而,很多应用场景不适合使用云服务,这样使得中小厂商整合技术推出自己的系统。那么,有哪些成熟的技术可以学习使用呢?
首先,我们要搞清楚几个基本概念:
人脸检测
找出一幅图片中是人脸的区域并标记出来(一般用矩形表示),如下图所示(百度结果):
人脸关键点检测
定位并返回人脸五官与轮廓的关键点坐标位置。关键点包括人脸轮廓、眼睛、眉毛、嘴唇以及鼻子轮廓。关键点的个数根据算法不同也会有所不同,比如dlib给出的是69点,Face++给出的是83点,百度给出的是72点。
如下图所示(百度结果):
人脸特征
把人脸区域作为输入通过一定算法计算出人脸特征(一般用1xN的多维向量表示,N越大特征越丰富,计算量也越大)。
人脸对比
计算两张脸的相似程度,并给出相似度评分,以便分析属于一个人的可能性。
人脸搜索
针对一个新的人脸,在一个已有的人脸集合中搜索相似的人脸。算法会返回一系列相似人脸,以及相似度评分。
下面概括一下成熟技术。
一、OpenCV
OpenCV可以做“人脸检测”和“人脸识别(人脸特征提取)”,但是精准度较深度学习的方法差不少,但它的速度(只有CPU,无GPU)更快一些。
OpenCV已经包含多个预训练好的分类型来分类人脸,眼睛,笑脸等。相应的XML配置文件存储在opencv/data/haarcascades/ 目录下。
接下来我们创建人脸和眼睛的分类器。
加载相应XML创建分类器,并读取要检测的图片
找到人脸和眼睛并显示
结果显示如下:
二、Dlib
Dlib也是一个很成熟的图像识别的库,在人脸识别方面它包含了已经训练好的模型,可以进行人脸检测、人脸特征提取、人脸识别。有人对它进行了进一步封装,使得它用起来非常简单,号称是“The world’s simplest facial recognition api for Python and the command line”(世界上最简单的人脸识别Python API 和 命令行工具),有兴趣的可以一试: https://github.com/ageitgey/face_recognition
三、深度学习框架
最近几年深度学习的兴起,极大促进了图像处理的速度和精度,出现了几个比较成熟的深度学习框架,如:TensorFlow、MxNet、PyTorch等等。在这些框架的基础上,实现各种神经网络模型用于人脸检测、人脸特征提取等任务。比较有名的有:
人脸检测:mtcnn
人脸特征:ResNet
有兴趣的可以到github上面找相关项目进行学习。
更多关于Python技术知识将分享在我的博客:www.yuanrenxue.com
公众号:猿人学Python