手把手教你用1行命令实现人脸识别

环境要求

  • Ubuntu 17.10
  • Python 2.7.14

环境搭建

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

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

3、 安装 git 、cmake 、 python-pip


  1. # 安装 git 
  2. $ sudo apt-get install -y git 
  3. # 安装 cmake 
  4. $ sudo apt-get install -y cmake 
  5. # 安装 python-pip 
  6. $ sudo apt-get install -y python-pip  

4、 安装编译 dlib

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


  1. # 编译dlib前先安装 boost 
  2. $ sudo apt-get install libboost-all-dev 
  3.  
  4. # 开始编译dlib 
  5. # 克隆dlib源代码 
  6. $ git clone https://github.com/davisking/dlib.git 
  7. $ cd dlib 
  8. $ mkdir build 
  9. $ cd build 
  10. $ cmake .. -DDLIB_USE_CUDA=0 -DUSE_AVX_INSTRUCTIONS=1 
  11. $ cmake --build .(注意中间有个空格) 
  12. $ cd .. 
  13. $ python setup.py install --yes USE_AVX_INSTRUCTIONS --no DLIB_USE_CUDA  

5、 安装 face_recognition


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

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

实现人脸识别

示例一(1 行命令实现人脸识别):

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

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

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

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

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

识别成功!!!

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


  1. # filename : find_faces_in_picture.py 
  2. # -*- coding: utf-8 -*- 
  3. # 导入pil模块 ,可用命令安装 apt-get install python-Imaging 
  4. from PIL import Image 
  5. # 导入face_recogntion模块,可用命令安装 pip install face_recognition 
  6. import face_recognition 
  7.  
  8. # 将jpg文件加载到numpy 数组中 
  9. image = face_recognition.load_image_file("/opt/face/unknown_pic/all_star.jpg") 
  10.  
  11. # 使用默认的给予HOG模型查找图像中所有人脸 
  12. # 这个方法已经相当准确了,但还是不如CNN模型那么准确,因为没有使用GPU加速 
  13. # 另请参见: find_faces_in_picture_cnn.py 
  14. face_locations = face_recognition.face_locations(image) 
  15.  
  16. # 使用CNN模型 
  17. # face_locations = face_recognition.face_locations(image, number_of_times_to_upsample=0, model="cnn") 
  18.  
  19. # 打印:我从图片中找到了 多少 张人脸 
  20. print("I found {} face(s) in this photograph.".format(len(face_locations))) 
  21.  
  22. # 循环找到的所有人脸 
  23. for face_location in face_locations: 
  24.  
  25.         # 打印每张脸的位置信息 
  26.         top, right, bottom, left = face_location 
  27.         print("A face is located at pixel location Top: {}, Left: {}, Bottom: {}, Right: {}".format(top, left, bottom, right)) 
  28.  
  29.         # 指定人脸的位置信息,然后显示人脸图片 
  30.         face_image = image[top:bottom, left:right] 
  31.         pil_image = Image.fromarray(face_image) 
  32.         pil_image.show()  

用于识别的图片


  1. # 执行python文件 
  2. $ python find_faces_in_picture.py  

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

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


  1. # filename : find_facial_features_in_picture.py 
  2. # -*- coding: utf-8 -*- 
  3. # 导入pil模块 ,可用命令安装 apt-get install python-Imaging 
  4. from PIL import Image, ImageDraw 
  5. # 导入face_recogntion模块,可用命令安装 pip install face_recognition 
  6. import face_recognition 
  7.  
  8. # 将jpg文件加载到numpy 数组中 
  9. image = face_recognition.load_image_file("biden.jpg") 
  10.  
  11. #查找图像中所有面部的所有面部特征 
  12. face_landmarks_list = face_recognition.face_landmarks(image) 
  13.  
  14. print("I found {} face(s) in this photograph.".format(len(face_landmarks_list))) 
  15.  
  16. for face_landmarks in face_landmarks_list: 
  17.  
  18.    #打印此图像中每个面部特征的位置 
  19.     facial_features = [ 
  20.         'chin', 
  21.         'left_eyebrow', 
  22.         'right_eyebrow', 
  23.         'nose_bridge', 
  24.         'nose_tip', 
  25.         'left_eye', 
  26.         'right_eye', 
  27.         'top_lip', 
  28.         'bottom_lip' 
  29.     ] 
  30.  
  31.     for facial_feature in facial_features: 
  32.         print("The {} in this face has the following points: {}".format(facial_feature, face_landmarks[facial_feature])) 
  33.  
  34.    #让我们在图像中描绘出每个人脸特征! 
  35.     pil_image = Image.fromarray(image) 
  36.     d = ImageDraw.Draw(pil_image) 
  37.  
  38.     for facial_feature in facial_features: 
  39.         d.line(face_landmarks[facial_feature], width=5) 
  40.  
  41.     pil_image.show() 

