0

百度人脸识别服务

百度人脸识别服务是基于深度学习的人脸识别方案,主要提供以下能力:

  1. 人脸检测(Face Detection),即在给定的图片中找到人脸,并返回人脸位置、以及相关年龄、表情、性别等信息。
  2. 人脸对比(Face Verification),即确定你就是你(1:1比对),比如为了避免柜台排队在家远程开卡,银行会要求用户刷脸(往往结合活体检测)并与公安身份图像比对,判断用户是否为本人。
  3. 人脸识别(Face Identification),即确定你是谁(1:N比对),比如高科技园区部署了人脸闸机,当有人刷脸时候,闸机会在园区员工人脸库中比对,判断是否应该放行。

下面将以Python环境为例子分享具体使用方法。

准备

安装百度人脸识别服务的SDK有几种方式,通过pip是最方便的:

pip install baidu-aip

然后需要到百度云创建应用并获得AppID,以及对应的API Key和Secret Key。目前百度人脸识别服务免费QPS是2,完成企业认证后可以把免费QPS扩充至5。

AipFace是人脸识别的Python客户端,为使用人脸识别的开发人员提供了一系列的交互方法,参数包括:

  1. APP_ID在百度云控制台中创建,用来区别用户。
  2. API_KEY与SECRET_KEY是在创建完毕应用后为访问做鉴权。

以下是演示代码:

import matplotlib
import imageio

from matplotlib import pyplot, patches, transforms
from aip import AipFace

APP_ID = 'your_app_id'
API_KEY = 'your_api_key'
SECRET_KEY = 'your_secret_key'

client = AipFace(APP_ID, API_KEY, SECRET_KEY)

这样便可以使用client来访问百度人脸识别服务了。

人脸检测

人脸检测可以检测图中的人脸并为人脸标记出边框。检测出人脸后,可对人脸进行分析,获得眼、口、鼻轮廓等72个关键点定位准确识别多种人脸属性,如性别、年龄、表情等信息。该技术可适应大角度侧脸,遮挡,模糊,表情变化等各种实际环境。

适用的场景包括:

  • 智能相册分类:基于人脸识别,自动识别照片库中的人物角色,并进行分类管理,从而提升产品用户体验。
  • 人脸美颜:基于五官及轮廓关键点识别,对人脸特定位置进行修饰加工,实现人脸的特效美颜、特效相机、贴片等互动娱乐功能。
  • 互动营销:基于关键点、人脸属性值信息,匹配预先设定好的业务内容,可用于线上互动娱乐营销,如脸缘测试、名人换脸、颜值比拼等。

人脸检测的关键代码如下:

def detect(filename):
     # detect faces in the given image
     image = open(filename, 'rb').read()
     options = {}
     options['max_face_num'] = 10
     options['face_fields'] = 'age,expression,glasses,gender,race,beauty'

     dr = client.detect(image, options)

     # display the image and plot the face info
     ...

可以看到,人脸检测可以找出给定图片上多张人脸,除了性别、人种、年龄、颜值、表情等信息,还给出了人脸的具体坐标并支持倾斜。

人脸检测对于漫威英雄效果也不错,绿巨人估计是计算机变形得太厉害可惜没找出来:

总体而言年龄预测得比较准确,唯一就是绯红女巫和快银,快银不是说先比女巫出生早十几分钟么,怎么就老了10岁呢,希望导演考虑到我们做数据分析的,能不能让化妆师更走心一些呢 🙂

人脸对比

人脸对比(Face Verification),即确定你就是你(1:1比对),是通过提取人脸的特征计算两张人脸的相似度,从而判断是否同一个人并给出相似度评分。人脸对比是在已知用户ID的情况下帮助确认是否为用户本人的对比操作,可用于真实身份验证、人证合一验证等场景。

适用的场景包括:

  • 金融远程开户:通过自拍照与身份证照或公安系统照片之间的人脸对比,核实用户身份是否属实,优化金融等高风险行业复杂的身份验证流程。
  • 服务人员身份监管:对于用户身份真实性要求较高的服务领域(如家政、货运等),通过人证对比确保服务人员的身份真实性。
  • 民事政务自助办理:原本繁琐费时的窗口业务办理,转为线上自助办理(如制卡、社保核身),保证用户身份真实性的同事,大大缩短业务处理时间。

