Abstract:本文记录了在学习深度学习过程当中,使用opencv+mtcnn+facenet+python+tensorflow,开发环境为ubuntu18.04,实现局域网链接手机摄像头,对目标人员进行实时人脸识别,效果并不是特别好,会继续改进html
这里是python
若是各位老爷看完以为对你有帮助的话,请给个小星星,3qlinux
当前时间距facenet论文发布已有三年,网上对于facenet的解读也有许多,但却也找不到什么能修修改改就能用的代码,因此本文就此而生,将会系统的介绍在CNN在图像识别方向-人脸识别,我会把我遇到的一切问题以及看法都陆续的补充在本文中,并会附上项目地址,保证各位官人看的开心。git
你确定已经或多或许对机器学习或者是深度学习有些了解,因此你应该知道整个项目的过程无非就是github
由于如今我还处于菜鸟阶段,有幸搭建过的几个网络无非是吴恩达老师课程中的几个浅层网络,实现了一些非主流功能,还有的就是google官方的一些教学例子,总之都是些帮助巩固知识,可是没什么luan用的,若是想要做出比较吊的东西仍是须要使用大公司和大神开源的一些模型,“嫁接”过来,改改,又不能不能用......真香算法
github上开源的一些项目以及一些大公司开源的项目,其项目文件通常包含 网络的搭建 网络的测试等文件,其训练好的模型每每比较大,须要另到他出下载,当咱们有了一个项目的想法之后,并肯定了要用哪些项目时候,切记几件事,否则后面会很影响效率数据库
ok,废话说完,开工ubuntu
链接手机摄像头,并经过其一些小函数,对图片进行一些简单的处理,手机上要下载一个appip摄像头
windows
import cv2 video="http://admin:admin@192.168.0.107:8081/" #此处@后的ipv4 地址须要修改成本身的地址 # 参数为0表示打开内置摄像头,参数是视频文件路径则打开视频 capture =cv2.VideoCapture(video) # 建个窗口并命名 cv2.namedWindow("camera",1) # 用于循环显示图片,达到显示视频的效果 while True: ret, frame = capture.read() # 在frame上显示test字符 image1=cv2.putText(frame,'test', (50,100), cv2.FONT_HERSHEY_COMPLEX_SMALL, 2, (255, 0 ,0), thickness = 2, lineType = 2) cv2.imshow('camera',frame) # 不加waitkey() 则会图片显示后窗口直接关掉 key = cv2.waitKey(3) if key == 27: #esc键退出 print("esc break...") break if key == ord(' '): # 保存一张图像 num = num+1 filename = "frames_%s.jpg" % num cv2.imwrite(filename,frame)
github上的facenet工程在实现facent的时候,为了便于测试,mtcnn也一放在了工程文件中,在工程中的位置是align/detect_face.py
,它的参数模型也保存在align文件夹下,分别是det1.npy,det2.npy,det3.npy
,它的用法即是先将网络搭建出来,定位input中的人脸的位置,而后返回本身设置的固定大小的脸部crop,而后再将其输入facenet就ok了(做用就是人脸检测+定位+对齐,由于咱们首要目的是让工程能跑起来,而且对其有一个大致的认识,这才方便后面的学习,具体的实现原理和代码解读,以及物体的检测发展历史,目前的发展方向,各类检测的算法,我会在文章的后面细说)服务器
facenet.py直接放在主目录下了,其主实现的功能是搭建网络,而后从模型中加载参数,接收固定大小的剪裁好的人脸照片,最终通过embeding层输出1*128的脸部特征向量,计算不一样脸部照片的类似度时候直接计算向量的欧式距离就ok了,同一我的的照片,它们的差值比较小,不一样的人差值会比较大,其中facenet最后使用的是triplet loss方法来微调embeding(具体的论文算法,网络搭建,各类算法,以及代码解读我都放在文章的最后再说)
### 目录结构
detect_face.py
,这里面的东西在facenet的项目中的均可以找到train_dir
顾名思义,就不解释了facenet.py
就是一直在谈的东西,其中包含了如何搭建facenet网络,以及计算的内容test.py
train_knn.py
temp_test.py
imageconvert.py
这几个文件分别人脸识别测试
、 训练knn模型
、 遇到问题是精简代码调试使用
、 图像批量转化 用于准备数据集
其余的没有谈及的文件都没有使用到,应该是之前测试时候忘记删除的这是使用手机摄像头拍摄ipad从网上随便搜来的合照进行测试(也许也不是随便搜的...),可以准确将人脸框出,并进行识别,由于我使用的是knn训练的,而这几我的是未通过特殊训练的,因此将其归结为未知人群,再接下来一段时间会对其进行改进,最终效果应该是能够实现单张图片数据库比对,这样就不用对须要识别的目标每个都训练一遍了,这也是人脸识别要达到的效果,上面所说的triplet loss就是一种很好的方法
由于房间光线比较暗,用手机摄像头拍摄之前的自拍,识别成功
本项目里的几个运行的代码,我都写好了参数,直接运行便可(固然制定文件要在指定位置) 运行顺序是
train_knn.py
获得本身的knn模型test.py
(记得要把手机上的ip摄像头app打开,点击下面打开IP摄像头服务器
,并检查下显示的局域网ip和test.py
中的是否相同,如不相同,改一下)至此你应该已经成功跑起来这个项目了,在此感谢开源的伟大,让咱们能感觉到这些神奇的算法
好学的各位爷确定是要将代码好好看一通的,由于我也是菜鸡,看到拙劣之处,请会心一笑...
代码思路
学习思路
至此,你应该已经很容易的就可以吃透本项目的内容了,读完下面的论文和各类算法的衍生,相信你必定对计算机视觉会有更加深入的认识,而且会以为豁然开朗~
接下来的暑假时间我要去玩玩其余的方向了,好比NLP啥的,好像很火,找工做简历里仍是有几个项目好,以前说好的解读,我会在晚上打完游戏的时候写,毕竟一天沉淀的时间,我保证确定会写的,各位爷,白了个白
关于物体检测的牛逼好文 基于深度学习的目标检测
Selective Search中如何选择初始时Bounding Box区域合并原理
Bounding Box如何调整边框回归(Bounding Box Regression)详解
图文并茂详细介绍的目标检测重大发展的paper原理基于深度学习的目标检测技术演进
参考文章