自动识别出人脸特征

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


  1. # filename : recognize_faces_in_pictures.py 
  2. # -*- conding: utf-8 -*- 
  3. # 导入face_recogntion模块,可用命令安装 pip install face_recognition 
  4. import face_recognition 
  5.  
  6. #将jpg文件加载到numpy数组中 
  7. babe_image = face_recognition.load_image_file("/opt/face/known_people/babe.jpeg") 
  8. Rong_zhu_er_image = face_recognition.load_image_file("/opt/face/known_people/Rong zhu er.jpg") 
  9. unknown_image = face_recognition.load_image_file("/opt/face/unknown_pic/babe2.jpg") 
  10.  
  11. #获取每个图像文件中每个面部的面部编码 
  12. #由于每个图像中可能有多个面,所以返回一个编码列表。 
  13. #但是由于我知道每个图像只有一个脸,我只关心每个图像中的第一个编码,所以我取索引0。 
  14. babe_face_encoding = face_recognition.face_encodings(babe_image)[0] 
  15. Rong_zhu_er_face_encoding = face_recognition.face_encodings(Rong_zhu_er_image)[0] 
  16. unknown_face_encoding = face_recognition.face_encodings(unknown_image)[0] 
  17.  
  18. known_faces = [ 
  19.     babe_face_encoding, 
  20.     Rong_zhu_er_face_encoding 
  21.  
  22. #结果是True/false的数组,未知面孔known_faces阵列中的任何人相匹配的结果 
  23. results = face_recognition.compare_faces(known_faces, unknown_face_encoding) 
  24.  
  25. print("这个未知面孔是 Babe 吗? {}".format(results[0])) 
  26. print("这个未知面孔是 容祖儿 吗? {}".format(results[1])) 
  27. print("这个未知面孔是 我们从未见过的新面孔吗? {}".format(not True in results)) 

显示结果如图

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


  1. # filename : digital_makeup.py 
  2. # -*- coding: utf-8 -*- 
  3. # 导入pil模块 ,可用命令安装 apt-get install python-Imaging 
  4. from PIL import Image, ImageDraw 
  5. # 导入face_recogntion模块,可用命令安装 pip install face_recognition 
  6. import face_recognition 
  7. #将jpg文件加载到numpy数组中 
  8. image = face_recognition.load_image_file("biden.jpg") 
  9. #查找图像中所有面部的所有面部特征 
  10. face_landmarks_list = face_recognition.face_landmarks(image) 
  11. for face_landmarks in face_landmarks_list: 
  12.     pil_image = Image.fromarray(image) 
  13.     d = ImageDraw.Draw(pil_image, 'RGBA') 
  14.     #让眉毛变成了一场噩梦 
  15.     d.polygon(face_landmarks['left_eyebrow'], fill=(68, 54, 39, 128)) 
  16.     d.polygon(face_landmarks['right_eyebrow'], fill=(68, 54, 39, 128)) 
  17.     d.line(face_landmarks['left_eyebrow'], fill=(68, 54, 39, 150), width=5) 
  18.     d.line(face_landmarks['right_eyebrow'], fill=(68, 54, 39, 150), width=5) 
  19.     #光泽的嘴唇 
  20.     d.polygon(face_landmarks['top_lip'], fill=(150, 0, 0, 128)) 
  21.     d.polygon(face_landmarks['bottom_lip'], fill=(150, 0, 0, 128)) 
  22.     d.line(face_landmarks['top_lip'], fill=(150, 0, 0, 64), width=8) 
  23.     d.line(face_landmarks['bottom_lip'], fill=(150, 0, 0, 64), width=8) 
  24.     #闪耀眼睛 
  25.     d.polygon(face_landmarks['left_eye'], fill=(255, 255, 255, 30)) 
  26.     d.polygon(face_landmarks['right_eye'], fill=(255, 255, 255, 30)) 
  27.     #涂一些眼线 
  28.     d.line(face_landmarks['left_eye'] + [face_landmarks['left_eye'][0]], fill=(0, 0, 0, 110), width=6) 
  29.     d.line(face_landmarks['right_eye'] + [face_landmarks['right_eye'][0]], fill=(0, 0, 0, 110), width=6) 
  30.     pil_image.show() 

美颜前后对比

本文作者:Kangvcar

来源:51CTO

时间: 2024-10-02 20:15:36

手把手教你用1行命令实现人脸识别的相关文章

手把手教你如何用 OpenCV + Python 实现人脸识别

下午的时候,配好了OpenCV的Python环境,OpenCV的Python环境搭建.于是迫不及待的想体验一下opencv的人脸识别,如下文.   必备知识 Haar-like Haar-like百科释义.通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等. opencv api 要想使用opencv,就必须先知道其能干什么,怎么做.于是API的重要性便体现

手把手教你分析微信群聊记录,识别害群之马

导读:很多朋友加入了很多微信群,作为群中一员,你想知道这个群是否值得留下?而作为群主,你想了解目前这个群是否健康?如果有问题,那么坏了这锅粥的老鼠屎是谁?应该怎样设立群规?本文通过简单的分析给出思路,抛砖引玉,希望大家多提建议和意见. 作者:汪德诚 大数据文摘创办人 思路 人有人的调性,群有群的调性.观其言行,可对其进行粗略判断,时间跨度越长.信息越多,判断就准确.先把群聊天记录下载下来,看看能有什么收获. 数据收集 (1) 选择一个样本群:XX技术交流群 (2) 导出微信群聊记录到EXCEL

手把手教你改善界面交互动画

  本文将探究UI设计中动画效果的过度应用,通过对比早期的视觉设计,为UI动画的有效设计提供一些建议,另外附上实战案例,手把手教你改进文中案例的交互动画哟. 遗憾的是,这并非某个做作的反面案例--而是某个近期客户处拿来的实例. 简介 自70-80年代CRT屏幕上映第一幅光栅图形以来,人们对数字视觉设计的态度便不断进化.与其他艺术领域不同,数字设计的潮流始终随可用工具的进化而变化. 我们已经见证了设备显示能力的不断进步--从有限的CGA分辨率 (320 x 200) 到VGA(640 x 480)

【手把手教你Maven】构建过程

转载自:http://www.cnblogs.com/xing901022/p/5002037.html [手把手教你Maven]构建过程 Maven是一款进行 依赖管理.项目构建.信息管理 为一体的工具. 它不像Make具有复杂的命令.也不像Ant需要手动编写大量的重复代码就能进行项目的构建: 还能提供强大的依赖库管理,避免jar包混乱与冲突: 还可以方便的管理项目的信息.知识产权等内容. 本篇的写作目的在于帮助那些之前没有使用过,或者是对maven还没有太多概念的朋友,学会使用maven,利

手把手教你:如何让Windows恋上Linux bash

4月7日,微软开始向用户推送Windows 10 biuld 14316预览版,该版本不仅在Cortana跨平台支持.Edge浏览器支持和虚拟桌面方面得到了优化,还能够原生支持Linux bash. 对现在的开发者来说,Linux已经是很多人必须的开发平台,在windows上不必借助虚拟机就能运行Bash,无疑有极大的吸引力. 但是微软并没有在最新版本Windows 10里直接内置Bash,需要开发者进行一些安装和设置工作.下面,笔者将会手把手教你,如何实现Ubuntu on Windows.

机器学习零基础?手把手教你用TensorFlow搭建图像识别系统(三)| 干货

雷锋网按:本文是介绍用TensorFlow构建图像识别系统的第三部分. 在前两部分中,我们构建了一个softmax分类器来标记来自CIFAR-10数据集的图像,实现了约25-30%的精度. 因为有10个不同可能性的类别,所以我们预期的随机标记图像的精度为10%.25-30%的结果已经比随机标记的结果好多了,但仍有很大的改进空间.在这篇文章中,作者Wolfgang Beyer将介绍如何构建一个执行相同任务的神经网络.看看可以提高预测精度到多少!雷锋网(公众号:雷锋网)对全文进行编译,未经许可不得转

【中间件3】手把手教你在UbuntuKylin安装配置开源版Tair(请指教)

一 相关资源 1 操作系统环境 2 Tair 资源 二 安装步骤2 1 关闭防火墙3 2 安装工具 3 设置库文件的安装目录 4 编译安装 Tair依赖库tb-common-utils 5 编译安装 Tair 6 配置和启动 tair 三 启动步骤 一 相关资源 1.1 操作系统环境 UbuntuKylin 16.04 64位(x86_64),官方一定要64位的.1 1.2 Tair 资源 Tair 代码 SVN 地址:http://code.taobao.org/svn/tair/trunk/

比较详细的手把手教你写批处理(willsort题注版)第1/5页_DOS/BAT

另,建议Climbing兄取文不用拘泥于国内,此类技术文章,内外水平相差极大:与其修正国内只言片语,不如翻译国外优秀著述. -------------------------------------------------------- 标题:手把手教你写批处理-批处理的介绍 作者:佚名 编者:Climbing 题注:willsort 日期:2004-09-21 -------------------------------------------------------- 批处理的介绍 扩展名

手把手教你在 CoreOS 上构建你的第一个应用

手把手教你在 CoreOS 上构建你的第一个应用 [编者的话]作者以自己的Mac笔记本为例,介绍了如何在CoreOS上安装WordPress应用,没有过多的理论解释,全部是实战类教程,推荐想快速了解CoreOS的同学阅读. 我相信你一定听说过CoreOS,但是你是否真正在它上面部署过一个应用了?可能很多人都没有部署过.在CoreOS上构建一个应用是非常困难且令人沮丧的(译者注:frustrating,用了这个词,看来确实难).因为文档比较散乱,并且你不得不在开始之前学习所有相关的技术,包括etc