专栏首页唐国梁Tommy手把手教学,人脸检测小案例 opencv+MTCNN

手把手教学,人脸检测小案例 opencv+MTCNN

哈喽,大家好,今天我们一起来做一个人脸检测的小应用案例,看看现在满大街普及的人脸检测到底是个什么玩意儿。其实,这个技术没那么唬人,现在技术已经非常成熟啦。小白同学可以跟着我一步一步操作,就能够实现。

具体操作流程如下:

1. 打开电脑上命令行窗口,如图所示:

2. 安装软件包virtualenv, 用于创建虚拟环境。命令如下:

pip install virtualenv

3. 进入桌面,并创建新的文件夹,名称为:Face_Detection,操作如下图:

4. 创建项目所在的虚拟环境,名称为:FD,操作如下图:

5. 进入虚拟环境,并查看默认已经安装的软件包。操作如下图:

【注意:在最前面有(FD),说明我们已经进入到了虚拟环境下。】

6. 安装我们接下来需要用到的软件包opencv,操作如下图:

7. 检验opencv是否安装成功,操作如下图:

【注意:我这里的opencv版本是4.5.1,你和我默认安装的版本可能不同,不过,这并不影响后续操作。】

8. 这里我们使用opencv官网提供的预训练模型(级联正脸检测模型),下载地址如下:

链接: https://pan.baidu.com/s/1xLPrxVVqvXDYAzuVmCaHpg 密码: u8c7

【注意:将该文件放入项目Face_Detection文件夹下】

9. 从这里开始,我们需要写一个python代码文件了。不过,非常简答。具体如下:

【注意:建议各位同学到百度下载代码编辑工具:sublime ,非常方便、高效。下载路径:https://www.sublimetext.com ,由于我提前已经下载、安装了,这里不再演示。安装真的非常简答 ^_^ 】

首先,新建一个空白的python文件,保存到项目文件Face_Detection下,操作如下图所示:

10. 查看我们的项目Face_Detection文件夹下的内容:

11. 准备人脸检测的素材,这里我提供了网上两张图片。如下:

12. 开始写一些代码啦,不过,不用担心,都是写非常简单的内容。后附上代码,各位同学可以直接粘贴、复制、运行。

运行程序,并输出检测框的值,截图如下:

一共输出4个bbox的值,对应着图片1中的4张人脸,所以,检测准确。

13. 我们将在图片上绘制人脸检测框,即做上标记。代码如下:

接下来,运行代码文件,如图所示:

程序运行结果,如图所示:【检测结果其实比较粗糙,检测框并不是很准确。毕竟这个模型不是深度学习的模型,先将就看一看吧。后面,我们还有改进版本。】

14. 接下来,我们以同样的方式在图片02.jpg上进行测试,我们只需要替换上述代码中的一行:img = cv2.imread('02.jpg') 即可。

检测输出结果如下:

检测效果很差了,很多人脸并未被检测出来。毕竟这个opencv自带的人脸检测模型还是一个很古老的工具,在当下的深度学习(卷积神经网络)时代,真的犹如大刀遇见大炮,不能相提并论。

我们继续调节一下2个参数值,看看能不能提高模型的检测效果。这里我们需要条件代码中的一行:face_bboxes = model.detectMultiScale(img),这里重点介绍一下这个函数:detectMultiScale(),具体可以参考官网介绍,链接如下:函数API ,函数里面的几个参数含义如下:

① image表示的是要检测的输入图像

② objects表示检测到的人脸目标序列

③ scaleFactor表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;注意:这个值必须大于1,不然会报错,这是不同版本造成的。

④ minNeighbors表示每一个目标至少要被检测到3次才算是真的目标(因为周围的像素和不同的窗口大小都可以检测到人脸)

我们设置新的参数值:face_bboxes = model.detectMultiScale(img, 1.01, 10),注意这个参数值可以自己调节,多运行几次代码看看效果。【opencv自带的分类器就是这么古老呀】

你会发现,有很多人脸被检测出来了,即使检测框的标注不是很准确。

15. 接下来,我们要用一下高级货啦(深度学习模型),检测效果会大幅提升。这里我们就使用一下MTCNN算法模型,这里提一句:几年前的毕业项目中我就用到了该算法做一些实现。

MTCNN算法全名是(Multi-Task Cascaded Convolutional Neural Networks),论文地址如下:https://arxiv.org/pdf1604.02878.pdf

稍微提一下该算法的核心思想:也就是3个网络,分别是P-Net,R-Net,O-Net构成。

