GitHub地址:https://github.com/ageitgey/face_recognition

本项目是世界上最简洁的人脸识别库,你可以使用Python和命令行工具提取、识别、操作人脸。

本项目的人脸识别是基于业内领先的C++开源库 dlib中的深度学习模型,用Labeled Faces in the Wild人脸数据集进行测试,有高达99.38%的准确率。但对小孩和亚洲人脸的识别准确率尚待提升。

Labeled Faces in the Wild是美国麻省大学安姆斯特分校(University of Massachusetts Amherst)制作的人脸数据集,该数据集包含了从网络收集的13,000多张面部图像。

本项目提供了简易的face_recognition命令行工具,你可以用它处理整个文件夹里的图片。

特性

从图片里找到人脸

定位图片中的所有人脸:

image

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

识别人脸关键点

识别人脸关键点,包括眼睛、鼻子、嘴和下巴。

image

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

识别人脸关键点在很多领域都有用处,但同样你也可以把这个功能玩坏,比如本项目的 digital make-up自动化妆案例(就像美图秀秀一样)。

image

识别图片中的人是谁

image

import face_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库(比如opencv)实现实时人脸检测:

image

看这个案例 实时人脸检测 。

安装

环境配置

  • Python 3.3+ or Python 2.7
  • macOS or Linux
  • Windows并不是我们官方支持的,但也许也能用

不同操作系统的安装方法

在 Mac 或者 Linux上安装本项目

第一步,安装dlib和相关Python依赖:

  • 如何在macOS或者Ubuntu上安装dlib

然后,用pip命令从pypi社区上下载本项目的pyhon模块:

pip3命令下载的是python3对应的版本,pip命令下载的是python2对应的版本

pip3 install face_recognition

如果你遇到了幺蛾子,可以用Ubuntu虚拟机安装本项目,看下面这个教程。
如何使用Adam Geitgey大神提供的Ubuntu虚拟机镜像文件安装配置虚拟机,本项目已经包含在镜像中.

在树莓派上安装

  • 树莓派安装指南

在Windows上安装

虽然本项目官方并不支持Windows,但一些大神们摸索出了在Windows上运行本项目的方法:

  • @masoudr写的教程:如何在Win10系统上安装 dlib库和 face_recognition项目

使用Ubuntu虚拟机镜像文件安装配置虚拟机,本项目已经包含在这个镜像中

  • 如何使用Adam Geitgey大神提供的Ubuntu虚拟机镜像文件安装配置虚拟机,本项目已经包含在镜像中(需要电脑中安装VMWare Player 或者 VirtualBox)

使用方法

命令行界面

当你安装好了本项目,你可以使用两种命令行工具:

  • face_recognition - 在单张图片或一个图片文件夹中认出是谁的脸。
  • face_detection - 在单张图片或一个图片文件夹中定位人脸位置。

face_recognition 命令行工具

face_recognition命令行工具可以在单张图片或一个图片文件夹中认出是谁的脸。

首先,你得有一个你已经知道名字的人脸图片文件夹,一个人一张图,图片的文件名即为对应的人的名字:

known

然后,你需要第二个图片文件夹,文件夹里面是你希望识别的图片:

unknown

然后,你在命令行中切换到这两个文件夹所在路径,然后使用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_detection 命令行工具

face_detection命令行工具可以在单张图片或一个图片文件夹中定位人脸位置(输出像素点坐标)。

在命令行中使用face_detection,传入一个图片文件夹或单张图片文件来进行人脸位置检测:

$ face_detection  ./folder_with_pictures/examples/image1.jpg,65,215,169,112
examples/image2.jpg,62,394,211,244
examples/image2.jpg,95,941,244,792

输出结果的每一行都对应图片中的一张脸,输出坐标代表着这张脸的上、右、下、左像素点坐标。

调整人脸识别的容错率和敏感度

如果一张脸识别出不止一个结果,那么这意味着他和其他人长的太像了(本项目对于小孩和亚洲人的人脸识别准确率有待提升)。你可以把容错率调低一些,使识别结果更加严格。

通过传入参数 --tolerance 来实现这个功能,默认的容错率是0.6,容错率越低,识别越严格准确。

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

如果你想看人脸匹配的具体数值,可以传入参数 --show-distance true

$ face_recognition --show-distance true ./pictures_of_people_i_know/ ./unknown_pictures//unknown_pictures/unknown.jpg,Barack Obama,0.378542298956785
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person,None

更多的例子

如果你并不在乎图片的文件名,只想知道文件夹中的图片里有谁,可以用这个管道命令:

$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/ | cut -d ',' -f2Barack Obama
unknown_person

加速人脸识别运算

如果你的CPU是多核的,你可以通过并行运算加速人脸识别。例如,如果你的CPU有四个核心,那么你可以通过并行运算提升大概四倍的运算速度。

