前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手教学,人脸检测小案例 opencv+MTCNN

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

作者头像
唐国梁Tommy
发布2021-05-08 15:16:14
1.6K0
发布2021-05-08 15:16:14
举报
文章被收录于专栏:唐国梁Tommy唐国梁Tommy

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

具体操作流程如下:

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 唐国梁Tommy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档