博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一行代码搞定人脸识别
阅读量:6825 次
发布时间:2019-06-26

本文共 2455 字,大约阅读时间需要 8 分钟。

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

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

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

安装

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

所有工作准备好之后,使用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 ioorigin = 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还提供深度学习参数的支持,使得识别率更高。

本人才疏学浅,上文中难免有些错误,还请各位品评指正。如果觉得写的还行,欢迎大家多多分享哈。

转载地址:http://nerzl.baihongyu.com/

你可能感兴趣的文章
Linux小技巧总结
查看>>
乾卦第一 坤卦第二
查看>>
【译Py】2018年,这5个数据科学项目能帮你找到工作
查看>>
Html2excel 1.4.1 发布,Html 转 Excel 工具包
查看>>
Linux安装配置反向代理Nginx
查看>>
Spring事务的传播属性和事务隔离级别
查看>>
关于maven
查看>>
Python入门到进阶,这本书有什么不同?
查看>>
资深专家深度剖析Kubernetes API Server第3章(共3章)
查看>>
【NLP】揭秘马尔可夫模型神秘面纱系列文章(一)
查看>>
在简书中使用Latex书写数学公式
查看>>
oracle系统包—-dbms_output用法
查看>>
py编程技巧-0.0-目录索引篇
查看>>
阿里云副总裁孙磊:Game Master,赋予游戏新智慧
查看>>
使用gulp构建你的前端项目
查看>>
SSM-SpringMVC-01:SpringMVC是什么?SpringMVC执行流程
查看>>
Android CardView设置成普通的Framelayout
查看>>
全球数字化报告 2019 发布:每 11 秒产生一位网络新人
查看>>
Vue - 实战疑点总结
查看>>
C#异步编程
查看>>