基于MTCNN/TensorFlow实现人脸检测


Posted in Python onMay 24, 2018

人脸检测方法有许多,比如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/TensorFlow实现人脸检测

  基于MTCNN/TensorFlow实现人脸检测

基于MTCNN/TensorFlow实现人脸检测

基于MTCNN/TensorFlow实现人脸检测

再上一组效果图:

基于MTCNN/TensorFlow实现人脸检测

基于MTCNN/TensorFlow实现人脸检测

 关于MTCNN,更多资料可以点击链接

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用Python的Twisted框架实现webshell密码扫描器的教程
Apr 16 Python
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
python删除指定类型(或非指定)的文件实例详解
Jul 06 Python
关于Django显示时间你应该知道的一些问题
Dec 25 Python
详谈在flask中使用jsonify和json.dumps的区别
Mar 26 Python
举例讲解Python常用模块
Mar 08 Python
opencv设置采集视频分辨率方式
Dec 10 Python
如何通过Django使用本地css/js文件
Jan 20 Python
python中os包的用法
Jun 01 Python
详解python爬取弹幕与数据分析
Nov 14 Python
Python实现老照片修复之上色小技巧
Oct 16 Python
python中的3种定义类方法
Nov 27 Python
Jupyter中直接显示Matplotlib的图形方法
May 24 #Python
基于python神经卷积网络的人脸识别
May 24 #Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
May 24 #Python
Tensorflow实现卷积神经网络的详细代码
May 24 #Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
May 24 #Python
Tensorflow卷积神经网络实例进阶
May 24 #Python
Tensorflow卷积神经网络实例
May 24 #Python
You might like
PHP调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
php全局变量和类配合使用深刻理解
2013/06/05 PHP
php控制文件下载速度的方法
2015/03/24 PHP
php结合正则获取字符串中数字
2015/06/19 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
jQuery 插件 将this下的div轮番显示
2009/04/09 Javascript
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
Javascript根据指定下标或对象删除数组元素
2012/12/21 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
js的flv视频播放器插件使用方法
2015/06/23 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
利用AngularJs实现京东首页轮播图效果
2016/09/08 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
2016/10/24 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
2019/01/20 Javascript
js实现网页随机验证码
2020/10/19 Javascript
python类和函数中使用静态变量的方法
2015/05/09 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
Pytorch之contiguous的用法
2019/12/31 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
JAVA和C++的区别
2013/10/06 面试题
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
工作交流会欢迎词
2014/01/12 职场文书
支教个人总结
2015/03/04 职场文书
雷锋的故事观后感
2015/06/10 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL
详解Mysq MVCC多版本的并发控制
2022/04/29 MySQL
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript