matlab人脸识别_应用 Python 完成自己的第一个人脸识别系统 上

应用 Python 完成自己的第一个人脸识别系统 上

本地环境

macOS;python3.7

  • 第一步:安装依赖项

  • 第二步:face_recognition 接口

  • 结束语

第一步:安装依赖项

  1. 安装依赖项:dlib

这里以 macOS 系统为例,其他系统的安装方法可以进入 dlib 官网自行查阅。

git clone https://github.com/davisking/dlib.git
cd dlib/examples
mkdir build
cd build
cmake .. 
cmake --build .
cd ..
python3 setup.py install

安装完dlib测试是否成功

python3
import dlib
  1. 安装 python 包 face_recognition

face_recognition 是一个用 python 实现的人脸识别开源库

pip3 install face_recognition
  1. 安装 opencv

OpenCV 是一个基于 BSD 许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在 Linux、Windows、Android和Mac OS 操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了 Python、Ruby、MATLAB 等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

sudo pip3 install opencv-python

第二步:face_recognition 接口

这里我们先准备三张图片供下面练习使用

基本图片1:tlp01 先生

9a44f66254f0a7e264c5b906440d9fd3.png

基本图片2:tlp02 先生

ab5f812e5e3d56f06f27f3344f051980.png

基本图片3:bd 先生

f562c82a90517133bb1a21f1060042d8.png

  1. 读取图片对象,返回图片内容的 numpy 数组

load_image_file()

103aeec3b3fffe92fc1b74d743efccd1.png

demo:

import face_recognition

tlp01_numpy = face_recognition.load_image_file("./tlp01.jpg")
print("tlp01 加载后的 numpy 数据:", tlp01_numpy)

tlp02_numpy = face_recognition.load_image_file("./tlp02.jpg")
print("tlp02 加载后的 numpy 数据:", tlp02_numpy)

bd_numpy = face_recognition.load_image_file("./bd.jpg")
print("bd 加载后的 numpy 数据:", bd_numpy)

结果:

aaa6cced0e4c821cb9afece71bd2cdc8.png

  1. 识别 numpy 数组中的人脸的位置

face_locations()

be5f0c57e0fff5bbe594595e40fe6b00.png

demo:

face_locations = face_recognition.face_locations(tlp01_numpy)
print("tlp01 图片中人脸在图片中的相对位置:", face_locations)

结果:

tlp01 图片中人脸在图片中的相对位置: [(82, 339, 211, 210)]

意思是:有一张人脸,人脸框距离顶部距离82,右侧距离339,底部距离211,左侧距离210

f2a6289145bc64275f88c0ecfcf9710f.png

81a5552f7f819015114d1f931431ee8c.png

  1. 识别图片中每个面部特征(眼睛 鼻子等)的位置

face_landmarks()

48bff9a72b90d57b16ec7f600bbe8805.png

demo:

face_landmarks = face_recognition.face_landmarks(tlp01_numpy)
print("tlp01 面部特征的位置:", face_landmarks)

结果:

tlp01 面部特征的位置: 
[{'chin': [(206, 108), (205, 126), (206, 144), (209, 161), (216, 177), (225, 191), (236, 203), (249, 212), (264, 214), (278, 211), (291, 204), (301, 193), (310, 180), (317, 167), (321, 152), (324, 136), (326, 120)], 
'left_eyebrow': [(228, 95), (238, 93), (247, 94), (257, 96), (265, 100)], 
'right_eyebrow': [(282, 102), (291, 100), (299, 98), (308, 98), (315, 103)], 
'nose_bridge': [(274, 108), (274, 117), (273, 127), (273, 137)], 
'nose_tip': [(260, 143), (265, 145), (271, 147), (277, 146), (282, 144)], 
'left_eye': [(237, 107), (243, 105), (249, 106), (255, 110), (248, 110), (242, 109)], 
'right_eye': [(288, 112), (294, 109), (300, 110), (305, 113), (299, 114), (294, 113)], 
'top_lip': [(246, 169), (254, 162), (263, 158), (270, 160), (276, 159), (283, 164), (287, 173), (284, 173), (275, 165), (269, 165), (263, 164), (248, 169)], 
'bottom_lip': [(287, 173), (282, 185), (274, 191), (267, 191), (260, 190), (252, 183), (246, 169), (248, 169), (261, 181), (268, 182), (274, 181), (284, 173)]
}]

  1. 对图片中的每张脸进行面部编码

face_encodings()

1aa7ed0ad46c6880ef798728b8e03b65.png

demo:

face_encodings = face_recognition.face_encodings(tlp01_numpy)
print("tlp01 的面部编码:", face_encodings)

结果:

6c49d10117c0bfc12a5c0c73d0d09475.png

  1. 将多张脸与一张给定的脸A进行比较,返回每张脸与脸A的相似程度

比如:我有多张面部特征 [face1, face2, face3],现在要看每个face和脸A的相似程度是多少。

face_distance()

9b89b8853f340f80c2af9e499c8750db.png

demo:

# 因为这里我们知道每张图只有一张人脸,为了方便,我们取数组的第一个值
tlp01_encoding = face_recognition.face_encodings(tlp01_numpy)[0]
tlp02_encoding = face_recognition.face_encodings(tlp02_numpy)[0]
bd_encoding = face_recognition.face_encodings(bd_numpy)[0]

face_distance = face_recognition.face_distance([tlp01_encoding, bd_encoding], tlp02_encoding)
print("tlp02 和 [tlp01, bd] 的欧式距离:", face_distance)
print("tlp02 和 tlp01 的欧式距离", face_distance[0])
print("tlp02 和 bd 的欧式距离", face_distance[1])

结果:

89c3c8f717677446c2b61665b21182ed.png

可以看出 tlp02 和 tlp01 距离更近一些,则表明 tlp02 和 tlp01 更相似。

  1. 将一张脸A与多张已知的脸进行比较,返回脸A与多张已知的脸是否匹配

比如:这里有一个已知的面部池子 [吴彦祖, 谢腾飞, 葛大爷],我要知道另一个脸A和我池子里的每一项是否匹配。

compare_faces()

a8b8d7c22f1b23b1154c500c5bfeb5b8.png

demo:

compare_faces = face_recognition.compare_faces([tlp01_encoding, bd_encoding], tlp02_encoding)
print("tlp02 和 tlp01 的比较结果:", compare_faces[0])
print("tlp02 和 bd 的比较结果:", compare_faces[1])

结果:

af8d1c8c2f58c73574fa22d22ed4f676.png

由结果可以看出:

tlp02 和 tlp01 成功匹配;

tlp02 和 bd 不匹配。

结束语

好啦,认真学完上面的这六个接口,明天我们就可以针针儿的实现自己的人脸识别系统啦 !!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值