小白都能看懂的人脸识别,花上一点时间带你入门

人脸识别是AI研究带给世界的众多奇迹之一。对于许多技术人员来说,这是一个充满好奇的话题-他们希望对事物的工作方式有基本的了解。让我们潜入主题,看看事情如何运作。

人脸识别

解决此类问题时,最好不要重新发明轮子-我们不能!最好遵循研究人员提供给我们的模型。开源中也有很多可用的工具。这样的Python库之一是face_recognition。它可以通过几个步骤工作:

  1. 识别给定图像中的人脸
  2. 识别面部特征
  3. 生成128个值的人脸编码向量

基于这种编码,我们可以测量两个脸部图像之间的相似度-可以告诉我们它们是否属于同一个人。

首先安装 face_recognition 模块

pip install face_recognition

导入模块

接下来,我们导入所需的模块

import PIL.Image
import PIL.ImageDraw
import requests
from io import BytesIO
 
from IPython.display import display
 
import face_recognition

载入图片

接下来,我们加载图片。我已将图像存储在我的Github帐户中。这样我们就可以从URL中读取原始图像。

response = requests.get("https://raw.githubusercontent.com/solegaonkar/solegaonkar.github.io/master/img/rahul1.jpeg")
fr_image = face_recognition.load_image_file(BytesIO(response.content))

识别面孔

加载面部后,让我们看一下face_recognition模块的各个部分。它如何识别人脸?

face_locations = face_recognition.face_locations(fr_image)
 
number_of_faces = len(face_locations)
print("I found {} face(s) in this photograph.".format(number_of_faces))

这给了我们一个输出:

found 1 face(s) **in** this photograph.</span>

这意味着,该算法仅在图像中找到了一张脸。让我们看看所识别的图像和面部。

pil_image = PIL.Image.fromarray(fr_image)
 
for face_location in face_locations:
    # Print the location of each face in this image. Each face is a list of co-ordinates in (top, right, bottom, left) order.
    top, right, bottom, left = face_location
    print("A face is located at pixel location Top: {}, Left: {}, Bottom: {}, Right: {}".format(top, left, bottom, right))
    # Let's draw a box around the face
    draw = PIL.ImageDraw.Draw(pil_image)
    draw.rectangle([left, top, right, bottom], outline="black")

这给了我们一个输出

A face **is** located at pixel location Top: 68, Left: 117, Bottom: 291, Right: 340</span>

上面的代码还修改了图像以在脸部周围绘制一个矩形。让我们检查一下是否运作良好。
在这里插入图片描述
已经可以了

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:810735403

人脸编码

这是我们的面孔。但是,对于我们的算法而言,它只是RGB值的数组—匹配从我们提供给它的数据样本中学到的模式。

对于面部识别,该算法记录了面部的某些重要测量值,例如眼睛的颜色和大小和倾斜度,眉毛之间的间隙等。所有这些共同定义了面部编码-从图像中获取的信息-即用于识别特定面孔。

为了了解从面部读取的内容,让我们看一下读取的编码。

face_encodings = face_recognition.face_encodings(fr_image)
face_encodings[0]

打印出一个巨大的数组:

array([-0.10213576,  0.05088161, -0.03425048, -0.09622347, -0.12966095,
        0.04867411, -0.00511892, -0.03418527,  0.2254715 , -0.07892745,
        0.21497472, -0.0245543 , -0.2127848 , -0.08542262, -0.00298059,
        0.13224372, -0.21870363, -0.09271716, -0.03727289, -0.1250658 ,
        0.09436664,  0.03037129, -0.02634972,  0.02594662, -0.1627259 ,
       -0.29416466, -0.12254384, -0.15237436,  0.14907973, -0.09940194,
        0.02000656,  0.04662619, -0.1266906 , -0.11484023,  0.04613583,
        0.1228286 , -0.03202137, -0.0715076 ,  0.18478717, -0.01387333,
       -0.11409076,  0.07516225,  0.08549548,  0.31538364,  0.1297821 ,
        0.04055009,  0.0346106 , -0.04874525,  0.17533901, -0.22634712,
        0.14879328,  0.09331974,  0.17943285,  0.02707857,  0.22914577,
       -0.20668915,  0.03964197,  0.17524502, -0.20210043,  0.07155308,
        0.04467429,  0.02973968,  0.00257265, -0.00049853,  0.18866715,
        0.08767469, -0.06483966, -0.13107982,  0.21610288, -0.04506358,
       -0.02243116,  0.05963502, -0.14988004, -0.11296406, -0.30011353,
        0.07316103,  0.38660526,  0.07268623, -0.14636359,  0.08436179,
        0.010059
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值