以下是核心代码:

def verify(filename1, filename2):
    # visualize two images
    pyplot.figure(figsize=(14, 7))
    pyplot.subplot(1, 2, 1, xticks=[], yticks=[])
    pyplot.imshow(imageio.imread(filename1), interpolation='nearest')
    pyplot.subplot(1, 2, 2, xticks=[], yticks=[])
    pyplot.imshow(imageio.imread(filename2), interpolation='nearest')
    pyplot.show()

    # verify two faces
    image1 = open(filename1, 'rb').read()
    image2 = open(filename2, 'rb').read()
    result = client.match([image1, image2])

    print('likelihood: {}%'.format(result['result'][0]['score']))
    ...

不知见过多少人认为甘道夫和邓布利多是同一个人演的。伊恩·迈克莱恩与迈克尔·甘本这俩老爷子在电影中的造型的确很像,有次迈克莱恩打电话给甘本问他在干吗,甘本回答说:我刚给一个粉丝签了你的名字。

然而,脸盲在百度人脸比对面前是不存在的:

人脸识别

人脸识别(Face Identification),即确定你是谁(1:N比对),比如,高科技园区部署了人脸闸机,当有人刷脸时候,闸机会在园区员工人脸库中比对,判断是否应该放行。

适用的场景包括:

  • 安防监控:在银行、机场、商场、市场等人流密集的公共场所对人群进行监控,实现人流自动统计、特定人物的自动识别和追踪。
  • 门禁闸机:通过人脸识别,快速为用户录入人脸信息,用户需要通行时,只需简单地进行人脸验证,即可完成身份信息确认。实现企业、商业、住宅等多种场景的刷脸进门,提升安全性、效率和用户体验。
  • 签到考勤:与会人员、公司员工或学员等预先录入人脸,在需要验证身份时,实现刷脸签到、考勤打卡、学员登记等操作,提升业务处理效率及用户体验。

人脸识别有两个步骤,分别是注册人脸库、进行1:N人脸识别或者M:N多人脸识别,下面分别演示。

注册

首先需要向人脸库中新增用户,可以设定多个用户所在组,及组内用户的人脸图片。

人脸库的层级关系如下:

  • 每个开发者账号可以创建若干个应用
  • 每个应用对应一个人脸库,不同应用之间人脸库互不相通
  • 每个人脸库下可以创建多个用户组,用户组数量没有限制
  • 每个用户组可添加用户ID和对应的多张人脸

为了保证识别效果,请控制注册人脸的质量,特别是遮挡、模糊度、光照、姿态、完整度、大小等。

注册人脸库的演示代码如下:

def add(uid, info, groupid, filename):
    image = open(filename, 'rb').read()

    options = {}
    options["action_type"] = "replace"

    return client.addUser(uid, info, groupid, image, options)

可以把漫威英雄的演员录入人脸库了:

识别

在一个指定人脸库中查找相似的人脸,这里提供两种功能:

  1. 用identifyUser函数实现1:N人脸识别,在指定人脸集合中找到最相似的人脸。
  2. 用multiIdentify函数实现M:N多人脸识别,在待识别图片中含有多个人脸时,在指定人脸集合中找到这多个人脸分别最相似的人脸。

以下是人脸识别的演示代码:

def identify(filename):
    # identify faces in the given image
    image = open(filename, 'rb').read()

    options = {}
    options["detect_top_num"] = 10
    options["user_top_num"] = 1

    mr = client.multiIdentify('marvel', image, options)

    # display the image with proper info
    …

人脸识别对于漫威英雄效果很有效,根据之前录入的人脸库,斯嘉丽出演黑寡妇、伊丽莎白饰演绯红女巫,再也不会叫错名字了!可惜绿巨人P得太厉害,AI也无能为力……

除了静态照片,百度人脸识别服务还可以应用在视频流中,以达到实时的效果,熟悉OpenCV的可以动手一试。

此外,除了在百度云调用百度人脸识别服务,对于没有公网连接或者对延迟要求非常高的场景,还可以通过百度ABC一体机获得私有集群部署的百度人脸识别服务,下次有机会再聊。

 



张 琪

发表评论

电子邮件地址不会被公开。 必填项已用*标注