AI-人脸识别

目前来看,人工智能技术在图像处理领域发展得最好,其中人脸识别是最最成熟、应用最广的一项技术。国内大公司都已经推出了成熟的人脸识别云服务,以便分享这一块大蛋糕。然而,很多应用场景不适合使用云服务,这样使得中小厂商整合技术推出自己的系统。那么,有哪些成熟的技术可以学习使用呢?

首先,我们要搞清楚几个基本概念:

人脸检测

找出一幅图片中是人脸的区域并标记出来(一般用矩形表示),如下图所示(百度结果):

人脸识别技术的现状

人脸关键点检测

定位并返回人脸五官与轮廓的关键点坐标位置。关键点包括人脸轮廓、眼睛、眉毛、嘴唇以及鼻子轮廓。关键点的个数根据算法不同也会有所不同,比如dlib给出的是69点,Face++给出的是83点,百度给出的是72点。

如下图所示(百度结果):

人脸识别技术的现状

人脸特征

把人脸区域作为输入通过一定算法计算出人脸特征(一般用1xN的多维向量表示,N越大特征越丰富,计算量也越大)。

人脸对比

计算两张脸的相似程度,并给出相似度评分,以便分析属于一个人的可能性。

人脸搜索

针对一个新的人脸,在一个已有的人脸集合中搜索相似的人脸。算法会返回一系列相似人脸,以及相似度评分。

下面概括一下成熟技术。

一、OpenCV

OpenCV可以做“人脸检测”和“人脸识别(人脸特征提取)”,但是精准度较深度学习的方法差不少,但它的速度(只有CPU,无GPU)更快一些。

OpenCV已经包含多个预训练好的分类型来分类人脸,眼睛,笑脸等。相应的XML配置文件存储在opencv/data/haarcascades/ 目录下。

接下来我们创建人脸和眼睛的分类器。

加载相应XML创建分类器,并读取要检测的图片

import numpy as npimport cv2 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') img = cv2.imread('sachin.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

找到人脸和眼睛并显示

faces = face_cascade.detectMultiScale(gray, 1.3, 5)for (x,y,w,h) in faces:     cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)     roi_gray = gray[y:y+h, x:x+w]     roi_color = img[y:y+h, x:x+w]     eyes = eye_cascade.detectMultiScale(roi_gray)     for (ex,ey,ew,eh) in eyes:         cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) cv2.imshow('img',img) cv2.waitKey(0) cv2.destroyAllWindows()

结果显示如下:

人脸识别技术的现状

二、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上面找相关项目进行学习。

 

未经允许不得转载:996ICU » AI-人脸识别

赞 (0) 打赏