综合实验:利用Face++ API进行人脸识别

实验介绍

试想,以后的视频监控不再仅仅是远程监控视频,更有可能进行智能识别,比如移动物体的检测、人脸信息的采集、某样物体特征的提取和识别,等等。除了能用开源而悠久的OpenCV实现特征提取,比如实现人脸识别,但实现的效果尚未满足实际的要求。本实验采用了Face++ 提供的API从人脸提取了很多信息,比如人的年龄、性别、种族、是否微笑,并且可以对比人脸是否相似,从一群人的人脸中找到最相似的那个人。

1.Face++人脸识别系统

Face++是新一代云端视觉服务平台,提供一整套世界领先的人脸检测,人脸识别,面部分析的视觉技术服务。

Face++ 人脸识别系统包含五个核心概念:Image, Face, Person, Faceset 和Group。这是在运用Face++ API时需要重点区分的。

  • Image 指用户或应用程序给Face++ API提供的图片,以供后续检测/识别使用。用户可以通过指定url或在程序中上传(通过HTTP POST提交图片的二进制文件)提供Image。
  • Face 指Image中检测出的人脸。一张Image中可能包含多个Face。
  • Person 指同一个人的Face集合。Person中的多个Face可能来源于多个Image,但必须是同一个人的多张Face。一个Face可以属于多个不同的Person。Person被用在人脸验证(verify)和人脸识别(identify)中。
  • Faceset 指一个或多个Face的集合。Faceset和Person一样,都是Face的集合,但Faceset并不要求Face来源于同一个人。一个Face可以属于多个不同的Person和Faceset。Faceset被用在人脸搜索(search)中。
  • Group 指多个Person的集合。在多数Face++人脸识别场景中,用户需指定一个Group来限定在此集合中进行识别。
  • ID和Name两套索引系统用来定位和访问上述所有元素, Image,Face,Person,Faceset 和 Group都有系统分配的全局唯一的ID。为便于用户使用有语义信息的名字进行开发,用户也可给Person 和 Group设置一个Name。Name由用户提供,必须在App内全局唯一。

2.基本工作流程

图2.6.1 实验原理图

软硬件清单

硬件清单

  • pcDuino8 Uno

软件清单

系统使用Ubuntu14.04,基本的软件包括:

  • python2.7
  • Face++ python SDK
  • git

注意:Face++是云端的服务,必须要接入网络

实验步骤

1.注册Face++账户,获得API_Key和API_Secret

  • 点击进入Face++开发者首页,点击右上方的我的应用图标1,您可能需要注册或登录。
  • 点击屏幕右方的创建应用图标2,创建一个新的应用。

图2.6.2 注册Face++账户

  • 点击提交按键,自动进入应用信息界面,您将看到API_Key和API_Secret。

图2.6.3 获得API_Key和API_Secret

  • 把API_Key和API_Secret复制到您的API相关文件中,如apikey.cfg(在很多官方下载SDK中都含有此文件),或您自己写的程序里。

注意,如果您注册时选择了阿里云(中国)服务器,请使用如下配置:

SERVER = 'http://api.cn.faceplusplus.com/'

API_KEY = 'YOUR_API_KEY'
API_SECRET = 'YOUR_API_SECRET'

如果您注册时选择了亚马逊(美国)服务器,请使用如下配置:

SERVER = 'http://api.us.faceplusplus.com/'

API_KEY = 'YOUR_API_KEY'
API_SECRET = 'YOUR_API_SECRET'

保存apikey.cfg,应用配置成功。

2.如何封装Face++ API

基本封装命令的介绍:

python create_group.py  <group_name> #创建一个组
python detection.py <image_path> #提取一张人脸照片的信息
python add_new_face.py  <person_name> <image_path> <group_name> #将某个人的脸加入到组中,并训练模型
python recognition.py <group_name> <face_image_path> #从组中找寻最像的一张人脸。
python dump_info.py    #列出创建的人名和组名

其他的命令:

python del_group.py <group_name> #删除一个组
python del_person.py <person_name> #删除一个人

如果你想调用Face++ 的API,不得不自己手动封装这些API接口。当然,本人也封装了一些基本的python脚本,已经放到了github上。可以下载下来,供参考:

$ git clone https://github.com/YaoQ/faceplusplus-demo

3.测试人脸检测

根据在github上提供的示例,我试着使用Face++ API:/detection/detect去检测 Tom Cruise的脸。

图2.6.4 Tom Cruise的脸

$ git clone https://github.com/YaoQ/faceplusplus-demo
cd faceplusplus-demo
$ python detection.py images/tom.jpg

检测得到了这张脸的基本信息,内容如下:

 Detection result for {}:
   {'face': [{'attribute': {'age': {'range': 10, 'value': 37},
                            'gender': {'confidence': 99.9999,
                                       'value': 'Male'},
                            'race': {'confidence': 98.9731,
                                     'value': 'White'},
                            'smiling': {'value': 67.826}},
              'face_id': '5ca95ae41e7319170bb8bf022ad677f3',
              'position': {'center': {'x': 48.305085, 'y': 54.666667},
                           'eye_left': {'x': 39.201864, 'y': 45.51},
                           'eye_right': {'x': 58.873051, 'y': 47.075833},
                           'height': 44.333333,
                           'mouth_left': {'x': 38.516441, 'y': 65.636333},
                           'mouth_right': {'x': 56.491356,
                                           'y': 66.942833},
                           'nose': {'x': 46.791017, 'y': 58.3435},
                           'width': 45.084746},
              'tag': ''}],
    'img_height': 630,
    'img_id': '6bef5d3f0f1bdb0f3840bdd34a54ad30',
    'img_width': 620,
    'session_id': '78919817e956400d88398e3535f85cb6',
    'url': None}

4.识别一张人脸

这一步,我提取了3张人脸的信息,并针对每张脸创建了一个人,再将这3个人加入到一个叫做test的组中。然后再找一张新的人脸,去跟组中所有的脸进行匹配,并找出最匹配的那一个人。测试图片有:奥巴马、汤姆·克鲁斯和姚明:

图2.6.5 Groupe 组

用于测试的人脸(注意:这是一张手绘画):

图2.6.6 Test照片

基本的操作过程如下:

$ python create_group.py test
$ python add_new_face.py tom images/tom.jpg test
$ python add_new_face.py obama images/obama.jpg test
$ python add_new_face.py yao images/yao.jpg test
$ python recognition.py test images/test.jpg

识别的结果:

The person with highest confidence: obama Confidence is : 12.066551

图片一对比,就知道检测的结果不尽如人意,当然仅仅是几张图片的对比,并不能说明什么问题。一个人,最多可以添加10000张照片,如果这样大规模的加入一个人人脸的特征,识别的准确性应该会有很大提升。

results matching ""

    No results matching ""