文档章节

手把手教你用1行代码实现人脸识别 -- Python Face_recognition

kangvcar
 kangvcar
发布于 2017/10/26 17:33
字数 1508
阅读 5158
收藏 319

环境要求:

环境搭建:

1. 安装 Ubuntu17.10 > 安装步骤在这里

2. 安装 Python2.7.14 (Ubuntu17.10 默认Python版本为2.7.14)

3. 安装 git 、cmake 、 python-pip

# 安装 git
$ sudo apt-get install -y git
# 安装 cmake
$ sudo apt-get install -y cmake
# 安装 python-pip
$ sudo apt-get install -y python-pip

4. 安装编译dlib

安装face_recognition这个之前需要先安装编译dlib

# 编译dlib前先安装 boost
$ sudo apt-get install libboost-all-dev

# 开始编译dlib
# 克隆dlib源代码
$ git clone https://github.com/davisking/dlib.git
$ cd dlib
$ mkdir build
$ cd build
$ cmake .. -DDLIB_USE_CUDA=0 -DUSE_AVX_INSTRUCTIONS=1
$ cmake --build .(注意中间有个空格)
$ cd ..
$ python setup.py install --yes USE_AVX_INSTRUCTIONS --no DLIB_USE_CUDA

5. 安装 face_recognition

# 安装 face_recognition
$ pip install face_recognition
# 安装face_recognition过程中会自动安装 numpy、scipy 等

环境搭建完成后,在终端输入 face_recognition 命令查看是否成功

环境搭建完成后,在终端输入 face_recognition 命令查看是否成功

实现人脸识别:


示例一(1行代码实现人脸识别):

1. 首先你需要提供一个文件夹,里面是所有你希望系统认识的人的图片。其中每个人一张图片,图片以人的名字命名:

known_people文件夹下有babe、成龙、容祖儿的照片

known_people文件夹下有babe、成龙、容祖儿的照片

2. 接下来,你需要准备另一个文件夹,里面是你要识别的图片:

unknown_pic文件夹下是要识别的图片,其中韩红是机器不认识的

unknown_pic文件夹下是要识别的图片,其中韩红是机器不认识的

3. 然后你就可以运行face_recognition命令了,把刚刚准备的两个文件夹作为参数传入,命令就会返回需要识别的图片中都出现了谁:

识别成功!!!

识别成功!!!


示例二(识别图片中的所有人脸并显示出来):

# filename : find_faces_in_picture.py
# -*- coding: utf-8 -*-
# 导入pil模块 ,可用命令安装 apt-get install python-Imaging
from PIL import Image
# 导入face_recogntion模块,可用命令安装 pip install face_recognition
import face_recognition

# 将jpg文件加载到numpy 数组中
image = face_recognition.load_image_file("/opt/face/unknown_pic/all_star.jpg")

# 使用默认的给予HOG模型查找图像中所有人脸
# 这个方法已经相当准确了,但还是不如CNN模型那么准确,因为没有使用GPU加速
# 另请参见: find_faces_in_picture_cnn.py
face_locations = face_recognition.face_locations(image)

# 使用CNN模型
# face_locations = face_recognition.face_locations(image, number_of_times_to_upsample=0, model="cnn")

# 打印:我从图片中找到了 多少 张人脸
print("I found {} face(s) in this photograph.".format(len(face_locations)))

# 循环找到的所有人脸
for face_location in face_locations:

        # 打印每张脸的位置信息
        top, right, bottom, left = face_location
        print("A face is located at pixel location Top: {}, Left: {}, Bottom: {}, Right: {}".format(top, left, bottom, right))

        # 指定人脸的位置信息,然后显示人脸图片
        face_image = image[top:bottom, left:right]
        pil_image = Image.fromarray(face_image)
        pil_image.show()

如下图为用于识别的图片

用于识别的图片

# 执行python文件
$ python find_faces_in_picture.py

从图片中识别出7张人脸,并显示出来,如下图

从图片中识别出7张人脸,并显示出来


示例三(自动识别人脸特征):

# filename : find_facial_features_in_picture.py
# -*- coding: utf-8 -*-
# 导入pil模块 ,可用命令安装 apt-get install python-Imaging
from PIL import Image, ImageDraw
# 导入face_recogntion模块,可用命令安装 pip install face_recognition
import face_recognition

