今天的Python学习教程给大家介绍一个世界上最简练的人脸辨认库 face_recognition,你可以应用 Python 和命令行工具进行提取、辨认、操作人脸。

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

1.安装

最好是应用 Linux 或 Mac 环境来安装,Windows 下安装会有很多问题。

在安装 face_recognition 之前你须要先安装以下几个库,注意次序!

1.1 先安装 cmake 和 boost

pip install cmakepip install boost

1.2 安装 dlib

pip install dlib

此处安装可能要几分钟。

如安装出错,建议应用 whl 文件来安装

1.3 安装 face_recognition

face_recongnition 一般要配合 opencv 一起应用

pip install face_recognitionpip 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:已知的面部编码

face_to_compare:要比拟的面部编码

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

左边是原图,右边是辨认后主动标注出来的图片。

import face_recognitionfrom PIL import Image, ImageDrawimport 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 draw pil_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)

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

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

更多的Python学习教程也会持续为大家更新,有兴致的伙伴可以自己动手操练哦! 更多一篇文章带你了解Python 人脸识别有多简单资讯欢迎收藏红雨智能资讯网:http://www.zdm365.cn/(部分合肥电动门内容来源于网络投稿或自媒体,涉及版权请联系我们处理.)

python人脸识别防小偷_一篇文章带你了解Python 人脸识别有多简单相关推荐

  1. python人脸识别实验报告总结_一篇文章带你了解Python 人脸识别有多简单

    原标题:一篇文章带你了解Python 人脸识别有多简单 今天的Python学习教程给大家介绍一个世界上最简洁的人脸识别库 face_recognition,你可以使用 Python 和命令行工具进行提 ...

  2. python字节流处理_一篇文章带你剖析Python 字节流处理神器struct

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 仰天大笑出门去,我辈岂是蓬蒿人. ...

  3. python异常处理语句编程题_一篇文章让你掌握Python异常处理所有知识点,记得收藏...

    异常处理在任何一门编程语言里都是值得关注的一个话题,良好的异常处理可以让你的程序更加健壮,清晰的错误信息更能帮助你快速修复问题.在Python中,和不分高级语言一样,使用了try/except/fin ...

  4. python网络爬虫网易云音乐_一篇文章带你用Python网络爬虫实现网易云音乐歌词抓取...

    标签下,如下图所示: 接下来我们利用美丽的汤来获取目标信息,直接上代码,如下图: 此处要注意获取ID的时候需要对link进行切片处理,得到的数字便是歌曲的ID:另外,歌曲名是通过get_text()方 ...

  5. python下载电影天堂视频_一篇文章教会你利用Python网络爬虫获取电影天堂视频下载链接...

    点击上方"IT共享之家",进行关注 回复"资料"可获赠Python学习福利 [一.项目背景] 相信大家都有一种头疼的体验,要下载电影特别费劲,对吧?要一部一部的 ...

  6. python下载电影天堂视频教程_一篇文章教会你利用Python网络爬虫获取电影天堂视频下载链接|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ [一.项目背景] 相信大家都有一种头疼的体验,要下载电影特别费劲,对吧?要一部一部的下载,而且不能直观的知 ...

  7. 如何写一个python程序浏览淘宝_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)...

    [一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. [二.项目准备工作] 1. 准备Pycharm,下载安装等,可以参考这 ...

  8. excel中调用python程序_一篇文章带你使用Python搞定对Excel表的读写和处理

    文章目录一.我的需求二.代码三.总结 一.我的需求 我想要excel 的最后1列由列表形式转换为数值类型 ​ 可以看到最后一列有的是列表,有的直接是数值,想要整个列表中的内容都转为数值类型 二.代码 ...

  9. python 抖音文案提取_一篇文章教会你用Python抓取抖音app热点数据!

    今天给大家分享一篇简单的安卓app数据分析及抓取方法.以抖音为例,我们想要抓取抖音的热点榜数据. 要知道,这个数据是没有网页版的,只能从手机端下手. 首先我们要安装charles抓包APP数据,它是一 ...

最新文章

  1. leetcode 64. 最小路径和
  2. MyOffic(经理评分)
  3. 庆国庆,Power BI 统一报表门户横空出世,指南请收
  4. mysql完整性约束命名_第5章--MySQL索引与完整性约束.ppt
  5. 华硕固件,梅林固件,高恪固件等等有什么区别?
  6. java离职证明模板_离职证明的一个小细节,差点让我「背调」over
  7. wps如何自己制作流程图_WPS如何绘制流程图? WPS绘图流程图详细教程
  8. 小游戏市场被微信点燃,社交平台蜂拥而至谁能分到蛋糕?
  9. 利用低代码从0到1开发一款小程序
  10. PDF如何编辑,怎么删除PDF页眉页脚
  11. java 动态 Lambda (二)
  12. Ubuntu 安装 Google Chrome 浏览器
  13. 296 最佳的碰头地点
  14. 计算机重新启动后打印机脱机,重新启动计算机后打印机脱机怎么办
  15. 神奇的量子世界——量子纠缠(Matlab实现)
  16. 量化投资学习——股票分红对期指的影响
  17. 安全策略手记 (安全沙箱全攻略)
  18. srand和rand详细讲解
  19. 开关电源matlab仿真设计报告,MATLAB非隔离式开关电源仿真分析+源代码
  20. 【C++】智力题总结

热门文章

  1. Linux文件句柄泄漏
  2. 人工智能培训老师讲师叶梓:计算机视觉领域的自监督学习模型——MAE-1
  3. 微信ipad协议/个人微信协议/个微协议
  4. CANopen基本概念学习笔记
  5. 如何用powershell自启动开关核显
  6. 【文智背后的奥秘】系列篇——基于CRF的人名识别
  7. Naresh Jain:合作的阴暗面
  8. 微信公众平台开发(94) 违章查询
  9. 2020 2 跳线法兰
  10. 【人工智能 AI 写书】《卓越架构师修炼之道》全书目录