今天给大家介绍一个世界上最简洁的人脸识别库 face_recognition,你可以使用 Python 和命令行工具进行提取、识别、操作人脸。

基于业内领先的 C++ 开源库 dlib 中的深度学习模型,用 Labeled Faces in the Wild 人脸数据集进行测试,有高达99.38%的准确率。

1.安装

最好是使用 Linux 或 Mac 环境来安装,Windows 下安装会有很多问题。在安装 face_recognition 之前你需要先安装以下几个库,注意顺序!

1.1 先安装 cmake 和 boost

pip  install  cmake
pip install boost

1.2 安装 dlib

pip install dlib

此处安装可能要几分钟。如安装出错,建议使用 whl 文件来安装

1.3 安装 face_recognition

face_recongnition 一般要配合 opencv 一起使用

pip install face_recognition
pip install opencv-python

2. 人脸识别

比如这里总共有三张图片,其中有两张已知,第三张是需要识别的图片

首先获取人脸中的信息

kobe_image = face_recognition.load_image_file("kobe.jpg")  # 已知科比照片
jordan_image = face_recognition.load_image_file("jordan.jpeg")  # 已知乔丹照片
unknown_image = face_recognition.load_image_file("unkown.jpeg")  # 未知照片kobe_face_encoding = face_recognition.face_encodings(kobe_image)[0]
jordan_face_encoding = face_recognition.face_encodings(jordan_image)[0]
unknown_face_encoding = face_recognition.face_encodings(unknown_image)[0]

代码中前三行分别是加载三张图片文件并返回图像的 numpy 数组,后三行返回图像中每个面部的人脸编码

然后将未知图片中的人脸和已知图片中的人脸进行对比,使用 compare_faces() 函数, 代码如下:

known_faces = [kobe_face_encoding,jordan_face_encoding
]
results = face_recognition.compare_faces(known_faces, unknown_face_encoding)  # 识别结果列表
print("这张未知照片是科比吗? {}".format(results[0]))
print("这张未知照片是乔丹吗? {}".format(results[1]))

运行结果如下:

不到二十行代码,就能识别出人脸是谁,是不是 so easy!

3. 人脸标注

仅仅识别图片中的人脸总是感觉差点什么,那么将识别出来的人脸进行姓名标注是不是更加有趣~

已知图片的识别和前面代码基本是一样的,未知图片代码多了人脸位置的识别,并使用了face_locations() 函数。代码如下:

face_locations = face_recognition.face_locations(unknown_image)
face_encodings = face_recognition.face_encodings(unknown_image, face_locations)

函数传入两个参数,返回以上,右,下,左固定顺序的脸部位置列表的作用是将已知脸部位置和未知面部编码进行比较,得到欧式距离~~~具体是什么我也不知道,距离就相当于相识度。

函数说明:face_distance(face_encodings, face_to_compare)

face_encodings:已知的面部编码

本次图片前面两张没有变化,第三张换成了科比和乔丹的合影,最终运行之后结果如下:

左边是原图,右边是识别后自动标注出来的图片。

import face_recognition
from PIL import Image, ImageDraw
import numpy as npdef draws():kobe_image = face_recognition.load_image_file("kobe.jpg")kobe_face_encoding = face_recognition.face_encodings(kobe_image)[0]jordan_image = face_recognition.load_image_file("jordan.jpeg")jordan_face_encoding = face_recognition.face_encodings(jordan_image)[0]known_face_encodings = [kobe_face_encoding,jordan_face_encoding]known_face_names = ["Kobe","Jordan"]unknown_image = face_recognition.load_image_file("two_people.jpeg")face_locations = face_recognition.face_locations(unknown_image)face_encodings = face_recognition.face_encodings(unknown_image, face_locations)pil_image = Image.fromarray(unknown_image)draw = ImageDraw.Draw(pil_image)for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):matches = face_recognition.compare_faces(known_face_encodings, face_encoding)name = "Unknown"face_distances = face_recognition.face_distance(known_face_encodings, face_encoding)best_match_index = np.argmin(face_distances)if matches[best_match_index]:name = known_face_names[best_match_index]draw.rectangle(((left, top), (right, bottom)), outline=(0, 0, 255))text_width, text_height = draw.textsize(name)draw.rectangle(((left, bottom - text_height - 10), (right, bottom)), fill=(0, 0, 255), outline=(0, 0, 255))draw.text((left + 6, bottom - text_height - 5), name, fill=(255, 255, 255, 255))del drawpil_image.show()pil_image.save("image_with_boxes.jpg")

4. 给人脸美妆

这个功能需要结合 PIL 一起使用。用法都差不多,首先就是将图片文件加载到 numpy 数组中,然后将人脸中的面部所有特征识别到一个列表中

image = face_recognition.load_image_file("bogute.jpeg")
face_landmarks_list = face_recognition.face_landmarks(image)

遍历列表中的元素,修改眉毛

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), wid=6)

根据以上代码做了,我用实力不行,打球又脏的 "大嘴" 博格特来做演示!

左边是原图,右边是加了美妆后的效果