如果你使用Python3.4或更新的版本,可以传入 --cpus <number_of_cpu_cores_to_use> 参数:

$ face_recognition --cpus 4 ./pictures_of_people_i_know/ ./unknown_pictures/

你可以传入 --cpus -1参数来调用cpu的所有核心。

子豪兄批注:树莓派3B有4个CPU核心,传入多核参数可以显著提升图片识别的速度(亲测)。

Python 模块:face_recognition

在Python中,你可以导入face_recognition模块,调用我们提供的丰富的API接口,用几行代码就可以轻松玩转各种人脸识别功能!

API 接口文档: https://face-recognition.readthedocs.io

在图片中定位人脸的位置

import face_recognitionimage = face_recognition.load_image_file("my_picture.jpg")
face_locations = face_recognition.face_locations(image)# face_locations is now an array listing the co-ordinates of each face!

看 案例:定位拜登的脸

案例:定位拜登的脸

你也可以使用深度学习模型达到更加精准的人脸定位。

注意:这种方法需要GPU加速(通过英伟达显卡的CUDA库驱动),你在编译安装dlib的时候也需要开启CUDA支持。

import face_recognitionimage = face_recognition.load_image_file("my_picture.jpg")
face_locations = face_recognition.face_locations(image, model="cnn")# face_locations is now an array listing the co-ordinates of each face!

看 案例:使用卷积神经网络深度学习模型定位拜登的脸

如果你有很多图片需要识别,同时又有GPU,那么你可以参考这个例子:案例:使用卷积神经网络深度学习模型批量识别图片中的人脸.

识别单张图片中人脸的关键点

import face_recognitionimage = face_recognition.load_image_file("my_picture.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)# face_landmarks_list is now an array with the locations of each facial feature in each face.
# face_landmarks_list[0]['left_eye'] would be the location and outline of the first person's left eye.

看这个案例 案例:提取奥巴马和拜登的面部关键点

案例:提取奥巴马和拜登的面部关键点

识别图片中的人是谁

import face_recognitionpicture_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' of my facial features that can be compared to any other picture of a 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 are of the same person with `compare_faces`!results = face_recognition.compare_faces([my_face_encoding], unknown_face_encoding)if results[0] == True:print("It's a picture of me!")
else:print("It's not a picture of me!")

看这个案例 案例:是奥巴马还是拜登?

Python 案例

所有案例都在这个链接中 也就是examples文件夹.

人脸定位

  • 案例:定位拜登的脸
  • 案例:使用卷积神经网络深度学习模型定位拜登的脸
  • 案例:使用卷积神经网络深度学习模型批量识别图片中的人脸
  • 案例:把来自网络摄像头视频里的人脸高斯模糊(需要安装OpenCV)

人脸关键点识别

  • 案例:提取奥巴马和拜登的面部关键点
  • 案例:给美国副总统拜登涂美妆

人脸识别

  • 案例:是奥巴马还是拜登?
  • 案例:人脸识别之后在原图上画框框并标注姓名
  • 案例:在不同精度上比较两个人脸是否属于一个人
  • 案例:从摄像头获取视频进行人脸识别-较慢版(需要安装OpenCV)
  • 案例:从摄像头获取视频进行人脸识别-较快版(需要安装OpenCV)
  • 案例:从视频文件中识别人脸并把识别结果输出为新的视频文件(需要安装OpenCV)
  • 案例:通过树莓派摄像头进行人脸个数统计及人脸身份识别
  • 案例:通过浏览器HTTP访问网络服务器进行人脸识别(需要安装Flask后端开发框架))
  • 案例:基于K最近邻KNN分类算法进行人脸识别

关于 face_recognition的文章和教程

  • 本项目作者写的一篇文章 Modern Face Recognition with Deep Learning

    • 主要内容:基本算法和原理
  • Face recognition with OpenCV, Python, and deep learning by Adrian Rosebrock
    • 主要内容:如何实际使用本项目
  • Raspberry Pi Face Recognition by Adrian Rosebrock
    • 主要内容:如何在树莓派上使用本项目
  • Face clustering with Python by Adrian Rosebrock
    • 主要内容:使用非监督学习算法实现把图片中的人脸高斯模糊

人脸识别的原理

如果你想更深入了解人脸识别这个黑箱的原理 读这篇文章。

子豪兄批注:一定要看这篇文章,讲的既有趣又有料。

警告说明

  • 本项目的人脸识别模型是基于成年人的,在孩子身上效果可能一般。如果图片中有孩子的话,建议把临界值设为0.6.
  • 不同人种的识别结果可能不同, 看wiki百科页面 查看更多细节。

把本项目部署在云服务器上 (Heroku, AWS等)

本项目是基于C++库dlib的,所以把本项目部署在Heroku或者AWS的云端服务器上是很明智的。

为了简化这个过程,有一个Dockerfile案例,教你怎么把face_recognition开发的app封装成Docker 容器文件,你可以把它部署在所以支持Docker镜像文件的云服务上。

