python人脸_Python 使用 face_recognition 人脸识别

Python 使用 face_recognition 人脸识别

人脸识别

face_recognition 是世界上最简单的人脸识别库。

使用 dlib 最先进的人脸识别功能构建建立深度学习,该模型准确率在99.38%。

Python模块的使用

Python可以安装导入 face_recognition 模块轻松操作,对于简单的几行代码来讲,再简单不过了。

自动查找图片中的所有面部

import face_recognition

image = 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!

还可以选择更准确的给予深度学习的人脸检测模型

import face_recognition

image = 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!

自动定位图像中人物的面部特征

import face_recognition

image = 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_recognition

picture_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!")

face_recognition 用法

要在项目中使用面部识别,首先导入面部识别库,没有则安装:

import face_recognition

基本思路是首先加載圖片:

# 导入人脸识别库

import face_recognition

# 加载图片

image = face_recognition.load_image_file("1.jpg")

上面这一步会将图像加载到 numpy 数组中,如果已经有一个 numpy 数组图像则可以跳过此步骤。

然后对图片进行操作,例如找出面部、识别面部特征、查找面部编码:

例如对此照片进行操作

20190112130453011219.png

# 导入人脸识别库

import face_recognition

# 加载图片

image = face_recognition.load_image_file("1.jpg")

# 查找面部

face_locations = face_recognition.face_locations(image)

# 查找面部特征

face_landmarks_list = face_recognition.face_landmarks(image)

# 查找面部编码

list_of_face_encodings = face_recognition.face_encodings(image)

# 打印输出

print(face_locations)

print(face_landmarks_list)

print(list_of_face_encodings)

/usr/bin/python3.6 /home/wjw/PycharmProjects/face_study/face0112/find_face.py

[(297, 759, 759, 297)]

[{‘chin‘: [(280, 439), (282, 493), (283, 547), (290, 603), (308, 654), (340, 698), (380, 733), (427, 760), (485, 770), (544, 766), (592, 738), (634, 704), (668, 661), (689, 613), (701, 563), (712, 514), (722, 466)], ‘left_eyebrow‘: [(327, 373), (354, 340), (395, 323), (442, 324), (487, 337)], ‘right_eyebrow‘: [(560, 344), (603, 340), (647, 348), (682, 372), (698, 410)], ‘nose_bridge‘: [(519, 410), (517, 444), (515, 477), (513, 512)], ‘nose_tip‘: [(461, 548), (485, 554), (508, 561), (532, 558), (555, 556)], ‘left_eye‘: [(372, 424), (399, 420), (426, 420), (451, 429), (424, 433), (397, 432)], ‘right_eye‘: [(577, 440), (605, 437), (631, 442), (655, 451), (628, 454), (601, 449)], ‘top_lip‘: [(415, 617), (452, 600), (484, 593), (506, 600), (525, 598), (551, 610), (579, 634), (566, 630), (524, 620), (504, 619), (482, 616), (428, 616)], ‘bottom_lip‘: [(579, 634), (546, 636), (518, 636), (498, 635), (475, 632), (447, 626), (415, 617), (428, 616), (479, 605), (500, 610), (520, 610), (566, 630)]}]

[array([-0.14088562, 0.00503807, 0.00270613, -0.07196694, -0.13449337,-0.07765003, -0.03745099, -0.09381913, 0.12006464, -0.14438102,0.13404925, -0.06327219, -0.17859964, -0.05488868, -0.02019649,0.1671212 , -0.1643257 , -0.12276072, -0.03441665, -0.05535197,0.10760178, 0.04479133, -0.06407147, 0.0689199 , -0.11934121,-0.32660219, -0.07756624, -0.06931646, 0.04064362, -0.05714978,-0.0353414 , 0.0762421 , -0.18261658, -0.07098956, 0.02025999,0.13947421, -0.00086442, -0.05380288, 0.17013952, 0.03612047,-0.24374251, 0.02234841, 0.06126914, 0.25475574, 0.11198805,0.01954928, 0.01119124, -0.10833667, 0.14647615, -0.14495029,-0.00890255, 0.12340544, 0.05062022, 0.07525564, 0.0184714,-0.0970083 , 0.07874238, 0.09881058, -0.15751837, 0.02846039,0.0963228 , -0.07531998, -0.0176545 , -0.07000162, 0.25344211,0.03867894, -0.09201257, -0.1658347 , 0.12261658, -0.1535762,-0.15940444, 0.04406216, -0.12239387, -0.10966937, -0.30615237,-0.00739088, 0.39348996, 0.108335 , -0.20034787, 0.08009379,-0.05592394, -0.0375729 , 0.23610245, 0.16506384, 0.03575533,0.04828007, -0.04044699, 0.01277492, 0.25646573, -0.00142263,-0.04078939, 0.18071812, 0.0617944 , 0.12697747, 0.02988701,-0.00425877, -0.07669616, 0.00568433, -0.10959606, -0.03289849,0.08964096, -0.00859835, 0.00752143, 0.14310959, -0.14807181,0.18848835, 0.03889544, 0.0564449 , 0.03094865, 0.05897319,-0.11886788, -0.03628988, 0.09417973, -0.20971358, 0.22439443,0.18054837, 0.0444049 , 0.06860743, 0.1211487 , 0.02242998,-0.01343671, -0.00214755, -0.24110457, -0.03643485, 0.13142672,-0.05264375, 0.09808614, 0.00694137])]