# 将jpg文件加载到numpy 数组中
image = face_recognition.load_image_file("biden.jpg")

#查找图像中所有面部的所有面部特征
face_landmarks_list = face_recognition.face_landmarks(image)

print("I found {} face(s) in this photograph.".format(len(face_landmarks_list)))

for face_landmarks in face_landmarks_list:

   #打印此图像中每个面部特征的位置
    facial_features = [
        'chin',
        'left_eyebrow',
        'right_eyebrow',
        'nose_bridge',
        'nose_tip',
        'left_eye',
        'right_eye',
        'top_lip',
        'bottom_lip'
    ]

    for facial_feature in facial_features:
        print("The {} in this face has the following points: {}".format(facial_feature, face_landmarks[facial_feature]))

   #让我们在图像中描绘出每个人脸特征!
    pil_image = Image.fromarray(image)
    d = ImageDraw.Draw(pil_image)

    for facial_feature in facial_features:
        d.line(face_landmarks[facial_feature], width=5)

    pil_image.show()

自动识别出人脸特征(轮廓)

自动识别出人脸特征


示例四(识别人脸鉴定是哪个人):

# filename : recognize_faces_in_pictures.py
# -*- conding: utf-8 -*-
# 导入face_recogntion模块,可用命令安装 pip install face_recognition
import face_recognition

#将jpg文件加载到numpy数组中
babe_image = face_recognition.load_image_file("/opt/face/known_people/babe.jpeg")
Rong_zhu_er_image = face_recognition.load_image_file("/opt/face/known_people/Rong zhu er.jpg")
unknown_image = face_recognition.load_image_file("/opt/face/unknown_pic/babe2.jpg")

#获取每个图像文件中每个面部的面部编码
#由于每个图像中可能有多个面,所以返回一个编码列表。
#但是由于我知道每个图像只有一个脸,我只关心每个图像中的第一个编码,所以我取索引0。
babe_face_encoding = face_recognition.face_encodings(babe_image)[0]
Rong_zhu_er_face_encoding = face_recognition.face_encodings(Rong_zhu_er_image)[0]
unknown_face_encoding = face_recognition.face_encodings(unknown_image)[0]

known_faces = [
    babe_face_encoding,
    Rong_zhu_er_face_encoding
]

#结果是True/false的数组,未知面孔known_faces阵列中的任何人相匹配的结果
results = face_recognition.compare_faces(known_faces, unknown_face_encoding)

print("这个未知面孔是 Babe 吗? {}".format(results[0]))
print("这个未知面孔是 容祖儿 吗? {}".format(results[1]))
print("这个未知面孔是 我们从未见过的新面孔吗? {}".format(not True in results))

显示结果下如图

显示结果如图


示例五(识别人脸特征并美颜):

# filename : digital_makeup.py
# -*- coding: utf-8 -*-
# 导入pil模块 ,可用命令安装 apt-get install python-Imaging
from PIL import Image, ImageDraw
# 导入face_recogntion模块,可用命令安装 pip install face_recognition
import face_recognition

#将jpg文件加载到numpy数组中
image = face_recognition.load_image_file("biden.jpg")

#查找图像中所有面部的所有面部特征
face_landmarks_list = face_recognition.face_landmarks(image)

for face_landmarks in face_landmarks_list:
    pil_image = Image.fromarray(image)
    d = ImageDraw.Draw(pil_image, 'RGBA')

    #让眉毛变成了一场噩梦
    d.polygon(face_landmarks['left_eyebrow'], fill=(68, 54, 39, 128))
    d.polygon(face_landmarks['right_eyebrow'], fill=(68, 54, 39, 128))
    d.line(face_landmarks['left_eyebrow'], fill=(68, 54, 39, 150), width=5)
    d.line(face_landmarks['right_eyebrow'], fill=(68, 54, 39, 150), width=5)

    #光泽的嘴唇
    d.polygon(face_landmarks['top_lip'], fill=(150, 0, 0, 128))
    d.polygon(face_landmarks['bottom_lip'], fill=(150, 0, 0, 128))
    d.line(face_landmarks['top_lip'], fill=(150, 0, 0, 64), width=8)
    d.line(face_landmarks['bottom_lip'], fill=(150, 0, 0, 64), width=8)

    #闪耀眼睛
    d.polygon(face_landmarks['left_eye'], fill=(255, 255, 255, 30))
    d.polygon(face_landmarks['right_eye'], fill=(255, 255, 255, 30))

    #涂一些眼线
    d.line(face_landmarks['left_eye'] + [face_landmarks['left_eye'][0]], fill=(0, 0, 0, 110), width=6)
    d.line(face_landmarks['right_eye'] + [face_landmarks['right_eye'][0]], fill=(0, 0, 0, 110), width=6)

    pil_image.show()

