一、前言

今天给大家带了的人脸识别非常简单,不需要大家了解TensorFlow,只需要对Python基本语法有一定了解。由于TensorFlow的火爆,把人脸识别再度推向我们的视线。像前段时间比较火的dee pfake,和人脸支付技术。虽然现阶段人脸识别仍有很大的争议性,但是它已经走进我们的视线当中了。很多小区在门禁系统中加入了人脸识别的功能,有些景区也添加了刷脸通道。但是对于技术的争议不是今天探讨的课题。下面开始我们的准备工作。

二、准备工作

今天是通过使用百度的SDK来实现的,首先我们要进入AI开放平台

Python快速实现人脸识别-LMLPHP

我们选择开放能力->人脸与人体识别->人脸识别,进入后或出现下面page1的界面,点击立即使用

Python快速实现人脸识别-LMLPHP

点击后出现page2的界面。登录自己的账号就可以了。进去后我们会看到如下page3界面。如果没有应用就创建应用:

Python快速实现人脸识别-LMLPHP

如果应用的话就管理应用。然后我们看到page4中几个重要的参数。分别是AppID、API Key、Secret Key。到这里我们的准备工作就完成了。初步准备工作完成了,我们还需要做一件事,就是下载人脸识别的SDK。我们可以点击page4中的服务端SDK下载Python对应的SDK,也可以使用pip下载:

接下来我们就可以着手代码的编写了。

三、实现人脸识别

使用SDK实现人脸识别非常简单,下面我会从最简单的人脸识别开始。然后识别多个人脸,再到情绪识别、年龄识别等。

3.1、人脸识别

人脸识别非常简单,首先需要我们上面申请到的3个参数:

在识别人脸时,我们调用了client.detect()方法,在上面的例子中,接收了两个参数。分别是image和image_type。参数详情如下:

image string 图片信息(总数据大小应小于10M),图片上传方式根据image_type来判断
image_type string 图片类型 BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M;URL:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长);FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个

可以看到,image_type可以为三种值,这里我们选用url的方式。

其返回的为json数据,具体数据就不给大家展示了,其结构如下和image链接的图片如下:

Python快速实现人脸识别-LMLPHP

其中,左边为image链接的图片。虽然很漂亮,但是这不是我们研究的重点,我们把视线转移到右边这段冷冰冰的文字,我选取几个重要参数和大家说一下:

face_list array 人脸信息列表
+face_probability double 人脸置信度,范围【0~1】,代表这是一张人脸的概率,0最小、1最大。
+location array 人脸的位置
++left double 人脸区域离左边界的距离
++top double 人脸区域离上边界的距离
++width double 人脸区域的宽度
++height double 人脸区域的高度
++rotation int64 人脸框相对于竖直方向的顺时针旋转角,[-180,180]
+face_num int 人脸的个数

从上面的数据中,我们可以获取人脸的位置。我们可以将检测到的人脸裁剪下来,这就需要用的Pillow模块了。其安装如下:

Pillow模块的一些简单操作可以看看这篇博客,因为我们只使用截图功能所以还是非常简单的。我们在上面的基础上加如下代码

代码执行后截取的face_im.jpg如下:

Python快速实现人脸识别-LMLPHP

上面这段代码有许多不严谨的地方,因为现在是简单的实现功能,所以没太在意。接下来我们实现更复杂的人脸识别,虽然在技术上要复杂的多,但是在代码上却没有什么太多的添加。

3.2、多人脸识别

也非常简单,我们执行上面代码,发现即使我们识别多人脸的图片,face_num依旧是1。这并非是识别失败,而是由一个参数决定的,即 max_face_num。其类型为string,默认值为1,所以我们只能识别一个人脸,我们将 识别人脸代码修改如下:

我们修改后,face_data将最多返回四个人脸数据。所以我们需要多face_list进行遍历:

执行上面代码后我们截取到如下几个人脸(左边为原图,右边为人脸):

Python快速实现人脸识别-LMLPHP

因为设置max_face_num为4,所以检测到了四张人脸。

3.3、情绪识别

识别情绪也非常简单,我们在传入参数时再添加如下参数:

在添加该参数后,返回数据中,face_list下多了参数 expression 。具体结构如下:

Python快速实现人脸识别-LMLPHP

我们识别其中蓝色的即为识别出来的情绪。

除此之外,我们还可以识别性别、年龄、颜值、是否带眼睛、单双眼皮、情绪等...更详细的内容可以参考其官方文档Python-SDK

四、总结

除了上面这些简单操作外,SDK还提供了更加复杂的人脸服务。像人脸注册、人脸更新、身份验证等功能,这种面向企业的应用,个人认为还是不要过度依赖。无止境的广告短信,莫名其妙的推销电话,这些都是信息泄露的后果。在大数据时代,人类没有隐私可言。即使是对于软件行业的人来说,很多东西依旧是无可奈可。所以我们需要多加注意,对自己的隐私多留一份心。

References

[1] AI开放平台: https://ai.baidu.com/
[2] 这篇博客: https://blog.csdn.net/ZackSock/article/details/103648643
[3] Python-SDK: https://ai.baidu.com/ai-doc/FACE/ek37c1qiz


本文分享自微信公众号 - ZackSock(ZackSock)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

03-18 02:07