聊一聊人脸识别技术的现状

最近两年有脸技术运用越来越广泛做得越来越好。人脸识别手机解锁,人脸识别支付和各类美颜相机等等,当然个人觉得美颜相机这块是做得非常不错的,不仅能帮你把皮肤磨得光光滑滑的,还自带上妆。深得爱美之人的喜欢。

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

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

人脸检测

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

人脸关键点检测

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

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

人脸特征

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

人脸对比

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

人脸搜索

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

 

下面概括一下成熟技术。

一、OpenCV

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

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

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

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

import numpy as np
import 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上面找相关项目进行学习。

文章灵感来自python自学网站,猿人学python : https://www.yuanrenxue.com/

猜你喜欢

转载自www.cnblogs.com/amiza/p/10320040.html
今日推荐