Process finished withexit code 0

可以将面部编码相互比较以查看面部是否匹配,注意:查找面部编码有点慢,因此如果在以后还需对次图片进行面部分析参考,建议将每个图片的结果存留缓存或存储进数据库。

一旦得到面部编码,便可以比较他们

# results is an array of True/False telling if the unknown face matched anyone in the known_faces array

results = face_recognition.compare_faces(known_face_encodings, a_single_unknown_face_encoding)

就是这么简单!

face_recognition 模块内容

batch_face_locations 使用CNN人脸检测器返回图像中人脸边界框的二维数组

face_recognition.batch_face_locations(images, number_of_times_to_upsample=1, batch_size=128)

使用CNN人脸检测器返回图像中人脸边界框的二维数组

如果您使用的是GPU,这可以提供更快的结果,因为GPU

可以一次处理一批图像。如果你不使用GPU,你就不需要这个功能。

:param img:图像列表(每个图像都是一个numpy数组)

:param number_of_times_to_upsample:要对图像进行多少次upsample以查找面。数字越大,面越小。

:param batch_size:每个GPU处理批中要包含多少图像。

:return:按css(上、右、下、左)顺序找到的面位置的元组列表

compare_faces 将人脸编码列表与候选编码进行比较,看它们是否匹配。

face_recognition.compare_faces(known_face_encodings, face_encoding_to_check, tolerance=0.6)

将人脸编码列表与候选编码进行比较,看它们是否匹配。

:param known_face_encodings:已知人脸编码列表

:param face_encoding_to_check:要与列表进行比较的单个面编码

:param tolerance:面与面之间的距离应视为匹配。越低越严格。0.6是典型的最佳性能。

:return:一个true/false值列表,指示要检查的已知面部编码与面部编码匹配。

face_distance 给定面部编码列表,将它们与已知的面部编码进行比较,并获得每个比较面部的欧氏距离。距离告诉您脸部的相似程度。

face_recognition.face_distance(face_encodings, face_to_compare)

给定面部编码列表,将它们与已知的面部编码进行比较,并获得每个比较面部的欧氏距离。距离告诉您脸部的相似程度。

:param faces:要比较的面编码列表

:param face_to_compare:要与之比较的人脸编码

:返回:一个numpy ndarray,每个面的距离与“faces”数组的顺序相同。

face_encodings 给定的图像,返回的128维编码每个脸对脸的形象。

face_recognition.face_encodings(face_image, known_face_locations=None, num_jitters=1)

给定的图像,返回的128维编码每个脸对脸的形象。

参数:face_image:图像是包含一个或多个面

参数:known_face_locations:可选的如果您已经知道每个面的边界框。

参数:num_jitters:计算编码时重新采样面的次数。更高更准确,但更慢(即100慢100倍)

参数:return:128维面部编码列表(图像中每个面部一个)

face_landmarks 给定图像,返回图像中每个面部的面部特征位置(眼睛,鼻子等)的字典。

face_recognition.face_landmarks(face_image,face_locations = None,model =‘large‘)

给定图像,返回图像中每个面部的面部特征位置(眼睛,鼻子等)的字典。

face_image- 要搜索的图像

face_locations- 可选择提供要检查的面部位置列表。

model- 可选 - 要使用的模型。“大”(默认)或“小”,只返回5分但速度更快。

return:面部特征位置(眼睛,鼻子等)的序列表

face_locations 返回图像中人脸边界框的数组。

face_recognition.face_locations(img,number_of_times_to_upsample = 1,model =‘hog‘)

返回图像中人脸边界框的数组。

img- 一个图像(作为一个numpy数组)

number_of_times_to_upsample- 对图像进行上采样以查找面部的次数。数字越大,面部越小。

