Python 使用 face_recognition 人脸识别

Python 使用 face_recognition 人脸识别



官方说明:https://face-recognition.readthedocs.io/en/latest/readme.html

人脸识别

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

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

Python模块的使用

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

  Python操作 face_recognition API 文档:https://face-recognition.readthedocs.io/en/latest/face_recognition.html

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

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 数组图像则可以跳过此步骤。

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

例如对此照片进行操作

  

# 导入人脸识别库
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 with exit 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_landmarksface_imageface_locations = Nonemodel =‘large‘ 

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

face_image - 要搜索的图像

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

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

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

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

 face_recognition.face_locations(imgnumber_of_times_to_upsample = 1model =‘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_filefilemode =‘RGB‘ )

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

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

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

return:图像内容为numpy数组。

完成!

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

时间: 2024-10-25 17:28:26

Python 使用 face_recognition 人脸识别的相关文章

7行Python代码的人脸识别

随着去年alphago 的震撼表现,AI 再次成为科技公司的宠儿.AI涉及的领域众多,图像识别中的人脸识别是其中一个有趣的分支.百度的BFR,Face++的开放平台,汉王,讯飞等等都提供了人脸识别的API,对于老码农而言,自己写一小段代码,来看看一张图片中有几个人,没有高大上,只是觉得好玩,而且只需要7行代码. import cv2 face_patterns = cv2.CascadeClassifier('/usr/local/opt/opencv3/share/OpenCV/haarcas

25 行 Python 代码实现人脸识别——OpenCV 技术教程

OpenCV OpenCV 是最流行的计算机视觉库,原本用 C 和 C++ 开发,现在也支持 Python. 它使用机器学习算法在图像中搜索人的面部.对于人脸这么复杂的东西,并没有一个简单的检测能对是否存在人脸下结论,而需要成千上万的特征匹配.算法把人脸识别任务分解成数千个小任务,每个都不难处理.这些任务也被称为分类器. 对于类似于人脸的对象,你或许需要不少于 6000 个分类器,每一个都需要成功匹配(当然,有容错率),才能检测出人脸.但这有一个问题:对于人脸识别,算法从左上角开始计算一个个数据

[转]7行Python代码的人脸识别

https://blog.csdn.net/wireless_com/article/details/64120516 随着去年alphago 的震撼表现,AI 再次成为科技公司的宠儿.AI涉及的领域众多,图像识别中的人脸识别是其中一个有趣的分支.百度的BFR,Face++的开放平台,汉王,讯飞等等都提供了人脸识别的API,对于老码农而言,自己写一小段代码,来看看一张图片中有几个人,没有高大上,只是觉得好玩,而且只需要7行代码. import cv2 face_patterns = cv2.Ca

[译]Kubernetes 分布式应用部署和人脸识别 app 实例

原文地址:KUBERNETES DISTRIBUTED APPLICATION DEPLOYMENT WITH SAMPLE FACE RECOGNITION APP 原文作者:skarlso 译文出自:掘金翻译计划 好的,伙计,让我们静下心来.下面将会是一个漫长但充满希望和有趣的旅程. 我将使用 Kubernetes 部署分布式应用程序.我试图创建一个类似于真实世界 app 的应用程序.显然,由于时间和精力有限,我不得不忽略一些细节部分. 我的重点将放在 Kubernetes 和应用部署上.

python三步实现人脸识别

原文地址https://www.toutiao.com/a6475797999176417550 Face Recognition软件包 这是世界上最简单的人脸识别库了.你可以通过Python引用或者命令行的形式使用它,来管理和识别人脸. 该软件包使用dlib中最先进的人脸识别深度学习算法,使得识别准确率在<Labled Faces in the world>测试基准下达到了99.38%. 它同时提供了一个叫face_recognition的命令行工具,以便你可以用命令行对一个文件夹中的图片进

Github开源人脸识别项目face_recognition

Github开源人脸识别项目face_recognition 原文:https://www.jianshu.com/p/0b37452be63e 译者注: 本项目face_recognition是一个强大.简单.易上手的人脸识别开源项目,并且配备了完整的开发文档和应用案例,特别是兼容树莓派系统. 为了便于中国开发者研究学习人脸识别.贡献代码,我将本项目README文件翻译成中文. 向本项目的所有贡献者致敬. 英译汉:同济大学开源软件协会 子豪兄Tommy Translator's note: f

AI人工智能之基于OpenCV+face_recognition实现人脸识别

因近期公司项目需求,需要从监控视频里识别出人脸信息.OpenCV非常庞大,其中官方提供的人脸模型分类器也可以满足基本的人脸识别,当然我们也可以训练自己的人脸模型数据,但是从精确度和专业程度上讲OpenCV所提供的人脸识别要弱于face_recognition,所以我们采取OpenCV处理视频流.face_recognition来识别人脸. 为什么选择Python? 博主本身是Java工程师,在公司主要通过Java语言进行开发,起初我们尝试过通过Java+OpenCV的方式来实现,但是效果并不是很

python opencv 人脸识别初识

甲.希望通过python加opencv搭建自己的人脸识别判断库 参照如下网页,配置python opencv开发环境, {博主ma6174} http://www.cnblogs.com/ma6174/archive/2013/03/31/2991315.html ubuntu中已有python-opencv的库,安装方便 sudo apt-get install libopencv-* sudo apt-get install python-opencv sudo apt-get instal

python下PCA算法与人脸识别

关于这部分主要是想在python下试验一下主成分分析(PCA)算法以及简单的人脸识别.曾经详述过matlab下的PCA以及SVM算法进行人脸识别技术,参考如下: 主成分分析法-简单人脸识别(一) 主成分分析-简单人脸识别(二) PCA实验人脸库-人脸识别(四) PCA+支持向量机-人脸识别(五) 主成分分析(PCA)算法主要是对高维数据进行降维,最大限度的找到数据间的相互关系,在机器学习.数据挖掘上很有用.在机器学习领域算法众多,贴一个: 大神博客索引 关于PCA的核心思想与原理介绍上述已经给出