200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 分分钟掌握人脸识别:face_recognition模块

分分钟掌握人脸识别:face_recognition模块

时间:2022-02-05 07:03:54

相关推荐

分分钟掌握人脸识别:face_recognition模块

来源:蝈蝈大数据工作坊【】

Face Recognition 是一个基于 Python 的人脸识别库,该库使用 dlib 顶尖的深度学习人脸识别技术构建,对成年人在脸部检测数据库基准(Labeled Faces in the Wild benchmark)上的准确率高达 99.38%,但是对小孩或者未成年人识别率有待商榷。

工作思路:

对已知的人脸图片进行读取编码,再对拟检测的未知图片进行读取编码,再对已知和未知的两张图片的编码进行比对,给出判断结果。

所以我们在进行人脸对比检测时,需要先对多张已知的人脸分别进行读取并编码,再对未知的人脸读取并编码进行比对。

【应用实例】

查找最相似的人脸。给出已知的标注好的多张人脸照片,再给出一张未知照片看它属于已标注中的哪一张。

第一步:导入相关的库,并设置好工作环境。

import os

import cv2

import face_recognition as fr

os.chdir(r”C:\Users\yubg\desktop”) #改变到指定的路径下

os.getcwd() #获取当前的工作环境

第二步:读取已知人脸图片。

#读取3张已知图像

img_a = fr.load_image_file(“1.png”)

img_b = fr.load_image_file(‘ybg.png’)

img_c = fr.load_image_file(‘cd.jpg’)

第三步:对已知人脸图片进行编码。

#对已知图像进行特征编码

encoding_a = fr.face_encodings(img_a)[0]

encoding_b = fr.face_encodings(img_b)[0]

encoding_c = fr.face_encodings(img_c)[0]

第四步:对未知人脸图片进行编码。

#读取被检测(未知)图像并进行特征编码

img_x = fr.load_image_file(‘x.png’) #读取未知图片

encoding_x = fr.face_encodings(img_x)[0]#进行编码

第五步:对已知和未知图片进行对比。

#将未知的与已知的逐一对比,返回 list, 包含True/False, 表示是否匹配

pare_faces([encoding_a, encoding_b,encoding_c], encoding_x)#将已知图片的编码做成列表放入作为参数

#返回 [True, True, True]

看看结果,很可能全是True或者全是False。其原因如下,有一个阈值需要调节一下,也就是说,你认为两张图片的相似度是多少才算是同一个人!相似度60%算么?这个就全靠你来决定了!如果宁错杀一百不可放过一个,那就相似度放低一点,让大更多的人能够相似。这里用的不是相似度,而是两张照片的差异,默认为0.5,所以值越小对比越严格,值越大对比就放得比较松!

#差值tolerance默认为0.5,值越小对比越严格

pare_faces([encoding_a, encoding_b,encoding_c], encoding_x, tolerance=0.4)

#返回值[True, False, False, False],得知被检测的与已知的1.png相似。

【API说明】

1.图像载入函数——load_image_file

load_image_file(file, mode=’RGB’)

加载一个图像文件到一个numpy array类型的对象上。

参数:

file:待加载的图像文件名字

mode:转换图像的格式。只支持“RGB”(8位RGB, 3通道)和“L”(黑白)

返回值:一个包含图像数据的numpy array类型的对象

2.人脸编码函数——face_encodings

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

给定一个图像,返回图像中每个人脸的128脸部编码(特征向量)。

参数:

face_image:输入的人脸图像

known_face_locations:可选参数,如果你知道每个人脸所在的边界框

num_jitters=1:在计算编码时要重新采样的次数。越高越准确,但速度越慢(100就会慢100倍)

返回值:一个128维的脸部编码列表

3.人脸匹配函数——compare_faces

compare_faces(known_face_encodings, face_encoding_to_check, tolerance=0.6)

比较脸部编码列表和候选编码,看看它们是否匹配,设置一个阈值,若两张人脸特征向量的距离,在阈值范围之内,则认为其 是同一个人

参数:

known_face_encodings:已知的人脸编码列表

face_encoding_to_check:待进行对比的单张人脸编码数据

tolerance=0.6:两张脸之间有多少距离才算匹配。该值越小对比越严格,0.6是典型的最佳值

返回值:一个 True或者False值的列表,该表指示了known_face_encodings列表的每个成员的匹配结果。

【注意安装库事项】

关于安装的问题

机器环境:win10/64位;Anaconda.2(自带python3.7)安装这个库,算是废了九牛二虎之力,网上有无数人跟我一样,各种方法之后,还是会出现以下错误:

RuntimeError:

CMake must be installed to build the following extensions: dlib

查阅资料显示,主要是安装dlib失败,再查阅dlib的安装方法,网上各种版本都有,但无外乎都需要安装vs,我为了提前迈出一步,便选择了安装vs,但这个vs让我安装了三小时。这个坑请大家注意避让,一定要选择“下载完毕再安装”,否则你也得三小时。安装完vs后,接下来直接在Anaconda prompt下安装opencv,命令如下:

pip install -i https://pypi.tuna./simple opencv-python

继续安装cmake,文件较大,尽可能使用清华镜像,执行如下命令:

pip install cmake -i https://pypi.tuna./simple

后续的安装都遇到了各种问题,总之安装不上dlib,最后找到一个dlib库(pip install dlib-19.17.99-cp37-cp37m-win_amd64.whl)下载,放在当前的路径下,再直接pip安装,命令如下:

pip install dlib-19.17.99-cp37-cp37m-win_amd64.whl

接着继续安装face_recognition模块。使用如下命令:

pip install -i https://pypi.tuna./simple face_recognition

竟然成功弄了。进入测试:

import dlib

detector = dlib.get_frontal_face_detector()

大功告成。

来源:蝈蝈大数据工作坊【】

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。