model- 使用哪种人脸检测模型。“hog”不太准确,但在CPU上更快。“cnn”是一种更准确的深度学习模型,它是GPU / CUDA加速(如果可用)。默认为“hog”。

return:css(顶部,右侧,底部,左侧)顺序中找到的面部位置的元组列表

load_image_file 将图像文件(.jpg,.png等)加载到numpy数组中。

face_recognition.load_image_file(file,mode =‘RGB‘)

将图像文件(.jpg,.png等)加载到numpy数组中。

file- 要加载的图像文件名或文件对象

mode- 将图像转换为的格式。仅支持“RGB”(8位RGB,3个通道)和“L”(黑色和白色)

return:图像内容为numpy数组。

完成!

原文地址:https://www.cnblogs.com/wjw1014/p/10259180.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言,一把菜刀。

C 与 C 的真正区别在哪里?C是中餐厨师的菜刀,做啥菜就那一把刀,切菜切肉切鱼,都是这一把刀,刀工好的师傅,豆腐都能切成一朵花。无论你提什么概念,都能用指针给你做出来,如果不行&…

css中设置br标签之后的样式_CSS学习

语法:选择器,声明(由一个属性和一个值)注释:/* */选择器:1. id选择器,class选择器2. 组和选择3. 属性选择创建:外部样式表html <head> <link rel"stylesheet" type"text/css" href"mystyle.css"> </head>内部样式表html <h…

eclipse扩展点_Eclipse扩展点评估变得容易

eclipse扩展点编码Eclipse扩展点评估有点冗长&#xff0c;而且很少能自我解释。 当我最近忙于自己忙于这个话题时&#xff0c;我写了一个小助手&#xff0c;目的是减少通用编程步骤的样板代码&#xff0c;同时增加开发指导和可读性。 它原来是不容易找到一个表现的解决方案&am…

google账号解除游戏绑定_附方法!关于物联卡手机号的绑定与解绑

我们在使用物联卡时第一步都知道绑定手机号&#xff0c;只有绑定了手机号我们才能进行正常的充值、续费、查询等日常操作&#xff0c;当我们不再使用这些物联卡时&#xff0c;你知道怎么解绑吗&#xff1f;今天&#xff0c;我们以中国移动物联卡为例&#xff0c;咱们来看一下移…

elasticsearch原理_花几分钟看一下Elasticsearch原理解析与性能调优

基本概念定义一个分布式的实时文档存储&#xff0c;每个字段 可以被索引与搜索一个分布式实时分析搜索引擎能胜任上百个服务节点的扩展&#xff0c;并支持 PB 级别的结构化或者非结构化数据用途全文检索结构化搜索分析VS传统数据库传统数据库提供精确匹配ES提供精确匹配全文检索…

spark wai_WAI-ARIA对自动完成小部件的支持

spark wai在这篇文章中&#xff0c;我想讨论一个AutoComplete小部件的可访问性。 在您键入该字段时&#xff0c;通常会使用“自动完成”窗口小部件提供建议。 在当前的工作中&#xff0c;我基于Twitter的Typeahead &#xff08;一个灵活JavaScript库&#xff09;实现了JSF组件&…

快速学习C语言的途径,让你少走弯路!

1标准C语言能干什么&#xff1f;坦白讲&#xff0c;在今天软件已经发展了半个多世纪&#xff0c;单纯的C语言什么都干不了。标准C语言库只提供了一些通用的逻辑运算方法以及字符串处理&#xff0c;当然字符串在C语言看来也是一种操作内存的方法&#xff0c;所以单纯的C什么都做…

计算机基础教育学,计算机基础教育教学改革与创新

计算机基础教育教学改革与创新伴随《国家中长期教育改革和发展规划纲要(2010-2020)》的颁布,我国计算机基础教育进入一个新的发展阶段,对计算机基础教育"面向应用、能力导向、注重素质"指导思想的深入研究和实践是深化计算机基础教育教学改革的切入点。下面是小编搜集…

C语言学习趣事_你不知道的C语言应用

一、引我一直不明白“文人相轻”是什么意思&#xff0c;也许就是说&#xff1a;文人清客之间互相瞧不起的事情吧。但对于我来说&#xff0c;文人相轻就是表示&#xff1a;无知者无畏。无论你的某一方面的语言学的怎么样&#xff0c;怎么样的牛逼&#xff0c;你可以眼光狭窄&…

html打开显示脚本错误,IE浏览器显示脚本错误怎么解决?IE浏览器脚本错误解决方法图文教程介绍...

