点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文转自|OpenCV学堂

Facenet网络介绍FaceNet是谷歌提出的人脸识别模型,它跟其他人脸识别模型最大的一个不同就是它不是一个中间层输出,而是直接在欧几里德低维空间嵌入生成人脸特征,这个对以后的各种识别、分类、相似度比较都非常方便。相比其他的深度学习方法,FaceNet仅需要128个字节来表示一张脸。FaceNet网络设计目标任务有如下
1.验证-验证是否为同一张脸
2.识别-识别是否为同一个人
3.聚类-发现人脸具有相同之处的人
关于什么是神经网络嵌入,这个解释比较复杂,简单的说神经网络的嵌入学习可以帮助我们把离散变量表示为连续的向量,在低维空间找到最近邻,tensorflow中的word2vec就是用了嵌入。一旦嵌入神经网络训练好以后,目标任务就变得很简单:
人脸验证 – 就变成相似度比较问题
人脸识别 – 就变成KNN分类问题
人脸聚类 – 就变成通过K-Means可以完成的问题
相比其它的人脸识别网络,通过添加分类层实现人脸识别,在分类层之前输出的人脸特征数据动则就几千个维度数据,而且不能很好表达一张新的人脸。FaceNet使用三元损失函数基于LMNN训练输出128维的连续向量。三元损失包含了两个匹配人脸的指纹与一个不匹配的人脸指纹,损失函数训练的目标是训练它在匹配人脸指纹与不匹配人脸指纹之间距离margin足够大为止。人脸指纹来自人脸区域图像,没有经过对齐,只是结果简单的几何变换。整个网络架构与三元表示如下:其中对正负样本的选择需要选择难样本得到triplet,有利于更好的训练效果与模型收敛。代码实现:借用了Github上的一个tensorflow版本facenet实现,下载了预训练的facenet模型,基于得到embedding数据,这个会输出512个维度数据,进行比较实现人脸相似度计算。相似度计算采用了余弦相似度度量,两个嵌入数据距离为0表示完全一致,距离为1表示完全不同。0.5或者90度表示二者相互独立。
facenet预训练模型下载:
https://github.com/davidsandberg/facenet
加载模型与样本数据代码如下
with tf.Graph().as_default():with tf.Session() as sess:# Load the modelfacenet.load_model("D:/python/facenet/data/20180408-102900")# Get input and output tensorsimages_placeholder = tf.get_default_graph().get_tensor_by_name("input:0")embeddings = tf.get_default_graph().get_tensor_by_name("embeddings:0")phase_train_placeholder = tf.get_default_graph().get_tensor_by_name("phase_train:0")# Run forward pass to calculate embeddingsimages, names = load_face_labels()num_labels = len(names)feed_dict = {images_placeholder: images, phase_train_placeholder: False}labels_embeddings = sess.run(embeddings, feed_dict=feed_dict)
人脸比较的代码如下
def face_compare(face_image):# Run forward pass to calculate embeddingsfeed_dict = {images_placeholder: face_image, phase_train_placeholder: False}embedding_result = sess.run(embeddings, feed_dict=feed_dict)minDist = 1000000label_index = -1for i in range(num_labels):# 余弦相似dist = facenet.distance([labels_embeddings[i]], [embedding_result[0]], 1)if minDist > dist:label_index = iminDist = distprint("minDist: %1.4f"%minDist)if minDist > 0.25:return "unknown"if names[label_index] == 3:return "zhigang"if names[label_index] == 2:return "peter"if names[label_index] == 1:return "balvin"
OpenCV实时摄像头调用与输出
capture = cv.VideoCapture(0)
height = capture.get(cv.CAP_PROP_FRAME_HEIGHT)
width = capture.get(cv.CAP_PROP_FRAME_WIDTH)
out = cv.VideoWriter("D:/faces.mp4", cv.VideoWriter_fourcc('D', 'I', 'V', 'X'), 15,(np.int(width), np.int(height)), True)
while True:ret, frame = capture.read()if ret is True:frame = cv.flip(frame, 1)cv.imshow("frame", frame)rgb = cv.cvtColor(frame, cv.COLOR_BGR2RGB)result, bb = mtcnn_align_demo(rgb)if result is not None:name = face_compare(result)cv.rectangle(frame, (bb[0], bb[1]), (bb[2], bb[3]), (0, 0, 255), 1, 8, 0)cv.putText(frame, name, (bb[0], bb[1]), cv.FONT_HERSHEY_SIMPLEX, 1.0, (0, 255, 0), 2, 8)cv.imshow("face recognition demo", frame)out.write(frame)cv.imwrite("D:/face_recognition.png", frame)c = cv.waitKey(10)if c == 27:breakelse:break
out.release()
capture.release()
cv.destroyAllWindows()
人脸数据采集通过MTCNN进行人脸实时检测,采集了待比较的每个人的人脸数据,进行了数据采选,打上了标签。采集数据代码如下:
while True:ret, frame = capture.read()if ret is True:frame = cv.flip(frame, 1)cv.imshow("frame", frame)rgb = cv.cvtColor(frame, cv.COLOR_BGR2RGB)result = detection(rgb)out.write(result)c = cv.waitKey(10)if c == 27:breakelse:break
cv.destroyAllWindows()
更详细的关于MTCNN可以看推荐阅读
运行效果balvin与我

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

