利用face_recognition进行人脸识别,从全班证件照中找出自己

https://blog.csdn.net/hongbin_xu/article/details/76284134
参考hongbin_xu的教程:应用一个基于Python的开源人脸识别库,face_recognition

体验了一下face_recognition库,大佬的教程确实很全面,本人在体验过程中也搜集了一些资料,本文对最后一个案例进行了测试及改动。

安装过程(win10)

本人尝试了网上讲的“从pypi下载setup.py进行安装”“使用whl文件进行安装”这两种方法,奈何经验不足或是系统环境原因,没有成功,后来用以下方法成功安装。

需要安装的内容 cmaker(提供dlib的运行环境)opencv(视觉库)dlib(人脸识别依赖库)face_recognition(我们要使用的库)

命令1 先安装了cmake环境才能正常安装dlib库
pip install cmake==3.12.0 -i https://mirrors.ustc.edu.cn/pypi/web/simple

命令2
pip install opencv-python==3.4.2.17 -i https://mirrors.ustc.edu.cn/pypi/web/simple

命令3这一步会在电脑内构建c++环境,耗时长且占用大量内存,电脑会变得卡顿
pip install dlib==19.19 -i https://mirrors.ustc.edu.cn/pypi/web/simple

命令4安装完后使用国内数据源快速安装face_recognition库
pip install -i https://pypi.doubanio.com/simple/ face_recognition

批量识别案例

前几个案例可以参考上面的大佬,本人对最后一个案例进行了简单的修改,从已有文件夹中批量读取照片,本来想要读取全班40名同学,但是发现face_recognition.compare_faces函数仅支持同时比较约20个人脸的数据量,且由于照片清晰度不高,识别的效果一般,可以考虑后期继续调整,以提高识别的精度。

批量识别代码

import face_recognition
import os
num=0
a=[]
#本代码可以读取最多二十张照片进行比较

def readname():
    filePath = r"E:\人脸识别face_recognition\photo"
    name = os.listdir(filePath)
    return name
 
#创建一个装有姓名的列表
name = readname()
print(name)
for i in name:
    num=num+1
    img=face_recognition.load_image_file("photo/" + i )
    try:
        img=face_recognition.face_encodings(img)[0]
    except:#如果无法从图片中识别到人脸会报错
        pass
    a.insert(num,img)

#未知图片
unknown_image = face_recognition.load_image_file("unknown1.jpg");
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]


#比较函数face_recognition.compare_faces
results = face_recognition.compare_faces( a , unknown_encoding )
labels = name

#输出结果
print('results:'+str(results))
for i in range(0, len(results)):
    if results[i] == True:
        print('The person is:'+labels[i])

文件夹中素材

利用face_recognition进行人脸识别,从全班证件照中找出自己_第1张图片
在代码目录中放置了unknown的图片

利用face_recognition进行人脸识别,从全班证件照中找出自己_第2张图片
在photo文件夹中放入其他训练图片
利用face_recognition进行人脸识别,从全班证件照中找出自己_第3张图片
这里是结果,results输出了对于每张图片的判断情况,两张相同人物的照片都被输出了出来,这里还可以继续优化。

结语

需要最后提一下的是,本人用上述代码对20张同学的照片进行了测试,虽然能够找到自己,但是还输出了好几个其他同学的名字,凭借单一且离线的算法并不能够保证判断的精度。

利用face_recognition进行人脸识别,从全班证件照中找出自己_第4张图片
全文代码的原理为,将人脸转化为一个个如上图所示的向量,遍历并且进行判断,重点在于用户自主投入数据的过程,这种过程能够让初学者理解各种人工智能案例的基础原理,比较有教育意义。

你可能感兴趣的:(python,人脸识别,人工智能,深度学习)