最简单的人脸识别系统搭建

小帅编:努力不一定成功,放弃就等于失败!

注:有任何问题可以在下面评论或者私信小帅编,看到一定会回复。

前言:人脸识别系统目前已经非常的成熟了,所以也有一些优秀的开源项目,比如我们今天要用的到insightface。不啰嗦直接上代码。

百度网盘 :代码 提取码:ix9n
cndn免费下载 人脸识别代码

这是小编自己手撸的一个人脸识别系统,代码比较简单,代码量也很少就三个py文件,可谓是麻雀虽小五脏俱全。因为要写得完善健全的话,代码量肯定会增加很多,对于我们来说阅读起来不太友好。所以看懂系统搭建流程以及代码后,可以根据自己需求去改动和完善。

环境
Windows 10
python3.6
cuda10
mxnet-cu100 1.5.0
insightface 0.1.5
numpy 1.14.5
识别对象介绍(熟悉的可自动跳过)

想必小伙伴应该都认识苍老师的,苍老师是大家熟悉和喜欢的日本演员,确确实实影响了一代人,言传身教更是体现的淋漓尽致。每次看到苍老师的电影,都会被她的演技所折服。2017年苍井空宣布退出女演员行业。2018年1月1日晒出婚戒宣布已于圈外老公结婚,苍井空称老公“不是帅哥也没有钱,但是接受了自己以前的工作”。去年5月1日,苍井空产下双胞胎儿子,此后一直宅在家里精心照顾宝宝,回归于平淡生活。
最简单的人脸识别系统搭建_第1张图片
以及这位号称日本林志玲,波多老师是一位经历过坎坷的老师,入籍H.M.P公司后, 本以为她是继星野美优后又一素人神话,但是却很快被公司所遗弃,直到2009年9月9日在SKY HIGH公司的精心包装下,波多野结衣才重新回到我们的视线。
最简单的人脸识别系统搭建_第2张图片
咏美老师,98年出生,现在也才只有22岁的年龄,但是在日本娱乐圈已经算得上是一位老资格了,她拥有让人羡慕的长相,只是看上一眼就能感受到她的精致,而且这样的美女,在现实生活中,确实很少见,而且再加上她这高挑又性感的身材,她能从众多日本女星中突出重围,也是合情合理。
最简单的人脸识别系统搭建_第3张图片

流程

1.检测人脸,就是从图片检测出来人脸所在的位置代码如下。
import insightface
import cv2

img = cv2.imread('image_path')
model = insightface.model_zoo.get_model('retinaface_r50_v1')
# ctx_id = -1 代表不用cuda加速,如要使用则填对应显卡号0,1,2等。。。
model.prepare(ctx_id = -1, nms=0.4)

# 返回坐标bbox 和每张人脸的五个关键点landmark 
bbox, landmark = model.detect(img, threshold=0.5, scale=1.0)

2.根据返回结果取出人脸图像和对应每张人脸的五个关键点。
for i, box in enumerate(bbox):
	face = image[box[1]:box[3],box[0]:box[2]]
	ladk = landmark[i]
3.取出人脸的图片有些人是歪着头的怎么办呢。

调整前
哈哈,当然是扶正他啊!你看上面苍老师的头就是歪的,这样直接送入提取特征的网络肯定是不好的,所以各位小伙伴千万不能歪了哦。扶正的原理是根据那五个关键点来做的,人脸对齐代码在项目里的face_alignment.py。
最简单的人脸识别系统搭建_第4张图片

4.根据人脸照片放到我们insightface里面提取特征的网络里面,得到一个512维的特征向量。
'''
输入112*112*3的人脸得到512维向量
'''
model = insightface.model_zoo.get_model('arcface_r100_v1')
model.prepare(ctx_id = -1)

emb = model.get_embedding(img)
5.将这个特征向量与人脸底库(人脸底库就是最开始预存的需要被识别的所有人脸,通过上面提取特征网络提取出来的向量)的所有特征向量进行一个相似度计算,这里我是使用的余弦相似度计算。计算出来相似度最高的对应于相应的图片
'''
计算余弦相似度
'''
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

arr1 = np.random.randn(1,512)
arr2 = np.random.randn(5,512)
cos = cosine_similarity(np.array(arr1), np.array(arr2))
完整代码使用说明 :代码 提取码:ix9n

最简单的人脸识别系统搭建_第5张图片
1.在data/facedata/ 按照我的格式放进去你自己需要录进去的底库数据
2.底库数据放好后执行SetFaces.py,将人脸向量录入底库
3.在test.py里面改好你要测试的图片路径,执行test.py就好了。

你可能感兴趣的:(机器视觉)