你打球的样子像极了 cxk!

"扫一扫接受蔡徐坤的邀请"

【Python】超方便的人脸识别相关推荐

  1. 用Python实现简单的人脸识别,10分钟(附源码)

    前言 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的.这里介绍的是准确 ...

  2. 10分钟手把手教你运用Python实现简单的人脸识别

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 前言:让我的电脑认识我 我的电脑只有认识我,才配称之为我的电脑! 今天,我们用Python实现高大上的人脸识别技术! Python里,简单的 ...

  3. python人脸识别毕业设计-Python基于Dlib的人脸识别系统的实现

    之前已经介绍过人脸识别的基础概念,以及基于opencv的实现方式,今天,我们使用dlib来提取128维的人脸嵌入,并使用k临近值方法来实现人脸识别. 人脸识别系统的实现流程与之前是一样的,只是这里我们 ...

  4. python人脸识别opencv_基于python+OpenCV模块的人脸识别定位技术

    什么是OpenCV模块 OpenCV是一款跨平台的视觉库,可以支持的操作系统有Linux.Windows和Mac OS操作系统,并且还提供了多种语言的接口,比如Python,java,MATLAB等常 ...

  5. 基于Python的百度AI人脸识别API接口(可用于OpenCV-Python人脸识别)

    基于Python的百度AI人脸识别API接口(可用于OpenCV-Python人脸识别) 资源: download.csdn.net/download/weixin_53403301/43644312 ...

  6. gpu训练cnn人脸识别准确率_opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别

    opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别 Abstract:本文记录了在学习深度学习过程中,使用opencv+mtcnn+facenet+pyth ...

  7. Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储

    原 Python+OpenCv实现AI人脸识别身份认证系统(2)--人脸数据采集.存储 2019年07月02日 08:47:52 不脱发的程序猿 阅读数 602更多 所属专栏: 人脸识别身份认证系统设 ...

  8. python人脸深度识别_基于Python的深度学习人脸识别方法

    基于 Python 的深度学习人脸识别方法 薛同来 ; 赵冬晖 ; 张华方 ; 郭玉 ; 刘旭春 [期刊名称] <工业控制计算机> [年 ( 卷 ), 期] 2019(032)002 [摘 ...

  9. Python+OpenCv实现AI人脸识别身份认证系统(1)——人脸识别原理

    原 Python+OpenCv实现AI人脸识别身份认证系统(1)--人脸识别原理 置顶 2019年07月02日 08:47:40 不脱发的程序猿 阅读数 1255更多 所属专栏: 人脸识别身份认证系统 ...

  10. Python+OpenCV实现AI人脸识别身份认证系统(4)—人脸识别

    本篇博文是Python+OpenCV实现AI人脸识别身份认证系统的收官之作,在人脸识别原理到数据采集.存储和训练识别模型基础上,实现人脸识别,废话少说,上效果图: 案例引入 在Python+OpenC ...

最新文章

  1. hashMap与arrayList,linkedList,hashTable的区别
  2. java 鼠标绘图,教您如何用JAVA程序实现鼠标绘图
  3. HSSFDataFormat大全
  4. 设置windows网络连接别名和linux网络连接别名
  5. 接收二进制数据_详解前端websocket原理之数据传输协议
  6. 转转集团二手双11大促:长沙用户“秒杀”99新iPhone12成首单
  7. xssfworkbook excel打开为空白_「Excel」轻松运用 Excel 之“Excel 选项”的 4 个设置
  8. Arm推出全新Mali多媒体套件,想让机器学习进入中低端智能手机
  9. linux c++ sqlite_SQLite 真的很容易编译 | Linux 中国
  10. 中文字符集与字符编码的基础知识
  11. 导数与微分常用公式(基础)
  12. DeviceDriver(十四):多点触摸(MT协议,Input子系统)
  13. 2进制 , 8进制 , 10进制 , 16进制 , 介绍 及 相互转换 及 快速转换的方法
  14. 王小川告别搜狗那一天
  15. Hadoop-提高性能(调优)方法
  16. jersey 简单使用
  17. 企业中一些职位的简称
  18. 打卡助手 | 小程序,大需要
  19. 关于RAID1的读写问题
  20. MSM8974 TP驱动流程

热门文章

  1. 第十三届“蓝桥杯”单片机省赛——程序设计题
  2. 怎么提高计算机编程能力,提高程序员技能的11招编程技巧
  3. 力60同学2012聚幽燕(上辑)
  4. Hololens 简体中文版的安装步骤(2018.11)
  5. 图像编辑之对比度调整(亮度对比度的算法公式)
  6. 字节跳动小程序(抖音) uniapp PHP 支付宝SDK 开发支付功能
  7. SVN 学习笔记 (二,一口气学会SVN)
  8. Amoeba读写分离部署
  9. C++、VC++、MFC网页自动注册、登陆、发帖、留言,QQ注册、QQ申请器源码、注册邮箱源码、自动发帖源码
  10. 港股将迎“最牛十元店“,名创优品能借IPO突围?