只要一打开网页&#xff0c;就会弹出一个“当前页面的脚本发生错误”提示框&#xff0c;如下图&#xff0c;不论按“是”或者“否”&#xff0c;当打开其它网页时&#xff0c;又会弹出一个这样的“脚本错误”提示框&#xff0c;这样的问题该如何解决呢。出现这样的情况&#xf…

jenkins 新手入门安装失败_树莓派安装jenkins,安安静静做个持续集成打包机

对于java程序来说&#xff0c;手动发布服务端是耗时和无聊的&#xff0c;jenkins很好地解决了这个问题&#xff0c;闲着也是闲着就在树莓派上装个jenkins帮我们打包发布吧。这次我们需要安装三个软件&#xff1a;jdk&#xff1a;编辑java程序必要的。maven&#xff1a;maven结构…

java开发C编译器:结构体的解析和执行

用java开发C语言编译器结构体是C语言中&#xff0c;最为复杂的原生数据结构&#xff0c;它把多种原生结构结合在一起&#xff0c;形成一个有特点含义的数据结构&#xff0c;要实现一个完整的C语言编译器或解释器&#xff0c;就必须要拥有对结构体的解析能力&#xff0c;本节&am…

mysql查询会话池_用户会话,数据控件和AM池

mysql查询会话池最近&#xff0c;有人问我有关应用程序模块池的有趣问题。 众所周知&#xff0c;AM池包含用户会话引用的应用程序模块实例&#xff0c;这允许会话在后续请求时从池中获取完全相同的AM实例。 如果应用程序中有多个根应用程序模块&#xff0c;则每个模块都将拥有…

vc 控制台添加托盘显示_和硕县塑胶托盘塑料周转筐多少钱、延安塑料物流箱

他们正是利用了消费者的这种心理&#xff0c;往产品里添加一部分碳酸钙等重物质&#xff0c;不仅仅降低了他们的生成成本也极大的提高了产品自身重量&#xff0c;消费者却被蒙在鼓里。物流与采购联合会托盘专业委员会于2002年9月对北京、天津、上海、广州四大城的300余家生产、…

用python画大白_[Python][可视化]matplotlib基础入门

Python包matplotlib画图入门&#xff0c;以折线图为例。 在使用之前&#xff0c;导入matplotlib包&#xff0c;设置中文字体 import matplotlib.pyplot as plt %matplotlib inline plt.rcParams[font.family] [Microsoft YaHei] plt.rcParams[axes.unicode_minus] False PS&a…

C语言和图形界面编程打造——浪漫的表白程序

谁说程序员不浪漫&#xff1f;&#xff1f;&#xff1f;来来来一起打造一个浪漫的表白程序&#xff0c;配上好听的音乐&#xff0c;瞬间高大上。下面&#xff0c;发下代码吧&#xff0c;昨天的愤怒的小鸟推箱子版本的没发&#xff0c;今天发这个&#xff0c;&#xff0c;&#…

ei eo eq什么意思_EI源刊是什么意思

EI源刊是什么意思?EI检索分为两种&#xff0c;一种是会议论文检索&#xff0c;一种是期刊论文检索&#xff0c;这两种检索的价值和地位是不同的&#xff0c;也由此引出了EI源刊的概念&#xff0c;EI检索包括JA类型和CA类型&#xff0c;JA是期刊论文检索&#xff0c;CA是会议论…

onpagefinished等了很久才执行_学了那么多精准引流推广的方法 你知道什么才是最重要的吗...

东哥说引流在朋友圈更新了很多引流的方法和技巧&#xff0c;有一部分微友就私信我&#xff1a;引流是好方法重要还是执行力重要&#xff1f;东哥说引流想要告诉你的是&#xff1a;不管任何方法&#xff0c;都只是“术”的层面&#xff0c;方法没有好坏&#xff0c;只是根据每个…

【C语言入门学习笔记】如何把C语言程序变成可执行文件!

环境在ANSI的任何一种实现中&#xff0c;存在两种不同的环境。翻译环境&#xff1a;在这个环境里&#xff0c;源代码被转换为可执行的机器指令。执行环境&#xff1a;用于实际执行代码。翻译环境组成一个程序的每个源文件通过编译过程分别转成目标代码各个目标文件由链接器捆绑…

idea springboot 发布webservice 发布服务_阿里云发布 Spring Boot 新脚手架,真香

作者 | 良名 阿里巴巴技术专家背景相信很多人都使用过 start.spring.io 来初始化自己的 Spring Boot 工程&#xff0c;这个工具为开发者提供了丰富的可选组件&#xff0c;并且可以选择多种打包方式&#xff0c;大大方便了开发人员的使用。最近&#xff0c;阿里的 Nacos、Senti…