美颜前后对比如下图

美颜前后对比


本文如果对你有帮助请打赏($ _ $) 。 你的打赏是对我最大的肯定!!!

© 著作权归作者所有

共有 人打赏支持
kangvcar
粉丝 61
博文 67
码字总数 74741
作品 0
广州
运维
私信 提问
加载中

评论(34)

龙影
龙影
有mac的同学们可以试试这样安装
pyton3.0版本安装
注意网络一定要快
brew install cmake
brew install boost
brew install boost-python --with-python3
pip3 install dlib #安装dlib依赖包
pip3 install face_recognition
龙影
龙影

引用来自“kangvcar”的评论

引用来自“龙影”的评论

引用来自“kangvcar”的评论

引用来自“龙影”的评论

非常感谢分享,已经通过你的帖子,成功完成了一套人脸识别验证api系统。刚开始在mac上安装了3天死活不成,然后一天在Ubuntu16上安装了Python3的版本。然后一天测试方法,一天完成功能代码,然后就修修补补,加起来5天就出了。非常不错的。哎,可惜都是现学现用。以前的皮毛都忘光了。
哈哈,很高兴你成功了,其实我也是这么琢磨琢磨才有了这篇文章。这算是一个能够快速让你体验一下人脸识别的例子。但这仅仅是开始哦。

回复@kangvcar : 可是我在Ubuntu17上安装失败了。macOS也不支持,比较遗憾。好在Ubuntu16可以用

回复@龙影 : 我是在Ubuntu17.10 下的哦。你再钻研钻研

回复@kangvcar : 我也纳闷啊,始终编译错误 dlib过不去。我多试试看看
kangvcar
kangvcar

引用来自“龙影”的评论

引用来自“kangvcar”的评论

引用来自“龙影”的评论

非常感谢分享,已经通过你的帖子,成功完成了一套人脸识别验证api系统。刚开始在mac上安装了3天死活不成,然后一天在Ubuntu16上安装了Python3的版本。然后一天测试方法,一天完成功能代码,然后就修修补补,加起来5天就出了。非常不错的。哎,可惜都是现学现用。以前的皮毛都忘光了。
哈哈,很高兴你成功了,其实我也是这么琢磨琢磨才有了这篇文章。这算是一个能够快速让你体验一下人脸识别的例子。但这仅仅是开始哦。

回复@kangvcar : 可是我在Ubuntu17上安装失败了。macOS也不支持,比较遗憾。好在Ubuntu16可以用

回复@龙影 : 我是在Ubuntu17.10 下的哦。你再钻研钻研
龙影
龙影

引用来自“kangvcar”的评论

引用来自“龙影”的评论

非常感谢分享,已经通过你的帖子,成功完成了一套人脸识别验证api系统。刚开始在mac上安装了3天死活不成,然后一天在Ubuntu16上安装了Python3的版本。然后一天测试方法,一天完成功能代码,然后就修修补补,加起来5天就出了。非常不错的。哎,可惜都是现学现用。以前的皮毛都忘光了。
哈哈,很高兴你成功了,其实我也是这么琢磨琢磨才有了这篇文章。这算是一个能够快速让你体验一下人脸识别的例子。但这仅仅是开始哦。

回复@kangvcar : 可是我在Ubuntu17上安装失败了。macOS也不支持,比较遗憾。好在Ubuntu16可以用
kangvcar
kangvcar

引用来自“龙影”的评论

