如何用 Python 实现人脸识别,证明这个杨幂是那个杨幂?

人脸特征提取的步骤

真正的人脸识别需要很多的知识,大体上粗略的可以分为以下步骤:

1.人脸检测(从图片中找到人脸):返回人脸位置和大小的参数。

2.人脸特征定位:一般 69 点或者 106 个点对人脸的特征定位,技术上有 Adaboost&haar,以及 MSRA 的 alignment。

3.人脸特征归一化(几何归一/灰度归一):前者对图像进行仿射变化使得不同的脸可以进行比对,后者则能使图像展现更多的细节以及减弱光线光照的应用。

4.特征提取-特征后期融合。(基于特征近似度的多特征融合)

5.特征距之间的距离来比对相似度、三氏距离。(马氏、欧氏 、巴氏)

操作过程中的注意事项

每张图片要先上传到 bucket 中才可以利用。

API 对人脸匹配再返回很大程度依赖于用户的网络带宽。

当用户网络不好的情况下需要很久的时间才能得到返回结果。

要经过压缩处理,一般识别的较为准确最多可将图片压缩至 25 kb 左右。

我们要进行如下的步骤:

1)得到我们刚刚通过摄像头取得的人像

2)对我们的人像图片进行压缩

3)上传我们的人像图片到我们的 bucket 中

(这里要申明一点,七牛所有支持的 API 都要求文件在华东的 Bucket 下)

4)得到我们上传的图片的链接地址

5)对链接进行 urlbase64 加密(这里只要 import python 的 base64 库即可)

6)请求 API

7)得到网页的 JSON 格式数据

8)通过 JSON 库对数据进行分析

9)判断人脸的相似度是否符合,输出结果

10)删除 Bucket 中上传的临时图片

返回的 JSON 格式分析

我们可以看到返回的 JSON 信息很简单, status 的意思是成功和不成功,而 confidence 则是相似度,所以我们对返回的信息进行分析会很简单。 status 如若成功则为 ok,不成功则为 invalid。

人脸相似度的判断

上表中所用的图片都来自己互联网,从表数据我们可以大致将本人的相似度以 0.7 为分界线。不过有趣的是,不知道为什么按杨幂进行整容的为什么相似度竟然低于杨幂和范冰冰的相似度(其他女星照的图片为范冰冰的人像),不同性别的相似度差异明显,所以就粗略的根据表格定为 >0.7 即可认为是本人。

安装所需的库

在 python 中,我分享的这个例子总共需要引入 6 个库

requests 库,json 库,PIL 库请自行安装;

base64 库和 OS 库为自带所以无需安装。

程序的实现

请见下方的代码,采集到的人脸为 face.jpg。 (这里用了杨幂的两张图片作为示例)

程序运行的截图:

用到的杨幂的两张照片为:

(均来自百度图片)

(用于比对的标准人像图片)

(已用 PIL 压缩 x0.3,y0.3)

(用于比对的图片)

作者:七牛云

源自:

https://juejin.im/post/59719caef265da6c4741cdd7

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180723A15UYM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券