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

虽然不能一行就搞定,依靠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_recognition

from 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 plt

from 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? True

Is the unknown face a new person that we've never seen before? False

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

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

公众号推荐:【Python学习交流】

python人脸识别代码_一行Python代码搞定人脸识别相关推荐

  1. python好玩的代码_一行 Python 能实现什么丧心病狂的功能?

    能够把自身代码打印出来的程序,叫做Quine.下面是python的一行quine: ​有人说有分号不算一行,无分号版: 其实,如果你用程序语言的名字+quine作为关键字去搜索,你能找到各种语言实现的 ...

  2. python怎么返回上一行代码_一行Python代码能做出哪些神器的事情

    原标题:一行Python代码能做出哪些神器的事情 (1)一行代码启动一个Web服务 python -m SimpleHTTPServer 8080 # python2 python3 -m http. ...

  3. python装b代码_一行python代码带你装B

    一行代码,python就能让你玩出花来.今天给大家介绍几个有趣的一行代码. 1.心形字符,全中文的话可能会变形,大家可以试试中英文搭配. print('\n'.join([''.join([('Ilo ...

  4. 高斯模糊java代码_一行java代码实现高斯模糊效果

    本文实例为大家分享了本地图片或者网络图片高斯模糊效果(毛玻璃效果),具体内容如下 首先看效果图 1.本地图片高斯模糊 2.网络图片高斯模糊 下面是使用步骤 一.实现本地图片或者网络图片的毛玻璃效果特别 ...

  5. python 3d绘图 拖动_使用Matplotlib轻松搞定3D绘图

    数据可视化一直是机器学习的重要部分,大多数数据可视化教程的基本内容包括:散点图,线图,箱形图,条形图和热图,虽然这些对于数据预处理来说基本够用,但是今天给大家分享另一种数据可视化图形--3D可视化.3 ...

  6. python画小猪乔治_小孩挑食难搞定?试下猪肉这样炒,简单5步超下饭,比牛肉还香嫩...

    我是木木育儿,国家中级育婴师,一个因为两个可爱的宝宝爱上了宝宝家庭餐和育儿领域的80后本科女. 今天要跟大家分享一道超级下饭的茭白胡萝卜炒瘦肉.这次的瘦肉,我选择了有着"黄金六两" ...

  7. python语言翻译成中文-Python 神工具包!翻译、文字识别、语音转文字统统搞定...

    原标题:Python 神工具包!翻译.文字识别.语音转文字统统搞定 今天给大家介绍一款 Python 制作的实用工具包,包含多种功能: 音频转文字 文字转语音 截图 OCR文字识别 复制翻译 举个例子 ...

  8. Python 内置模块之 re 库,一文搞定正则表达式初阶用法,滚雪球学 Python 第 13 篇

    橡皮擦,一个逗趣的互联网高级网虫.新的系列,让我们一起 Be More Pythonic. 滚雪球学 Python 第二轮 已完成的文章清单 十三.Python 内置模块之 re 库,一文搞定正则表达 ...

  9. docx文档怎么排列图片_格式转换太麻烦?仅需一行命令,搞定图片、音频、视频、文本批量转换!...

    每天12:18准时给大家惊喜! 大家好!我是好奇仔,热衷于搜罗和分享各种好用.实用的软件神器和资源,有手机软件.办公软件.APP,还有网站资源-- 来自:芒种学院(ID:lazy_info)  作者: ...

  10. 用python编写一个求偶数阶乘的函数_一行Python代码写阶乘函数

    原标题:一行Python代码写阶乘函数 背景 我以前用Dart写过一行的阶乘函数: fact(double n) => n < 0 ? throw ('n must be bigger t ...

最新文章

  1. Python读CSV数据
  2. PAT甲级1024 Palindromic Number:[C++题解]回文串和高精度加法
  3. GridFS删除文件代码示例
  4. CSS3 -webkit-transition(属性渐变)
  5. java记事本课程设计,java记事本课程设计
  6. Linux-----diff命令
  7. 模式匹配算法----KMP算法以及next数组的解法
  8. 赠票福利 | 2018人工智能计算大会报名开启:算力爆燃,AI进化
  9. python-简单邮件报警
  10. NLP知识包--语义分析-语义角色标注
  11. Redis单机模式搭建
  12. 升级到Firefox 3.0后解决扩展版本不兼容的方法
  13. 腾达无线usb wifi 网卡u1/u3 RTL8192EU在centos7.6/7.7的编译适配
  14. 基于采样的路径规划方法
  15. vant + Vue创建项目全过程
  16. IO、NIO和AIO的区别
  17. S3C2440 蜂鸣器 汇编语言,S3C2440的基础功能模块实现过程
  18. win10 excel和ppt变成英文了,word正常,怎么解决?
  19. Android编译中m、mm、mmm的区别
  20. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):的三种解决方式

热门文章

  1. 开关电源入门1-基本原理
  2. 用Bolt引擎实现换肤指南
  3. 电力拖动自动控制系统复习(一)
  4. Win11 22527.201更新补丁包下载
  5. 【Lingo 18.0及其安装教程】
  6. HTML CSS整理笔记
  7. linux安装开发工具
  8. 快速安装制作黑苹果macOS High Sierr系统
  9. 磁盘加密工具-TrueCrypt
  10. 诺基亚e72显示服务器繁忙,诺基亚e72用着好不好和手机出现的一些小问题总结