OpenCV+Tensorflow实现实时人脸识别演示相关推荐

  1. opencv python 人脸识别 相似度_OpenCV+Tensorflow实现实时人脸识别演示

    原标题:OpenCV+Tensorflow实现实时人脸识别演示 Facenet网络介绍 FaceNet是谷歌提出的人脸识别模型,它跟其他人脸识别模型最大的一个不同就是它不是一个中间层输出,而是直接在欧 ...

  2. gpu训练cnn人脸识别准确率_opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别

    opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别 Abstract:本文记录了在学习深度学习过程中,使用opencv+mtcnn+facenet+pyth ...

  3. mtcnn人脸检测python_opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别

    Abstract:本文记录了在学习深度学习过程中,使用opencv+mtcnn+facenet+python+tensorflow,开发环境为ubuntu18.04,实现局域网连接手机摄像头,对目标人 ...

  4. python+ opencv实现摄像头实时人脸识别并实现汉字标框

    opencv的puttxt()函数不能汉字输出,这也是困惑好多人都问题,经过几天的查资料,改代码终于成功实现opencv汉字输出. 第一种方法是 是通过写一段代码,能够转码,封装一下再调用,从而实现汉 ...

  5. OpenCV+face++实现实时人脸识别解锁功能

    1.背景 最近做一个小东西,需要登录功能,一开始做的就是普通的密码登录功能,但是之前看到过python可以做人脸识别,所以我就开了下脑洞,能不能实现一个自己的刷脸解锁功能. 2.知识储备 python ...

  6. python人脸识别库_基于facenet的实时人脸识别系统

    facenet_facerecognition opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别 Abstract:本文记录了在学习深度学习过程中,使用o ...

  7. python人脸识别解锁电脑_OpenCV+face++实现实时人脸识别解锁功能

    本文实例为大家分享了OpenCV+face++实现实时人脸识别解锁功能的具体代码,供大家参考,具体内容如下 1.背景 最近做一个小东西,需要登录功能,一开始做的就是普通的密码登录功能,但是之前看到过p ...

  8. Java + opencv 实现人脸识别,图片人脸识别、视频人脸识别、摄像头实时人脸识别

    搭建环境 opencv官网下载windows安装包 https://opencv.org/releases/ 选择最新版4.1.1 下载完成后是一个opencv-4.1.1-vc14_vc15.exe ...

  9. python读取视频流做人脸识别_基于OpenCV和Keras实现人脸识别系列——二、使用OpenCV通过摄像头捕获实时视频并探测人脸、准备人脸数据...

    基于OpenCV和Keras实现人脸识别系列手记: 项目完整代码参见Github仓库. 本篇是上面这一系列手记的第二篇. 在Opencv初接触,图片的基本操作这篇手记中,我介绍了一些图片的基本操作,而 ...

最新文章

  1. java adobe pdf转word_原来PDF转Word这么简单!现在才知道
  2. 四川大学研究生的一封公开信
  3. 设计模式-结构型-组成
  4. 【面经】记一次字节跳动前端面试经历
  5. 利用shell脚本统计代码行数
  6. Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法笔记-协议与分类...
  7. mysql延时优化教程_Mysql优化之延迟索引和分页优化_MySQL
  8. java编译系统资源不足_Ant编译项目资源不足
  9. 啊哈C语言,c语言编程入门书籍及PPT(PDF版)下载网址
  10. mysql 默认sql mode_MySQL的sql_mode模式说明及设置
  11. 在java中获取当前时间_JAVA中获取当前系统时间
  12. Socket开发探秘--基于Json格式的数据协议收发
  13. 1,使用three20来创建tableview
  14. Spring MVC 解读——context:component-scan/
  15. 中国现代文学专题形考2022
  16. 职场分享:职场生涯中我们经常面临的一些困惑
  17. RTC实时时钟(学习笔记)
  18. 动态规划的特点及其应用[安徽 张辰]
  19. 人生若只如初见 何事秋风悲画扇
  20. 限定当天的可用次数 redis

热门文章

  1. 西工大开源拥挤人群数据集生成工具,大幅提升算法精度 | CVPR 2019
  2. 10门必看的机器学习免费课程
  3. 易观于揚:数据分析是人工智能的基础构件
  4. 马上 2018 年了,该不该下定决心转型AI呢?
  5. 比AlphaGo Zero更强的AlphaZero来了!8小时解决一切棋类! PENG Bo
  6. ICCV2017 | 一文详解GAN之父Ian Goodfellow 演讲《生成对抗网络的原理与应用》(附完整PPT)
  7. 一次性搞定权限树遍历(通用解决方案)
  8. 分布式定时任务xxl-job的常用姿势都集齐了,So Easy!
  9. 它,是一部全网最全的JDK发展历史轨迹图...
  10. Python数据处理入门教程!