人脸识别,一行代码就能搞定?

什么,只要一行代码就能搞定人脸识别?当然是假的啦。

虽然不能一行就搞定,依靠python强大的人脸识别包,只要十多行代码完全可以实现人脸识别的功能。这就叫站在巨人的肩膀上,看得更高更远。

face-recognition,使用最先进的人脸识别技术构建而成的python包,而且具有深度学习功能。经测试识别正确率高达99.38%。确实很高。

安装

因为face-recognition使用到了dlib库,这是c++写的一个包含机器学习,计算机视觉等算法的库,所以使用之前要先安装dlib。不过这还不行,dlib库又依赖一个叫做boost的东西,总之有些麻烦,所以我就不写详细步骤啦╰( ̄▽ ̄)╭。linux下安装比较简单,命令行下几行代码就搞定,windows安装见这里。

所有工作准备好之后,使用pip安装:

pip install face-recognition

人脸检测

如何检测一张图片中的人脸?face-recognition把带人脸的图片看成是由像素组成的二维数组,使用face_locations方法返回识别到的人脸的坐标(上下左右)。

这样就可以啦,接下来只要把这些人脸坐标用矩形框圈出来,然后保存即可。

import face_recognitionfrom skimage import draw, io
%matplotlib inline# 图片文件files = "F:\data\people.jpg"# 加载图片image = face_recognition.load_image_file(files)# 识别人脸坐标face_locations = face_recognition.face_locations(image)# 我们在此使用之前介绍过的skimage库进行绘制# 读出的图片在skimage中不能使用,故重新导入img = io.imread(files)

print("I found {} face(s) in this photograph.".format(len(face_locations)))# 循环标记人脸for face_location in face_locations:    # 每个人脸的坐标
    top, right, bottom, left = face_location    # 为每个人脸画四边形
    # polygon_perimeter作用是绘制不填充的多边形
    rr, cc = draw.polygon_perimeter([top, top, bottom, bottom], [left, right, right, left])    # 设置颜色为红色
    draw.set_color(img, [rr, cc], [255, 0, 0])# 保存io.imsave('F:result.jpg', img)
I found 24 face(s) in this photograph.

我们打开图片看看效果。

import matplotlib.pyplot as pltfrom skimage import io

origin = io.imread(files)
reco = io.imread('f:result.jpg')

plt.subplot(1, 2, 1)
plt.imshow(origin)
plt.subplot(1, 2, 2)
plt.imshow(reco)

效果不错,都识别出来了。

人脸识别

既然能够识别出有没有人脸,有可能知道这个人是谁吗?当然可以了,前提是你要提供一张包含某个人脸的照片。使用face_encodings对人脸进行编码,然后使用compare_faces方法比较即可。看代码。

import face_recognition# 首先打开一张已经知道是谁的照片,然后打开另一张照片zhuyizhi_image = face_recognition.load_image_file("F:zhuyizhi.jpg")
unknown_image = face_recognition.load_image_file("F:unknow.jpg")# 识别出已知和未知人脸的面部特征zhu_face_encoding = face_recognition.face_encodings(zhuyizhi_image)[0]
unknown_face_encoding = face_recognition.face_encodings(unknown_image)[0]# 可以添加多个已知的人脸照片known_faces = [
    zhu_face_encoding,
 
]# 比较已知人脸和未知人脸,返回结果为true或者false。results = face_recognition.compare_faces(known_faces, unknown_face_encoding)

print("Is the unknown face a picture of zhuyizhi? {}".format(results[0]))
print("Is the unknown face a new person that we've never seen before? {}".format(not True in results))
Is the unknown face a picture of zhuyizhi? TrueIs the unknown face a new person that we've never seen before? False

除了能检测出和识别出人脸之外,face-recognition还提供深度学习参数的支持,使得识别率更高。

原文发布于微信公众号 - 机器人网(robot_globalsources)

原文发表时间:2018-01-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木子昭的博客

sklearn数据集的获取与划分

获取sklearn本地的数据集 from sklearn.datasets import load_iris li = load_iris() print("...

46590
来自专栏ATYUN订阅号

深度学习与R语言

对于R语言用户来说,深度学习还没有生产级的解决方案(除了MXNET)。这篇文章介绍了R语言的Keras接口,以及如何使用它来执行图像分类。文章结尾会通过提供一些...

59540
来自专栏应兆康的专栏

16. 清理贴错标签的开发集和测试集样本

15710
来自专栏CreateAMind

运动信息向量的神经网络学习 code、ppt、视频

官方代码还未开放, http://visualdynamics.csail.mit.edu/

13630
来自专栏IT派

Github 推荐项目 | 用 TensorFlow 简单地实现 StarGAN

StarGAN 是一种新颖且可扩展的方法,可以仅使用一个模型来执行多个域的图像到图像的转换。StarGAN 这样一个统一的模型体系架构让开发者可以同时训练单个网...

9010
来自专栏新智元

谷歌大脑开源TensorFuzz,自动Debug神经网络!

【新智元导读】众所周知,神经网络难以debug。谷歌大脑的Augustus Odena和Ian Goodfellow提出了一种新方法,能够自动Debug神经网络...

9430
来自专栏机器之心

心中无码:这是一个能自动脑补漫画空缺部分的AI项目

本文将简要介绍这项研究与 DeepCreamPy 实现项目,读者可下载项目代码或预构建的二进制文件,并尝试修复漫画图像或马赛克。这一个项目可以直接使用 CPU ...

13430
来自专栏专知

【实战】最新Deep Learning with Keras图书加代码,教你从零开发一个复杂深度学习模型(附下载)

Deep Learning with Keras 这个代码库是《Deep Learning with Keras》的配套代码。它包含全书从头到尾所有所需要用到的...

58750
来自专栏数据小魔方

sparklines迷你图系列16——Distribution(Spread)

今天跟大家分享sparklines迷你图系列16——Distribution(Spread)。 这种图表用中文翻译是在费解,没有特别合适的叫法,但是实际上它是一...

29860
来自专栏数据派THU

教你用Keras和CNN建立模型识别神奇宝贝!(附代码)

在今天博客的最后,你将会了解如何在你自己的数据库中建立、训练并评估一个卷积神经网络。

68910

扫码关注云+社区

领取腾讯云代金券