人脸识别实践(2) - 人脸识别系统展示

写在前面

  由于直接讲代码略显枯燥,遵循个人做事风格,先看整体效果,再进行细致了解,这和始于颜值,忠于人品差不多的意思。这个章节介绍完功能后,感兴趣的同学,可以通过下个章节的代码解析,进行深入的了解。对作者来说也算是完成了一个人脸识别基础功能的Demo开发吧。

1. 人脸注册

  我在网上找了一些大家熟知的明星,将头像清晰的照片进行了保存,人脸注册,需要上传头像的照片,同时输入用户ID和用户信息,写2个字段,是因为真实情况下,会存在重名的情况,可以将用户ID作为唯一,将用户信息作为名字,当然根据需求做调整也行,这里只是抛砖引玉。

在这里插入图片描述

  设计逻辑简单提一下,在用户上传图片后,将图片数据、用户ID、用户信息一起作为对象,传送给后端的服务,由后端进行头像的特征点获取,获取成功后,进行保存。

2. 人脸更新

  当完成需要录入的人脸后,如果需要更新库中人的照片,就需要进行人脸更新了,人脸更新目前逻辑为以用户ID为唯一的校验值,进行其他信息的更新,包括用户信息和用户的人脸照片。

在这里插入图片描述

3. 人脸删除

  根据库里面的用户ID,删除用户已经进行了人脸注册的数据,包含后台存储的用户头像的图片数据,确保服务端不留存已删除的无用数据。

在这里插入图片描述

4. 人脸库查询

  人脸库查询,使用了比较粗暴的方式,查库里的top n条数据,上面的其他模块,做完操作都进行了库查询,这里就不放示例图了。

5. 人脸识别

  接下来就到了最重要的人脸识别模块了,我们通过输入一张人物照片,将照片与人脸库中的用户信息进行对比,返回在人脸库中相似度最高的一个用户信息,如果输入的是库中存在的人物照片,那么找到对应人的准确率会比较高,一般超过92%的相似度代表是同一个人,当然如果需要区别双胞胎,那么阈值会更高。这里只是简单提一下,具体真正工程项目中,需要考虑的东西远不止这些。

在这里插入图片描述

  下面我们上传一张人脸库外的人物头像进行测试,大家可以看到结果,赫敏和迪丽热巴的相似度有87%,虽然人来看很容易区别,但是计算出来的相似度并不低,确实不是同一个人。

在这里插入图片描述

6. 扩展思考

  虽然看起来这像一个系统,但是实际上真正工程化需要考虑的东西很多,这里简单提几点,后面如果有时间和必要,我会专门进行介绍。

  • 人脸库可扩展

  示例中只使用了一个库,所有的注册、更新、删除、对比都在同一个库中,实际真实的场景中,我们可以增加不同的库,这样就能够用于多个库的管理了。例如小区中有8栋楼,每栋楼都有不同的业主,那就需要将每一栋业主的人脸信息分别录到8个不同的组中,分别进行验证,这样就不会存在1栋的业主,可以用人脸识别打开8栋业主的门禁了。

  • 人脸识别准确率

  这个是人脸识别中最重要的,我们使用的模型shape_predictor_68_face_landmarks.dat,实际上是使用外国的人脸数据进行训练的,做Demo还行,想真正的实用,还需要专门的图像工程师来进行数据处理和模型调参/训练,还要考虑不同光线下的鲁棒性,而且特征点可能也不止这点,国内人脸识别做得比较好的是旷视、依图、BAT等,他们都有专门的图像算法团队在做这一块。

  • 人脸库搜索效率

  示例中,传入一张照片后,会和库中的每一个用户头像信息进行比较,计算余弦相似度,消耗的时间是线性的,如果每次计算消耗100ms,那么如果库中有100个用户,就需要10秒,这肯定是不现实的,而且真实环境中,1000个用户甚至更多是很正常的,不可能一直使用这种线性的方式来做。可以考虑使用Milvus等类似的向量数据库,进行top n的查询,将top n取出来进行计算,解决人脸搜索效率问题。

猜你喜欢

转载自blog.csdn.net/initiallht/article/details/122527657