① P-Net :提供候选脸部区域;② R-Net:过滤掉一些检测框,我们也叫bounding-boxes;③ O-Net:提供脸部五官标记。

总结来说,MTCNN算法的3个模型就做了3件事情:脸的分类,bbox回归(位置),脸部坐标点定位。具体算法,建议各位同学看一下刚刚提供的这篇论文。

关于MTCNN算法实现,建议各位同学学习一下:

https://github.com/ipazc/mtcnn

16. 好啦,接下来,我们就开始实现如何利用MTCNN进行人脸检测。

① 安装MTCNN

pip install mtcnn

② 查看mtcnn安装信息

pip show mtcnn

17. 接下来,我们需要重新创建一个python文件,写一些新代码,利用mtcnn实现人脸检测。同样的方式,我们在项目Face_Detection文件夹下创建新的python代码文件,如图所示:

18. 文件创建好啦,接下来,我们写代码,非常简单啦

接下来,我们运行这个python代码文件,如下图:

报错啦,提示我们没有安装matplotlib,简单,安装即可。

pip install matplotlib

同时,我们还需要安装tensorflow,命令如下:

pip install tensorflow-gpu

【注意:如果你的电脑上没有GPU,那么就安装:pip install tensorflow】

安装过程中,会输出一堆安装信息。

19. 我们执行刚刚创建的python代码文件face_mtcnn.py,截图如下: 【运行后,输出一堆信息】

输出信息还包含一些检测到的人脸信息,如图所示: 【bbox,confidence,keypoints】

【注意: 如果运行过程中,报错,如下:】

【解决措施: 在 face_mtcnn.py 文件中加入如下代码片段: 】

20. 根据MTCNN检测到的人脸信息,绘制人脸检测框。我们继续修改python代码文件face_mtcnn.py,具体增加内容如下:

【整个案例的代码资源我会分享,不用担心下载不到代码。No Problem :)】

21. 接下来,我们运行程序,命令如下:

python face_mtcnn.py

检测结果如下: 【虽然检测的人脸框更多了,不过,检测框不准确,还需要调参数。我们后续再改。】

22. 我们继续绘制人脸的五个关键点,分别是: 左眼,右眼,鼻子,左边嘴角,右边嘴角,继续修改代码文件face_mtcnn.py

【增加了绘制人脸的五个关键点代码】

23. 运行代码文件 face_mtcnn.py ,命令如下:

python face_mtcnn.py

输出结果如下: 【各位同学注意一下,每张人脸都有了五个关键点。】

关键点检测还是比较准确的,只是检测框不准确。这主要与网络的模型有关,如果网络训练的好,模型检测性能更佳;否则,就像现在这样,不精准。

解决措施: 可以基于一个大的人脸数据集重新训练MTCNN(主要是P-Net,R-Net,O-Net),关于这三个网络的算法实现,各位同学可以去github看看,有很多开源项目。

如果本篇点赞数过百,那我好好研究一下MTCNN算法,实现一下该算法。:)

好啦,本次案例实践圆满完成 :)如果你按照我的步骤一步一步下来,应该不会有什么问题。

如果遇到任何问题,请到B站,查看我的个人简介,添加"AI学习部落"QQ群一起讨论。

目前,我们一共有10个QQ群,学员已经超过1800名。

更多AI相关课程,请在 网易云课堂 和 B站 关注账号:唐国梁Tommy

本次课程代码资源,请在百度云盘下载:

链接:

https://pan.baidu.com/s/1qsfjLzqE97eU49UN9l7JKA

密码: b6wr