非常感谢分享,已经通过你的帖子,成功完成了一套人脸识别验证api系统。刚开始在mac上安装了3天死活不成,然后一天在Ubuntu16上安装了Python3的版本。然后一天测试方法,一天完成功能代码,然后就修修补补,加起来5天就出了。非常不错的。哎,可惜都是现学现用。以前的皮毛都忘光了。
哈哈,很高兴你成功了,其实我也是这么琢磨琢磨才有了这篇文章。这算是一个能够快速让你体验一下人脸识别的例子。但这仅仅是开始哦。
龙影
龙影
非常感谢分享,已经通过你的帖子,成功完成了一套人脸识别验证api系统。刚开始在mac上安装了3天死活不成,然后一天在Ubuntu16上安装了Python3的版本。然后一天测试方法,一天完成功能代码,然后就修修补补,加起来5天就出了。非常不错的。哎,可惜都是现学现用。以前的皮毛都忘光了。
微光森林
微光森林
��
Vooruit
Vooruit
babe
kangvcar
kangvcar

引用来自“lblin”的评论

这玩意有用么。。同一个人,例如angelbaby,最近不是下巴整合牙齿整容了么,脸没有以前尖了。机器能识别?连我都识别不出来

回复@lblin : 看来你对人工智能不怎么感兴趣哦
l
lblin
这玩意有用么。。同一个人,例如angelbaby,最近不是下巴整合牙齿整容了么,脸没有以前尖了。机器能识别?连我都识别不出来
案例 :手把手教你运用深度学习构建视频人脸识别模型(Python实现)

作者:Faizan Shaikh ;翻译:季洋;校对:王雨桐; 本文约2700字,建议阅读10+分钟。 本文将展示如何使用开源工具完成一个人脸识别的算法。 引言 计算机视觉这个精彩领域在最近几年突飞猛进...

数据分析v
02/13
0
0
人脸识别的简要介绍(附实例、Python代码)

作者:Guest Blog;翻译:王雨桐;校对:蒋雨畅; 本文约2500字,建议阅读10分钟。 本文将介绍人脸识别的基本思路和对代码进行简要分析。 介绍 你是否意识到,每当你上传照片到Facebook上,平...

数据分析v
2018/11/10
0
0
20行Python代码给微信头像戴帽子

作者 | Leauky,北理工硕士在读,非CS专业的Python爱好者。 朋友圈里@微信官方要求戴圣诞帽的活动曾经火爆一时,有些会玩的小伙伴都悄咪咪地用美图秀秀一类的 app 给自己头像 p 一顶,然后可...

AI科技大本营
01/16
0
0
Github开源人脸识别项目face_recognition

Github开源人脸识别项目face_recognition 译者注: 本项目face_recognition是一个强大、简单、易上手的人脸识别开源项目,并且配备了完整的开发文档和应用案例,特别是兼容树莓派系统。 为了...

同济子豪兄
2018/10/01
0
0
Python中大名鼎鼎的face_recognition使用

背景 face_recognition是号称世界上最简单的人脸识别工具和Python库。虽然,是国外开源的项目(良心的MIT开源协议),竟然有官方的中文文档支持,从未见过如此亲近天朝人民的开源项目了。 问...

亚林瓜子
2018/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

转--C++ operator关键字(重载操作符)

operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解: 一方面要使运算...

天王盖地虎626
29分钟前
0
0
工作流题目

1. 当 创建流程审批系统时,我们需要 具备 哪些 功能? 答:(1) 流程管理 (2) 流程发起 (3) 流程 审批 (4) 流程 查询

杨凯123
55分钟前
2
0
每个 JavaScript 工程师都应懂的33个概念

简介 这个项目是为了帮助开发者掌握 JavaScript 概念而创立的。它不是必备,但在未来学习(JavaScript)中,可以作为一篇指南。 本篇文章是参照 @leonardomso 创立,英文版项目地址在这里。 ...

前端小攻略
今天
1
0
使用keepalived实现nginx的高可用

概述 是这样子的,我想让家中所有的应用服务都从nginx中出去,让nginx处于访问的最边缘地带,为了让nginx可靠性加强,所以nginx就得实现高可用,分别是下面两台机器要做nginx的集群 10.10.10...

bboysoulcn
今天
3
0
Mysql索引机制B+Tree

1、问题引入 有一个用户表,为了查询的效率,需要基于id去构建索引。构建索引我们需要考虑两个方面的问题,1个是查询的效率,1个是索引数据的存储问题。该表的记录需要支持百万、千万、甚至上...

万山红遍
今天
48
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部