出了幺蛾子?

如果出了问题,请在Github提交Issue之前查看 常见错误 。

链接:https://www.jianshu.com/p/0b37452be63e

开源人脸识别项目 —— face_recognition相关推荐

  1. 京东开源人脸识别项目faceX-zoo

    简介: FaceX-Zoo是一个专为人脸识别而生的开源库,是目前准确率最高的开源人脸识别项目.FaceX-Zoo是基于PyTorch实现的.它提供了一个训练模块,其中有各种supervisory he ...

  2. 开源人脸识别项目insightface_pytorch

    insightface_pytorch主要做了以下几个方面的工作: * 使用的相关算法 人脸检测: 由原来的retina改成了MTCNN,准确度差了不少 人脸对齐: 由原来的Dense U-Net改成 ...

  3. 通过使用5个开源的人脸识别项目来增加你的计算机视觉项目经历

    作者|MRINAL WALIA 编译|Flin 来源|medium 人脸识别是一种能够从图像或视频源的视频帧中实时识别或验证人的技术. 在今天的文章中,我们将讨论五个开源人脸识别项目,以提高你在数据科 ...

  4. 最佳 开源 人脸识别算法_开源项目的最佳社会结构是什么?

    最佳 开源 人脸识别算法 代码审查是一种实践,可促进开源项目中的快速协作,知识共享和最高质量. 代码审查的社会结构是项目的定义特征. 开源项目的最佳社会结构是什么? 在本文中,我们通过分析三个常见模型 ...

  5. 开源的动态人脸识别项目

    1.1 中科院计算所开源人脸识别引擎SeetaFace seetaface/SeetaFaceEngine 1.2

  6. 史上最简单的人脸识别项目登上GitHub趋势榜

    来源 | GitHub Trending整理 | Freesia译者 | TommyZihao出品 | AI科技大本营(ID: rgznai100) 导读:近日,一个名为 face_recogniti ...

  7. 基于Python的开源人脸识别库:离线识别率高达99.38%

    基于Python的开源人脸识别库:离线识别率高达99.38% 2019年04月18日 18:13:18 AI终结者 阅读数 1233 项目地址:https://github.com/ageitgey/ ...

  8. Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38%

    Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38% 仅用 Python 和命令行就可以实现人脸识别的库开源了.该库使用 dlib 顶尖的深度学习人脸识别技术构建 ...

  9. python开源的人脸识别库_什么是 SeetaFace 开源人脸识别引擎

    区分不同的人是很多智能系统的必备能力.为实现此目的,一种可能的技术手段是通过对人脸的光学成像来感知人.识别人,即所谓的人脸识别技术.经过几十年的研发积累,特别是近年来深度学习技术的涌现,人脸识别取得了 ...

  10. SeetaFace开源人脸识别引擎

    开源网址 目前,SeetaFace开源人脸识别引擎已全部发布在Github上供国内外同行和工业界使用,项目网址为:https://github.com/seetaface/SeetaFaceEngin ...

最新文章

  1. Spring基础专题——引言
  2. 使用iOS原生sqlite3框架对sqlite数据库进行操作
  3. ABAP中使用浏览器打开网页
  4. 第四讲 deque
  5. win10安装java不见了,win10安装java以及java配置遇到的坑
  6. 使用FastReport报表工具生成报表PDF文档
  7. js实现连接的两种放法
  8. 一个android工程生成两个aar,android studio生成aar包并在其他工程引用aar包(示例代码)...
  9. Leetcode 142 Linked List Cycle II
  10. jsp el表达式无法正常显示解决方法
  11. 软件开发需求整理概要
  12. 《别闹了,费曼先生》1
  13. #USB加密狗信息安全与USB_Host 硬件读写加密狗
  14. win10撤销计算机密码,电脑密码怎么取消 Win10如何取消开机密码
  15. pt100热电阻计算公式C语言,pt100计算公式,PT100实际应用中的两种形式
  16. 解决了sql server 用户 sa 登录失败的问题
  17. 前端之jquery基础
  18. android网络编程-socket基础
  19. 概要设计 重要性_艺术留学——服装设计
  20. 建站百科|全网最全、最系统的域名申请教程,不看吃亏!!!

热门文章

  1. 运行linux浏览器,开源也疯狂:5款Linux浏览器推荐
  2. 第二人生的源码分析(3)程序入口点
  3. 基于单片机的函数信号波形发生器系统设计(#0428)
  4. AndroidX是什么?
  5. 新媒体运营胡耀文教程:从运营角度,教你4招破解销售推销套路
  6. 移动机会网络中的节点分簇路由算法
  7. 数据治理-数据质量-数据质量参考架构
  8. 服务器托管单线、双线以及多线如何区别
  9. 网站托管服务器配置,了解托管服务器的三个小技巧
  10. 点到直线的距离公式: 一元微积分