基于Python的开源人脸识别库:离线识别率高达99.38% | 机器之心

标签: | 发表时间:2018-09-30 13:44 | 作者:
出处:https://www.jiqizhixin.com

仅用 Python 和命令行就可以实现人脸识别的库开源了。该库使用 dlib 顶尖的深度学习人脸识别技术构建,在户外脸部检测数据库基准(Labeled Faces in the Wild benchmark)上的准确率高达 99.38%。

该项目是要构建一款免费、开源、实时、离线的网络 app,支持组织者使用人脸识别技术或二维码识别所有受邀人员。

有了世界上最简单的人脸识别库,使用 Python 或命令行,即可识别和控制人脸。

该库使用 dlib 顶尖的深度学习人脸识别技术构建,在户外脸部检测数据库基准(Labeled Faces in the Wild benchmark)上的准确率高达 99.38%。

这也提供了一个简单的 face_recognition 命令行工具,你可以打开命令行中任意图像文件夹,进行人脸识别!

项目地址: https://github.com/ageitgey/face_recognition#face-recognition

特征

找出图片中的人脸

找出下面图片中所有的人脸:


      importface_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_locations = face_recognition.face_locations(image)

找到并且控制图像中的脸部特征

找到并勾勒出每个人的眼睛、鼻子、嘴和下巴。


      importface_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)

找出脸部特征对很多重要的事情都非常有用。但是你也可以用它来做一些「蠢事」,比如数字化妆(美图):


识别图片中的人脸

识别每张图片中的人物。


      importface_recognition
known_image = face_recognition.load_image_file("biden.jpg")
unknown_image = face_recognition.load_image_file("unknown.jpg")

biden_encoding = face_recognition.face_encodings(known_image)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]

results = face_recognition.compare_faces([biden_encoding], unknown_encoding)

你甚至可以使用该库和其他的 Python 库执行实时人脸识别:


此处可查看代码示例: https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_webcam_faster.py

安装

要求:

使用pin3从pypi安装这一模块:

      pip3 install face_recognition

