最近对人脸识别(准确来说是:人脸辨识+人脸检索)特别敢兴趣,想要一探究竟,却没有一个大题的思路,故向各位大佬求解。
我也在网上查阅了一些资料,找到一些思路,比如说最简单的有用 python 的 face_recognition,但是我感觉这个是否是太简单了,不能应用于正式的生产环境。
于是我找啊找,终于找到了这样一篇文章( https://www.itread01.com/content/1546931718.html),该文章利用 python、tensorflow、opencv 进行人脸识别,大体思路如下:
1、利用 opencv 的人脸检测器(如 haarcascade_frontalface_alt2.xml),识别人脸并保存。 2、将保存的这些人脸放到 tensorflow 进行模型训练,得到模型 3、通过模型辨识出,图片中这个人是谁。
看过这篇文章,还是有很多困惑: 1、支付宝,微信(或者说用于生产环境)的人脸识别,大致思路也是如此吗?还是其他 2、我最终的目的是想实现人脸检索(不是人脸比对),那么每个人的人脸我都要使用大量样本进行训练吗? 3、人脸检索这块具体是怎么样的呢,比如说有 1 万人的,他是如何去检索的呢?借助数据库,还是就是 tensorflow 的模型呢 4、想起来,这个对程序要求比较高,为什么 python 这类脚本语言,在这个领域这么突出呢,用 java,golang 这类编译型语言不是更好吗?
1
ipwx 2019-08-27 13:05:58 +08:00 via Android
不是做这块的,但我做 deep generative model。我猜测不管是用 opencv 还是用 neural network,肯定有提取特征,特征提取为向量,并且这个向量要满足向量距离越近,脸越像。然后建立人脸向量数据库,或者检索树。给一张查询人脸,通过同样的算法检索出一定量和它像的人脸,再进行两两比对,找出最像的。
|
2
ipwx 2019-08-27 13:08:11 +08:00 via Android
至于用 python: 因为别的语言没有这么全的库呀。你列举的这些库都是 c++ 写的,给 python 能调用,所以不会有性能问题。至于为啥不用 c++?因为 c++ 程序员找不到多少靠谱的呀
|
3
across 2019-08-27 13:12:58 +08:00
关键算法,人脸数据建模、计算处理当然是 C/C++完成的。python 脚本只是做些数据调用等外部操作····
|
4
swulling 2019-08-27 13:14:27 +08:00
用英文搜资料,比如 https://github.com/davidsandberg/facenet 这个实现了 Google 的 FaceNet
|
5
JohnChiu 2019-08-27 16:26:18 +08:00
face_recognition 那个用的是 Dlib 的人脸识别是人脸检测,可以认为是特殊的目标检测,而支付宝微信的人脸识别是人脸检索,跟人脸检测不是一回事。
OpenCV 那个基于 HAAR 特征的的人脸检测都多久之前的技术了,检测成功率都不能看,更别说用于生产环境了。现在主流的人脸检测是基于深度神经网络的,人脸检索就不清楚了,但也是基于人脸特征的,提取方法五花八门,不知道现在有什么主流的技术 |
6
dogandcat OP @JohnChiu 是的,OpenCV 那个人脸检测只有正脸的时候才会好些,画面稍微有些不理想就不行。所以想要求解一个正确的,主流的思路
|
8
whp1473 2019-08-27 17:35:16 +08:00
我就说静态非活体人脸检测
1.首先是深度神经网络进行学习,提取人脸特征值,这个值就是人脸上重要点位的坐标信息 2.大量训练后,就可以得到一个集合类似于[-12,-324,100,-30...],一般越多人脸比对越准确 3.然后构建一个内存型的服务器,将 faceId->人脸特征关联起来,建立一个映射 4.当一张脸来时,依次对该人脸特征进行矩阵运算得到一个分值,该分值越小代表人脸特征越相近 5.一般会有个阈值,低于该阈值可以认为相似。若追求准确则扫库,得到结果 faceId |
9
dswyzx 2019-08-27 17:42:54 +08:00
接别人 sdk 吧.阿里的人脸识别技术记得也是 face++的
|
12
dogandcat OP @ipwx 有那种成熟开源的库,还是可以,比如说 tensorflow 之类的。别人家的 sdk 那种就不太想,因为用多了还是贵,而且技术也不是自己的,就是调接口
|
13
zizhoutong 2019-08-28 10:02:42 +08:00
|
14
ipwx 2019-08-28 10:10:46 +08:00
@dogandcat 我说的就是 TensorFlow 啊。TensorFlow 的 Java API 只能载入已经存下来的模型,不能自由创建模型,基本没用。 https://www.tensorflow.org/api_docs/java/reference/org/tensorflow/package-summary
TF 1.0 我都是直接 Python 代码创建模型的,载入存下来的参数。直接载入存下来的 Graph ?还不如用 Python 代码创建来的方便,随时可以改。 |