基于MTCNN/TensorFlow实现人脸检测
作者:Mr_EvanChen 发布时间:2021-07-05 23:51:19
标签:TensorFlow,MTCNN,人脸检测
人脸检测方法有许多,比如opencv自带的人脸Haar特征分类器和dlib人脸检测方法等。对于opencv的人脸检测方法,有点是简单,快速;存在的问题是人脸检测效果不好。正面/垂直/光线较好的人脸,该方法可以检测出来,而侧面/歪斜/光线不好的人脸,无法检测。因此,该方法不适合现场应用。对于dlib人脸检测方法 ,效果好于opencv的方法,但是检测力度也难以达到现场应用标准。
MTCNN是基于深度学习的人脸检测方法,对自然环境中光线,角度和人脸表情变化更具有鲁棒性,人脸检测效果更好;同时,内存消耗不大,可以实现实时人脸检测。
代码如下:
from scipy import misc
import tensorflow as tf
import detect_face
import cv2
import matplotlib.pyplot as plt
%pylab inline
minsize = 20 # minimum size of face
threshold = [ 0.6, 0.7, 0.7 ] # three steps's threshold
factor = 0.709 # scale factor
gpu_memory_fraction=1.0
print('Creating networks and loading parameters')
with tf.Graph().as_default():
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=gpu_memory_fraction)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options, log_device_placement=False))
with sess.as_default():
pnet, rnet, onet = detect_face.create_mtcnn(sess, None)
image_path = '/home/cqh/faceData/multi_face/multi_face3.jpg'
img = misc.imread(image_path)
bounding_boxes, _ = detect_face.detect_face(img, minsize, pnet, rnet, onet, threshold, factor)
nrof_faces = bounding_boxes.shape[0]#人脸数目
print('找到人脸数目为:{}'.format(nrof_faces))
print(bounding_boxes)
crop_faces=[]
for face_position in bounding_boxes:
face_position=face_position.astype(int)
print(face_position[0:4])
cv2.rectangle(img, (face_position[0], face_position[1]), (face_position[2], face_position[3]), (0, 255, 0), 2)
crop=img[face_position[1]:face_position[3],
face_position[0]:face_position[2],]
crop = cv2.resize(crop, (96, 96), interpolation=cv2.INTER_CUBIC )
print(crop.shape)
crop_faces.append(crop)
plt.imshow(crop)
plt.show()
plt.imshow(img)
plt.show()
实验效果如下:
再上一组效果图:
关于MTCNN,更多资料可以点击链接
来源:https://blog.csdn.net/Mr_EvanChen/article/details/77650883


猜你喜欢
- 最近在开发过程中经常用到分页,今天挤出些时间来捋一捋自己的经验在web开发中,一般显示数据列表页时,我们会用到分页控件来显示数据。采用分页一
- 本文实例为大家分享了python实现简单学生管理系统的具体代码,供大家参考,具体内容如下学生管理系统相信大家学各种语言的时候,练习总是会写各
- mysql的root账户,我在连接时通常用的是localhost或127.0.0.1,公司的测试服务器上的mysql也是localhost所
- 判断函数如下:Public Function CheckBIG(strSource As String) As BooleanDim idx
- PDO::setAttributePDO::setAttribute — 设置属性(PHP 5 >= 5.1.0, PECL pdo
- php循环输出26个大小写英文字母for($i=65;$i<91;$i++){ echo strtolower(chr($
- 一、实验目的熟练掌握pandas中的groupby操作二、实验原理groupby(by=None, axis=0, level=None,
- 大家都出书,我也很幸运的有了这本书,不过一本书的好与坏,错与对都是在于一个人的理解,web标准这个东西主要还是大家理解,理解的深
- python窃取摄像头照片源码+获取授权码方法+py打包成exe教你用python做一个属于自己的窃取摄像头照片的软件。需要安装python
- 本文实例为大家分享了python脚本筛选出两个文件中重复的行数,供大家参考,具体内容如下'''查找A文件中,与B文件
- Django View官方文档一个视图函数(类),简称视图,是一个简单的 Python 函数(类),它接受Web请求并且返回Web响应。响应
- 使用matplotlib.tri.CubicTriInterpolator.演示变化率计算:完整实例:from matplotlib.tri
- 1、引言小 * 丝:鱼哥, 都说要想代码写的溜,Lamdba不能少。小鱼:你在项目代码多写几个lamdba试试,看看架构师找不找你喝茶水。小 * 丝
- 注意:首先你电脑必须安装git版本控制器(软件),在官网下载即可。pycharm中使用git以及github很简单,首先在设置中搜索gith
- 微信这个东西估计宅男没几个不熟悉的吧,微信经过这么两年多的发展终于向开放平台跨出了友好的一步。蛋疼的以为微信会出一个详细的api等接口,兴奋
- 这里我推荐大家使用pycharm百度输入关键词:pycharm,点击如图所示网站进入pycharm官网选择电脑系统版本,这里我们选择Wind
- 本文实例讲述了php中$_GET与$_POST过滤sql注入的方法,分享给大家供大家参考。具体分析如下:此函数只能过滤一些敏感的sql命令了
- lstm(*input, **kwargs)将多层长短时记忆(LSTM)神经网络应用于输入序列。参数:input_size:输入'x
- Pyinstaller库简介:简单来说,就是直接将python语言编写的py程序打包为exe可执行文件,对方不需要安装python环境即可直
- 当前需求:有group和factor两张表,一个group对应多个factor,现在想查询有效的group和对应的有效的factor,两个表