本文分享自微信公众号 - 唐国梁Tommy(TangGuoLiangAI),作者:唐国梁Tommy

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-04-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • OpenCV+Tensorflow实现实时人脸识别演示

    FaceNet是谷歌提出的人脸识别模型,它跟其他人脸识别模型最大的一个不同就是它不是一个中间层输出,而是直接在欧几里德低维空间嵌入生成人脸特征,这个对以后的各种...

    OpenCV学堂
  • OpenCV中支持的人脸检测方法整理与汇总

    自从VJ在2004发表了关于级联分类器实时对象检测的论文以后,级联分类器就在OpenCV中落地生根了,一段时间,特别是OpenCV3.x版本中基于级联分类器的人...

    OpenCV学堂
  • 狗盲不存在!印度小哥实战搭建狗品种识别算法,只要7步

    包括8351张狗图像,分为训练(6680)、验证(835)和测试(836)数据集,以及13233 张人脸。

    新智元
  • MTCNN人脸检测 附完整C++代码

    Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Neura...

    cpuimage
  • 机器学习进阶系列

    本文为博主原创文章,未经博主允许不得转载。有问题可以加微信:lp9628(注明CSDN)。

    MachineLP
  • 深度学习之视频人脸识别系列二:人脸检测与对齐

    人脸检测解决的问题为给定一张图片,输出图片中人脸的位置,即使用方框框住人脸,输出方框的左上角坐标和右下角坐标或者左上角坐标和长宽。算法难点包括:人脸大小差异、人...

    磐创AI
  • 基于MTCNN和MobileFaceNet实现的人脸识别

    本教程是教程是介绍如何使用Tensorflow实现的MTCNN和MobileFaceNet实现的人脸识别,并不介绍如何训练模型。关于如何训练MTCNN和Mobi...

    夜雨飘零
  • 真·干货!这套深度学习教程整理走红,从理论到实践的带你系统学习 | 资源

    如果你想要的是一份从理论到实践的深度学习教程清单,如果你想系统了解各类框架、基础网络与各种使用场景,如果你缺一套即用即查的手边书——

    量子位
  • 「圣诞特辑」纯前端实现人脸识别自动佩戴圣诞帽

    叮叮当,叮叮当,吊儿个郎当,一年一度的圣诞节到咯,我不由的回想起了前两年票圈被圣诞帽支配的恐惧。打开票圈全是各种@官方求帽子的:

    coder_koala
  • OpenCV+OpenVINO实现人脸Landmarks实时检测

    自从OpenCV3.3版本引入深度神经网络(DNN)模块之后,OpenCV对DNN模块支持最好的表现之一就是开始支持基于深度学习人脸检测,OpenCV本身提供了...

    OpenCV学堂
  • 分享|Github上星标超过7000+的OpenCV开发教程

    大家学习OpenCV过程中可能最想知道的就是从哪里可以找到好的学习资料,今天就介绍一位多年计算机视觉与机器学习开发经验的博士,知名技术作者、写过超过1000+篇...

    小白学视觉
  • 【人脸表情识别】如何做好表情识别任务的图片预处理工作

    上一篇专栏文章中,我们介绍了人脸表情识别的相关概念以及研究现状并了解了目前基于图片的人脸表情识别领域最常用的几个数据集。本文将介绍基于图片的人脸表情识别中最常用...

    用户1508658
  • 「圣诞特辑」纯前端实现人脸识别自动佩戴圣诞帽

    叮叮当,叮叮当,吊儿个郎当,一年一度的圣诞节到咯,我不由的回想起了前两年票圈被圣诞帽支配的恐惧。打开票圈全是各种@官方求帽子的:

    Javanx
  • 带你少走弯路:强烈推荐的Keras快速入门资料和翻译(可下载)

    上次写了TensorFlow和PyTorch的快速入门资料,受到很多好评,读者强烈建议我再出一个keras的快速入门路线,经过翻译和搜索网上资源,我推荐4份入门...

    kbsc13
  • 基于 Web 端的人脸识别身份验证

    本文首发于政采云前端团队博客:基于 Web 端的人脸识别身份验证 https://www.zoo.team/article/web-face-recogniti...

    政采云前端团队
  • 腾讯优图开源项目全景图!

    腾讯优图属于国内工业界CV领域实验室的第一梯队,其不仅服务腾讯内部线上产品,也开源了多个前沿研究和工程项目,本文盘点优图实验室开源的所有项目,其中最“火”的三个...

    3D视觉工坊
  • Milvus 实战|生物多因子认证系列 (二):人脸识别

    视觉 AI 作为一个已经发展成熟的技术领域,具有丰富的应用场景和商业化价值,全球 40% 的 AI 企业都集中在视觉 AI 领域。近年来,视觉 AI 除了在智能...

    Zilliz RDS
  • 上手必备!不可错过的TensorFlow、PyTorch和Keras样例资源

    TensorFlow、Keras和PyTorch是目前深度学习的主要框架,也是入门深度学习必须掌握的三大框架,但是官方文档相对内容较多,初学者往往无从下手。本人...

    AI科技大本营
  • OpenCV4系统化学习路线图与教程

    OpenCV4.0发布以来,其依靠良好的接口代码、系统级别的优化、更加通用易学的函数调用,集成OpenVINO与tensorflow、caffe等模型加速推断、...

    磐创AI

扫码关注云+社区

领取腾讯云代金券