重要提示:pip 尝试编译 dlib 依赖时很可能会遇到一些问题。如果遇到问题,前往该地址( https://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf)从来源(而不是 pip)中安装 dlib,从而修复该错误。

手动安装 dlib 后,再次运行 pip3 install face_recognition,完成安装。

如果安装方面还有问题,你还可以试试预配置的 VM( https://medium.com/@ageitgey/try-deep-learning-in-python-now-with-a-fully-pre-configured-vm-1d97d4c3e9b

用途

命令行界面

安装 face_recognition 时,你会得到一个名为 face_recognition 的简单命令行程序,该程序可用于识别照片或装满照片的文件夹中的人脸。

首先,你需要提供一个包含图片的文件夹,且每张图片中的每个人你都认识。每个人有一个图像文件,文件名就是图片中人物的名字:


然后,你需要再建一个文件夹,包含你想要识别的图像文件:


之后,你仅需要在已知人物文件夹和未知人物文件夹(或单个图像)中运行 face_recognition 命令,该程序会告诉你每个图像中的人物是谁:

      $ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures//unknown_pictures/unknown.jpg,Barack Obama
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person

每张人脸的输出结果只有一行,由文件名和找到的人物名组成,中间用逗号分隔。

 unknown_person 是未与已知人物文件夹中任何照片相匹配的人脸。

如果你只想知道每张照片中的人物姓名,不在意文件名,那么你可以采用以下做法:

      $ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/ | cut -d','-f2

Barack Obama
unknown_person

如果你的电脑配有多核 CPU,你就可以同时执行多个人脸识别任务。例如,如果你的系统有 4 个 CPU 核,你可以同时使用这 4 个 CPU 核,那么同样时间内处理的图像数量是原来的四倍。

如果你使用 Python 3.4 或更新的版本,传入--cpus <number_of_cpu_cores_to_use>参数:

      $ face_recognition -cpus4./pictures_of_people_i_know/ ./unknown_pictures/

你还可以传入--cpus -1,来使用系统中所有的 CPU 核。

Python 模块

使用 face_recognition 模块,几行代码轻松控制人脸,so easy!

API 文件地址 :https://face-recognition.readthedocs.io 

自动定位图像中人物的脸部特征

      importface_recognition

image = face_recognition.load_image_file("my_picture.jpg")
face_locations = face_recognition.face_locations(image)

# face_locations is now an array listing the co-ordinatesofeach face!

图像人脸识别

      importface_recognition

picture_of_me = face_recognition.load_image_file("me.jpg")
my_face_encoding = face_recognition.face_encodings(picture_of_me)[0]

# my_face_encoding now contains a universal'encoding'ofmy facial features that can be compared to any other pictureofa face!

unknown_picture = face_recognition.load_image_file("unknown.jpg")
unknown_face_encoding = face_recognition.face_encodings(unknown_picture)[0]

# Now we can see the two face encodings areofthe same personwith`compare_faces`!

results = face_recognition.compare_faces([my_face_encoding], unknown_face_encoding)ifresults[0] == True:
    print("It's a picture of me!")else:
    print("It's not a picture of me!")

注意事项

该人脸识别模型基于成年人照片训练,因此对儿童照片的识别效果不好。该模型默认比较阈值是 0.6,容易混淆儿童的面部。

将该模型配置到云主机(Heroku、AWS 等)

face_recognition 赖以存在的 dlib 是用 C++语言写的,因此将该内置该模型的 app 配置到 Heroku 或 AWS 等云主机提供商就很复杂。在该 repo 中有一个 Dockerfile 示例,展示如何在 Docker 容器中运行内置 face_recognition 模型的 app(详见该网址:https://www.docker.com/)。参考该示例,您能够将该模型配置到任何支持 Docker 图像的服务。

常见问题

问题:使用 face_recognition 或运行样本时,出现 Illegal instruction (core dumped)。

解决方案:dlib 需要在 SSE4 或 AVX 支持下编译,但是你的 CPU 太旧,无法支持编译。你需要根据此处( https://github.com/ageitgey/face_recognition/issues/11#issuecomment-287398611)所示修改代码,然后对 dilb 进行重新编译。

问题:运行摄像头样本时,出现 RuntimeError: Unsupported image type, must be 8bit gray or RGB image.

解决方案:你的摄像头可能并未在 OpenCV 上正确设置。点击此处( https://github.com/ageitgey/face_recognition/issues/21#issuecomment-287779524)了解更多。

问题:运行 pip2 install face_recognition 时出现 MemoryError。

解决方案:face_recognition_models 文件太大,不适合你可用的 pip 缓存内存。试一下 pip2 --no-cache-dir install face_recognition,解决该问题。

问题:AttributeError: 'module' object has no attribute 'face_recognition_model_v1'

解决方案:你安装的 dlib 版本过旧,需要 19.4 或者更新的版本。请升级 dlib 版本。

问题:TypeError: imread() got an unexpected keyword argument 'mode'

解决方案:你安装的 scipy 版本过旧,需要 0.17 或者更新的版本。请升级 scipy 版本。

相关 [python 开源 人脸识别] 推荐:

基于Python的开源人脸识别库:离线识别率高达99.38% | 机器之心

- -
仅用 Python 和命令行就可以实现人脸识别的库开源了. 该库使用 dlib 顶尖的深度学习人脸识别技术构建,在户外脸部检测数据库基准(Labeled Faces in the Wild benchmark)上的准确率高达 99.38%. 该项目是要构建一款免费、开源、实时、离线的网络 app,支持组织者使用人脸识别技术或二维码识别所有受邀人员.

用python库face_recognition进行人脸识别

- - 开源软件 - ITeye博客
期间在安装依赖包dlib时遇到问题,解决见:  http://kissmett.iteye.com/blog/2409857. 3.通过摄像头实时在获取的帧上进行人脸识别(较卡顿). basefacefilespath ="images"#faces文件夹中放待识别任务正面图,文件名为人名,将显示于结果中 baseface_titles=[] #图片名字列表 baseface_face_encodings=[] #识别所需人脸编码结构集 #读取人脸资源 for fn in os.listdir(basefacefilespath): #fn 人脸文件名.

利用python打造自己的人脸识别系统 - 简书

- -
正像著名物理学家,理查德•费曼说的一样,如果要真正理解一个东西,我们必须要能够把它创造出来. 动手去做,永远比被动地听有用,我就是这么想并这么实践的. 本文介绍了我自己动手做的一种基于卷积神经网络的人脸识别系统,以python为语言基础,综合应用了keras、opencv、numpy、sklearn等多种技术.

Python 3 利用 Dlib 实现摄像头实时人脸识别 - coneypo - 博客园

- -
  利用 Python 开发,借助 Dlib 库捕获摄像头中的人脸,提取人脸特征,通过计算特征值之间的欧氏距离,来和预存的人脸特征进行对比,判断是否匹配,达到人脸识别的目的;.   可以从摄像头中抠取人脸图片存储到本地,然后提取构建预设人脸特征;.   根据抠取的 / 已有的同一个人多张人脸图片提取 128D 特征值,然后计算该人的 128D 特征均值;.

迄今最全人脸识别开源 - qq_34654240的博客 - CSDN博客

- -
人脸识别是目前深度学习领域应用最为广泛的领域之一,各大框架都有不错的开源项目,可以在短时间内实现刷榜. Demystifying Face Recognition,由浅入深实验了很多方法. 谷歌人脸识别系统FaceNet解析. 如何走近深度学习人脸识别:. https://github.com/moli232777144/mobilefacenet-mxnet:轻量级版本99.5%.

开源Python UI框架:Kivy

- xin - 秀码趣 - ShowMuch.com
Kivy是一个可用以快速创建新颖用户界面应用的开源Python库,比如可以用它来创建多点触摸的应用程序,它具备跨平台特性,目前发行有Windows、MacOS、Linux以及Android版本. 作为一个开源框架,Kivy具备以下特性:A.百分百免费使用;B.基于 LGPL3协议 开源,对商业化应用友好;C.跨平台,支持Windows、MacOS、Linux以及Android;D.允许在不同的平台上运行同一套代码;E.稳定以及有完善的API文档;F.通过OpenGL ES 2.0对硬件进行加速;G.自然支持大部分的输入协议或者输入设备;H.基于Python的简单API……等等.

【人脸识别】初识人脸识别

- - CSDN博客推荐文章
由于导师给我们布置了每周阅读两篇大牛论文,并写ppt的任务. 反正ppt都写了,所以我想干脆直接把ppt的内容再整理一下写成博客. 近期的阅读论文都是 人脸识别相关的主题. 如果你研究过人脸识别,或者对这方面有兴趣,那么你一定听说过Paul Viola. 他可以算得上是人脸检测识别的始祖,他的一篇大作《RobustReal-time Object Detection》可以说是人脸识别领域最重要的一篇论文.

开源Python网络爬虫框架Scrapy

- - 互联网实践
所谓网络爬虫,就是一个在网上到处或定向抓取数据的程序,当然,这种说法不够专业,更专业的描述就是,抓取特定网站网页的HTML数据. 不过由于一个网站的网页很多,而我们又不可能事先知道所有网页的URL地址,所以,如何保证我们抓取到了网站的所有HTML页面就是一个有待考究的问题了. 一般的方法是,定义一个入口页面,然后一般一个页面会有其他页面的URL,于是从当前页面获取到这些URL加入到爬虫的抓取队列中,然后进入到新新页面后再递归的进行上述的操作,其实说来就跟深度遍历或广度遍历一样.

人脸识别黑产

- - 奇客Solidot–传递最新科技情报
新京报 报道了人脸识别的地下黑产交易,有许多应用都需要人脸验证,创造了对人脸验证的一种需求,催生了一个地下产业链. 报道称,人脸识别的优质数据需要一百元一套,而便宜量大的仅需要 0.5元一套. 报道称一小部分来自网络刷单兼职人员,大部分来自企业内部员工. 人脸识别的黑产商贩称,市面上流通的手持身份证照片大多是在小额贷款平台和公司野蛮发展期间,泄露出来的,还有部分是从各行业收集而来的,这种信息交易和使用一般情况下不会被人发现,“当时很多人借钱不还,平台就把这些信息拿出来卖钱了,刚开始挺贵的,现在层层转卖就便宜了.

2013年最好的Python开源项目汇总

- - ITeye资讯频道
2013年Python社区诞生了很多实用的开发工具,这些工具在一定程度上可以帮助你节省更多的时间. 本文为你汇总了这些工具,它们大部分都是开源的,你还可以通过源码来学习更多的Python开发知识. Radon是一个用于从源代码中计算出各种指标的Python工具,包括:. McCabe复杂性计算,也就是循环复杂度.